在集成过程中遇到了诸多坑啊,几乎把社区里所有关于个推的问题看了一个遍,功夫不负有心人,终于完成了!
注意事项:
IDE:HbuilderX 版本2.3.7.20191024
后台服务语言: java
打包方式:云打包 本地自定义基座方式测试
实现结果:
安卓:
在线时,可以在通知栏收到推送消息(通知类型和透传类型都可以收到)
离现时,由于个推推送机制以及各厂商限制问题,暂不能收到,但是消息有效期内,打开app就会在通知栏收到信息
IOS:
在线和离线的情况,都可以正常在通知栏收到消息(只支持透传类型)
为了能够让安卓和IOS都正常收到消息,后端服务发送消息类型都选择了透传类型模板 TransmissionTemplate template = new TransmissionTemplate();
1. 开发前必读文档
- Push推送开发指南
- iOS 推送证书的创建与Xcode中的配置
(为什么要看IOS证书呢,因为实现IOS离线推送需要它,不然不能离线推送)
2.遇到的坑
-
关于为何plus.push.createMessage创建不了本地消息以及为何点击通知栏无法触发click事件问题
答:我遇到情况是,我是用的IDE最开始是Hbuilder,版本已经很老了,在这方面打包或者自定义基座运行会出现上述两个问题,后来改用IDE:HbuilderX进行开发测试就可以了 -
关于为何IOS收不到离线消息(包括app后台运行以及app进程down)
答: 1.首先的问题让你们的后端服务查看发送的消息是否配置了IOS通知样式 template.setAPNInfo(getAPNPayload(title,content,payload));- 此时如果发现还是收不到消息,大概率是因为你们上传到个推的push证书有问题,请重新按照 iOS 推送证书的创建与Xcode中的配置 进行生产,然后上传到个推
3.经上面两个步骤 IOS推送解决
-关于 IOS 离线消息(app后台运行)自动触发click事件或者触发两次 的问题
答: 这个问题出在后端服务上,需要后端设置 payload.setContentAvailable(0); //此处官方文档设置了1
- 此时如果发现还是收不到消息,大概率是因为你们上传到个推的push证书有问题,请重新按照 iOS 推送证书的创建与Xcode中的配置 进行生产,然后上传到个推
-
关于如何清空IOS角标 或者对角标数字进行加减
答:代码如下
var UIApplication = plus.ios.import("UIApplication");
var app = UIApplication.sharedApplication();
//获取应用图标的数量
var oldNum = app.applicationIconBadgeNumber();
if(oldNum!=0){
// console.log("oldNum:"+oldNum);
var newNum = oldNum - 1;
// console.log("newNum:"+newNum);
//设置应用图标的数量
plus.runtime.setBadgeNumber(newNum);
//导入个推原生类
var GeTuiSdk = plus.ios.importClass('GeTuiSdk');
GeTuiSdk.setBadge(newNum);
}
-关于IOS平台创建本地消息也会触发监听的"receive"事件
答: 对payload 进行本地标识添加 代码如下:当然根据自己业务进行处理plus.push.addEventListener('receive', function(msg){
console.log("透传消息:"+JSON.stringify(msg))
var apsMsg = msg.aps;//来自离线消息
if(msg.payload.indexOf("LocalMsg")==-1){
var tit = msg.title;
var options = {cover:false,title:tit};
var da="LocalMsg:"+msg.payload;
plus.push.createMessage(msg.content,da, options );
}
}, false);
-关于如何清空通知栏消息
由于推送消息目的是提示用户打开app促活 所以我们默认只要用户打开app就会清空消息 并且角标设0
plus.push.clear();
如有不对的地方请指教,
关于有什么问题可以提问,我会尽量及时解答
上传后端服务代码 以及 前端js