.Net(C#)腾讯信鸽推送

这是我出差回来,听见我们手机端跟经理讲这款第三方推送可以解决手机杀死的问题。好的,既然能解决那我就改。其实信鸽推送跟极光推送差不多。我就在原来的基础上稍作修改。

第一步:当然得去官方配置一下啦~这里我就不描述了(苹果安卓需要创建两个应用,所以不能跟极光似的配置一个就好)

第二步:我这里没有引用官方的dll文件,直接获取代码拷入我们系统中,这样改起来方便,可以自己稍微改一下方法,下载官方demo就好C#信鸽SDK 其实下载的demo是用问题的得需要自己修改配置,在官方推送方法中添加param.Add("push_id", message.getPushID().ToString());,切记不要太依赖官方文档,有点坑人。当时特别气愤本想找客服理论,结果人家一直繁忙,我一直在排队。后来想了想,免费的给我用,能用就不错了。所以自己要善于修改。

第三步:推送及配置(放到一起了)

IOS我在其中添加了推送的声音及角标。角标-1代表不变,-2代表自动+1,其他正数代表自定义

        /// <summary>
        /// 推送
        /// </summary>
        /// <param name="content">内容</param>
        /// <param name="registerId">token列表</param>
        /// <param name="pushList">附近信息</param>
        /// <returns></returns>
        public static bool JPushByRegiserID_XG(string content, List<string> registerId, List<Push> pushList)
        {

            if (!isAllew)
            {
                return false;
            }
            string androidAppID = AndroidAppID.SystemSetValue;
            string androidSercret = AndroidSercret.SystemSetValue;
            long androidAccessID = long.Parse(AndroidAccessID.SystemSetValue);
            string iosAppID = IOSAppID.SystemSetValue;
            string iosSercret = IOSSercret.SystemSetValue;
            long iosAccessID = long.Parse(IOSAccessID.SystemSetValue);


            try
            {
                Dictionary<String, Object> custom = new Dictionary<string, object>();
                foreach (var item in pushList)
                {
                    custom.Add(item.Key, item.Value);
                }

                MessageIOS iosMsg = new MessageIOS();
                iosMsg.setAlert(content);
                iosMsg.setBadgeType(-2);//角标
                iosMsg.setSound("beep.wav");//提示音
                iosMsg.setCustom(custom);

                XingeApp iosXG = new XingeApp(iosAppID, iosAccessID, iosSercret);
                string retios = iosXG.PushMultipleDevicesIOS(registerId, iosMsg);
                JObject joios = (JObject)JsonConvert.DeserializeObject(retios);
                string ioscd = joios["ret_code"].ToString();

                XingeApp androidXG = new XingeApp(androidAppID, androidAccessID, androidSercret);
                MessageAndroid androidMsg = new MessageAndroid();
                androidMsg.setType(XGPushConstants.OrdinaryMessage);
                androidMsg.setTitle("软件名字");
                androidMsg.setContent(content);
                androidMsg.setCustom(custom);
                string retAndroid = androidXG.PushMultipleDevices(registerId, androidMsg);
                JObject joAndroid = (JObject)JsonConvert.DeserializeObject(retAndroid);
                string Androidcd = joAndroid["ret_code"].ToString();

                if (ioscd == "0" && Androidcd == "0")//成功
                {
                    return true;
                }
                return false;

            }
            catch (APIRequestException e)
            {
                return false;
            }

        }

由于我把官方方法改了,苹果设置环境在推送方法中设置的

        /// <summery> 推送消息给多个设备, 限 iOS 系统使用
        /// <param name = "deviceTokens"> 接收消息的设备标识列表 </param>
        /// <param name = "message"> iOS 消息结构体 </param>
        /// <param name = "environment"> 指定推送环境 </param>
        /// <returns> 推送结果描述 </returns>
        /// </summery>
        public string PushMultipleDevicesIOS(List<string> deviceTokens, MessageIOS message)
        {
            if (!isValidMessageType(message, PushEnvironmentofiOS.product))
            {
                return "{'ret_code':-1,'err_msg':'message type or environment error!'}";
            }
            if (!message.isValid())
            {
                return "{'ret_code':-1,'err_msg':'message invalid!'}";
            }
            Dictionary<string, object> param = new Dictionary<string, object>();
            param.Add("audience_type", "token_list");
            param.Add("platform", "ios");
            param.Add("token_list", toJArray(deviceTokens));
            // param.Add("access_id", this.xgPushAppAccessKey);
            param.Add("expire_time", message.getExpireTime());
            param.Add("send_time", message.getSendTime());
            // param.Add("device_token", deviceToken);
            param.Add("message_type", message.getType());
            param.Add("message", message.toJson());
            param.Add("timestamp", (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000);
            param.Add("environment", PushEnvironmentofiOS.product);
            if (message.getLoopInterval() > 0 && message.getLoopTimes() > 0)
            {
                param.Add("loop_interval", message.getLoopInterval());
                param.Add("loop_times", message.getLoopTimes());
            }
            param.Add("push_id", message.getPushID().ToString());
            string ret = requestXGServerV3(XingeApp.XGPushServierHost, XingeApp.XGPushAppPath, param);
            return ret;
        }

PushEnvironmentofiOS.product 生产环境(上线修改)PushEnvironmentofiOS.develop开发环境 Android几乎不需要改动。

主要的是不要以官方后台推送数据判断是否推送成功,官方后台不太准确!

转载于:https://my.oschina.net/talentcat/blog/2218897

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值