关于uniapp: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首页判断是否有离线音讯,有的话再执行跳转音讯详情页面。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理