C#结合UniPush通过服务端接口下发推送消息(安卓)

前言

最近由于做个手机APP的OA办公系统,最终选择了uni-app。总体感觉还可以。OA的业务就会有很多的待办,为解决这一问题就选择了Unipush。这个功能官方给的文档挺丰富的,但是很多地方还是有坑,按照官网的文档,在线推送基本不会有太大问题。但是有个问题就是,离线推送。社区也有很多人卡在这里,我也是如此。在本文做个简单总结,有缘看到的同学可以少浪费点时间,本文尽量言简意赅。

关于官网的以下两点补充说明

1)离线推送和离线接收:正确的理解是手机APP退出或者进程被杀掉还能收到推送的消息,并且点开消息能启动APP。

2)离线推送unipush已经做好了,即使离线了,再次启动APP也能接收到历史的信息。主要的问题是,APP不启动还能收到消息,这点官网也有说,但是很多同学理解有歧义或者遇到问题。

官方参考文档:

UniPush开通指南 https://ask.dcloud.net.cn/article/35716

UniPush使用指南 http://ask.dcloud.net.cn/article/35622

Unipush常见问题 https://ask.dcloud.net.cn/article/36611

认真阅读以上文档,也不一定会成功,还有几个坑,大概列举下:

1)想要离线接收消息,必须使用厂商推送,必须要去厂商申请APPID等

2)厂商申请的APPID等要填写正确,在DCloud开发者中心要填写正确,华为的申请不需要提交,也不需要上架,但是SHA256一定要填。

3)服务端下推必须通过“透传消息”类型下发推送消息。

        上面几个点注意了,还是不一定会成功,下面还有坑,unipush官方说服务端下推参考个推的集成文档。个推的文档里面也有坑,虽然unipush也已说明但是还是会坑到很多人,就是官网php例子的这两行代码:

 $payload = '{"title":"测试标题","content":"测试内容","sound":"default","payload":"test"}';  
    $intent = 'intent:#Intent;action=android.intent.action.oppopush;launchFlags=0x14000000;component=io.dcloud.HBuilder/io.dcloud.PandoraEntry;S.UP-OL-SU=true;S.title=测试标题;S.content=测试内容;S.payload=test;end';  

这两行个推的demo里面没有详细的例子,初次开发下推会坑在这里,我的代码如下:

       

        private static TransmissionTemplate TransmissionTemplateDemo(string title, string content)
        {
            TransmissionTemplate template = new TransmissionTemplate();
            template.AppId = BaseConfig.AppId;
            template.AppKey = BaseConfig.AppKey;
            //应用启动类型,1:强制应用启动 2:等待应用启动
            template.TransmissionType = 2;
            Payload payload = new Payload();
            payload.title = title;
            payload.content = content;
            payload.payload = "test";
            //透传内容  
            template.TransmissionContent = JsonConvert.SerializeObject(payload); ;
            Notify notify = new Notify();
            notify.Content = title;
            notify.Title = content;
            notify.Intent = $"intent:#Intent;action=android.intent.action.oppopush;launchFlags=0x14000000;component=你的包名/io.dcloud.PandoraEntry;S.UP-OL-SU=true;S.title={title};S.content={content};S.payload=test;end";
            notify.Type = NotifyInfo.Types.Type._intent;
            template.set3rdNotifyInfo(notify);
            //设置通知定时展示时间,结束时间与开始时间相差需大于6分钟,消息推送后,客户端将在指定时间差内展示消息(误差6分钟)
            //string begin = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
            //string end = DateTime.Now.AddDays(1).ToString("yyyy-MM-dd HH:mm:ss");
            //template.setDuration(begin, end);

            return template;
        }

我在代码里注释掉的两行是个坑,个推的文档里都会有这两行,所以我没注意,一直没成功,注释掉就成功了:

            //设置通知定时展示时间,结束时间与开始时间相差需大于6分钟,消息推送后,客户端将在指定时间差内展示消息(误差6分钟)
            //string begin = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
            //string end = DateTime.Now.AddDays(1).ToString("yyyy-MM-dd HH:mm:ss");
            //template.setDuration(begin, end);

以上就是我遇到的需要注意的坑,我用winform做了一个服务端下推的demo客户端,下推华为手机测试在线离线下推接收都没问题。需要参考的同学可以自行下载(https://download.csdn.net/download/f363641380/12109647)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值