/// <summary> /// 初始化推送信息供应商 /// </summary> public static void InitSender() { PushSenderManager.AddOrUpdateSender(1, new UMSender()); //友盟推送 //PushSenderManager.AddOrUpdateSender(2, new AppleSender());//苹果推送(废弃) PushSenderManager.AddOrUpdateSender(3, new MiSender()); //小米推送 PushSenderManager.AddOrUpdateSender(4, new HuaweiSender()); //华为推送 }
/// <summary> /// 推送消息给推送平台 /// </summary> /// <param name="sendProcessDto">推送消息</param> /// <param name="rzTokenBrandDto">注册信息</param> /// <param name="rzTokenBrandDetailDto">注册明细</param> /// <param name="channelDto">通道</param> /// <param name="appChannelDto">App和通道的关系</param> /// <param name="requestTime">请求时间</param> /// <returns></returns> public SenderRet SendPushMsgToProvider(SendProcessDto sendProcessDto, DeviceChannelDto deviceChannelDto, out int requestTime) { SenderRet senderRet = new SenderRet { IsSuccess = true }; //底层发送消息 requestTime = 0; //获取ProductionMode object ProducttMode = _configLogic.GetConfigValue(ConfigKey.ProductionMode); //构造底层推送消息的参数 PushChannelModel pushChannelModel = new PushChannelModel { ChannelName = deviceChannelDto.ChannelName, Url = deviceChannelDto.Url, AppKey = deviceChannelDto.AppKey, AppSecret = deviceChannelDto.AppSecret, ProductionMode = Convert.ToBoolean(ProducttMode) //获取调试模式 }; PushMsgModel pushMsgModel = new PushMsgModel { Ticker = sendProcessDto.Title, Title = sendProcessDto.Title, Msg = sendProcessDto.Msg, AttachInfo = sendProcessDto.AttachInfo, DeviceToken = deviceChannelDto.DeviceToken, SystemType = (SystemTypeEnum)deviceChannelDto.SystemType }; ISender sender = PushSenderManager.GetSender(deviceChannelDto.ChannelId); if (sender == null) { senderRet.IsSuccess = false; senderRet.Msg = string.Format("ChannelId:{0},推送信息供应商不存在", deviceChannelDto.ChannelId); //LogHelper.Error.Write("SendPushMsgToProvider", senderRet.Msg); return(senderRet); } Stopwatch sw = new Stopwatch(); var isRealPushMsg = _configLogic.GetConfigValue(ConfigKey.IsRealPushMsg); sw.Start(); if (isRealPushMsg != null && Convert.ToBoolean(isRealPushMsg)) { senderRet = PushSender.Send(sender, pushChannelModel, pushMsgModel); } else { Thread.Sleep(200); senderRet = new SenderRet { IsSuccess = true, Sign = Guid.NewGuid().ToString() }; } sw.Stop(); requestTime = (int)sw.ElapsedMilliseconds; return(senderRet); }
/// <summary> /// 将消息推送给推送平台 /// </summary> /// <param name="list"></param> /// <param name="channel"></param> /// <param name="requestTime"></param> /// <returns></returns> public SenderRet SendPushMsgListToProvider(List <SendProcessDto> processList, SystemTypeEnum systemType, ChannelDto channelDto, out int requestTime) { string retMsg = string.Empty; SenderRet senderRet = new SenderRet { IsSuccess = true }; requestTime = 0; if (processList == null || processList.Count == 0) { senderRet.IsSuccess = false; senderRet.Msg = "SendProcessDtoList为空"; return(senderRet); } int appId = processList.First().AppId; AppChannelDto appChannelDto; if (!_channelLogic.CheckAppChannel(appId, (int)systemType, channelDto.Id, out appChannelDto, out retMsg)) { senderRet.IsSuccess = false; senderRet.Msg = retMsg; return(senderRet); } //推送第三方平台 友盟只能单推,小米可以批量推,个推也能批量推送 ISender sender = PushSenderManager.GetSender(channelDto.Id); if (sender == null) { senderRet.IsSuccess = false; senderRet.Msg = string.Format("ChannelId:{0},推送信息供应商不存在", channelDto.Id); return(senderRet); } PushChannelModel pushChannelModel = new PushChannelModel { ChannelName = channelDto.ChannelName, Url = channelDto.MultiUrl, AppKey = appChannelDto.AppKey, AppSecret = appChannelDto.AppSecret, ProductionMode = Convert.ToBoolean(_configLogic.GetConfigValue(ConfigKey.ProductionMode)), SystemType = systemType, PushNum = channelDto.PushNum ?? 50, TimeOut = channelDto.PushTimeOut }; List <PushMsgModel> pushMsgModelList = processList.Select(e => { return(new PushMsgModel { Id = e.Id, Ticker = e.Title, Title = e.Title, Msg = e.Msg, AttachInfo = e.AttachInfo, DeviceToken = e.DeviceToken, SystemType = systemType }); }).ToList(); var isRealPushMsg = _configLogic.GetConfigValue(ConfigKey.IsRealPushMsg); Stopwatch sw = new Stopwatch(); sw.Start(); if (isRealPushMsg != null && Convert.ToBoolean(isRealPushMsg)) { senderRet = sender.SendList(pushChannelModel, pushMsgModelList); } else { Thread.Sleep(2000); senderRet = new SenderRet { IsSuccess = true, Sign = Guid.NewGuid().ToString() }; } sw.Stop(); requestTime = (int)sw.ElapsedMilliseconds; return(senderRet); }