1***@qq.com
1***@qq.com
  • 发布:2019-11-05 17:10
  • 更新:2023-12-05 17:06
  • 阅读:3689

关于消息推送集成知识分享-采用个推 遇到了若干个坑

分类:HBuilderX

在集成过程中遇到了诸多坑啊,几乎把社区里所有关于个推的问题看了一个遍,功夫不负有心人,终于完成了!

注意事项:
IDE:HbuilderX 版本2.3.7.20191024
后台服务语言: java
打包方式:云打包 本地自定义基座方式测试

实现结果:
安卓:
在线时,可以在通知栏收到推送消息(通知类型和透传类型都可以收到)
离现时,由于个推推送机制以及各厂商限制问题,暂不能收到,但是消息有效期内,打开app就会在通知栏收到信息
IOS:
在线和离线的情况,都可以正常在通知栏收到消息(只支持透传类型)
为了能够让安卓和IOS都正常收到消息,后端服务发送消息类型都选择了透传类型模板 TransmissionTemplate template = new TransmissionTemplate();
1. 开发前必读文档

2.遇到的坑

  • 关于为何plus.push.createMessage创建不了本地消息以及为何点击通知栏无法触发click事件问题
    答:我遇到情况是,我是用的IDE最开始是Hbuilder,版本已经很老了,在这方面打包或者自定义基座运行会出现上述两个问题,后来改用IDE:HbuilderX进行开发测试就可以了

  • 关于为何IOS收不到离线消息(包括app后台运行以及app进程down)
    答: 1.首先的问题让你们的后端服务查看发送的消息是否配置了IOS通知样式 template.setAPNInfo(getAPNPayload(title,content,payload));

    1. 此时如果发现还是收不到消息,大概率是因为你们上传到个推的push证书有问题,请重新按照 iOS 推送证书的创建与Xcode中的配置 进行生产,然后上传到个推
      3.经上面两个步骤 IOS推送解决
      -关于 IOS 离线消息(app后台运行)自动触发click事件或者触发两次 的问题
      答: 这个问题出在后端服务上,需要后端设置 payload.setContentAvailable(0); //此处官方文档设置了1
  • 关于如何清空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

3 关注 分享
skysowe m***@foxmail.com z***@hzdfpm.com

要回复文章请先登录注册

AKA小迪

AKA小迪

app 耶能用嘛?
2023-12-05 17:06
1***@qq.com

1***@qq.com (作者)

回复 skysowe :
是针对H5+的
2019-11-11 10:11
skysowe

skysowe

以上代码是针对H5+的,还是针对UniApp的?我看了下源代码,貌似是针对H5+的,太好了,最近刚要做推送,谢谢分享
2019-11-06 11:09
今天回复我了吗

今天回复我了吗

1
2019-11-05 23:35