unipush消息推送

1 . 在app.vue页面onLaunch中添加

onLaunch: function() {
   var platform = uni.getSystemInfoSync().platform;
   // #ifdef APP-PLUS
   plus.screen.lockOrientation("portrait-primary");
   //推送
   var pinf = plus.push.getClientInfo();
   var cid = pinf.clientid; //客户端标识
   console.log('cid:' + cid);
   const _self = this;
   const _handlePush = function(payload) {
     var pages = getCurrentPages();
     console.log('----------', payload)
     //页面栈为0,标记app是被push唤醒,在欢迎页执行跳转逻辑
     if (payload.alive === false) {
        console.log('设置storage')
        uni.setStorage({
            key:'appLaunchedByPush',
            data:payload
        })
     }
     else { //app在线,收到push可以直接跳转
        uni.navigateTo({
            url: '/pages/index'
        });
     }
   };
   plus.push.addEventListener('click', function(message) {
     console.log('push click =======', message)
     if (platform == 'ios') {
       //离线是payload为object , 在线时本地创建的为string(本地创建通知只能传string,否则无法传递payload)
       if (typeof message.payload == 'string') {
         console.log('string')
         var payload = JSON.parse(message.payload);
       } else {
         console.log('obj')
         var payload = message.payload;
       }
       _handlePush(payload);
       return
     }
     //这里可以写跳转业务代码
     _handlePush(message.payload);
   });
   plus.push.addEventListener('receive', function(message) {
     console.log('push receive ======', message);
     if (message.type == "receive"){ // 这里判断触发的来源,否则一直推送。  
       if (platform == 'ios') {
         console.log('ios receive', message);
         if (typeof message.payload == 'string') {
           plus.push.createMessage(
             message.content,
             message.payload, {
             cover: false,
             title: message.title,
           });
         } else {
           plus.push.createMessage(
             message.content,
             JSON.stringify(message.payload), {
              cover: false,
              title: message.title,
           });
         } 
       }
       else {
         console.log('android receive======', message);
         //执行跳转判断或添加本地通知
         plus.push.createMessage(
           message.content, 
           JSON.stringify(message.payload), {
           cover: false,
           title: message.title
         });
       }
     }
   });
 }

2 . 处理离线消息跳转在app默认跳转页面添加我这里是登录页面

uni.switchTab({
  url: '/pages/workplace/index',
  success: () => {
    //处理app被push唤醒时消息推送的跳转
    const payload = uni.getStorageSync('appLaunchedByPush')
    console.log('appLaunchedByPush', payload)
    if (payload) {          
      setTimeout(()=> {
        console.log(payload + 'setTimeout')
        uni.navigateTo({
          url: '/pages/index'
         });
        uni.setStorage({
          key:'appLaunchedByPush',
          data:null
        })
      })  
    } 
  }
})

3 . 在manifest.json =》 App模块配置中勾选消息推送及uniPush选项开启消息推送功能

4 . 在unicloud开发者中心添加项目应用,添加好后进入应用在 Uni push=》消息推送中发送消息测试是否可以收到推送的消息

5 . 在unicloud开发者中心 =》 你创建的应用 =》Uni push=》厂商推送设置中配置各厂商推送设置(app在线时消息走的是第三方消息推送平台,离线时走的是手机厂商的推送通道,所以这个必须配置,如果不配置在app离线时会收不到离线消息),配置完成app离线时也可以收到推送消息啦

遇到的问题:

1 . 华为离线消息推送收不到?

(1)厂商推送是否配置完成,agconnect-services.json文件是否上传(2)打包或打自定义基座必须使用自有证书,共有证书收不到消息推送(3)华为手机会默认把离线消息归为营销通知,离线时消息是收到的只是不展示出来,在手机设置=》通知=》你的app=》打开营销通知选项才可以正常显示离线消息

2 . ios在线离线消息都收不到?

(1)是否申请ios证书(2)在开发者中心=》消息推送=》应用配置=》查看是否配置ios相关证书(3)打自定义基座时是否正确上传证书文件及私钥证书

3 . 离线消息收到了,但是不能正常跳转,点击后只能跳转到首页?

离线消息点击后会默认先跳转到首页或者欢迎页,这时在app.vue里写的跳转消息详情的页面也执行跳转,页面会报错提示不要重复跳转详情页。离线消息点击跳转到首页后,需要在app首页判断是否有离线消息,有的话再执行跳转消息详情页面。

你可能感兴趣的:(uniappvue.js)