首页 > 其他分享 >uni-app中的推送

uni-app中的推送

时间:2024-01-14 13:35:30浏览次数:18  
标签:res app content redirectUrl uni 推送 payload

需求:最近公司要做推送,用的是uni-app,这里备注一下

 

App.vue里这样操作:

分别是iOS 和Android的在线创建推送,以及点击事件的处理,这里点击事件存储一下,然后发送消息在首页处理推送。

如果在这里处理,会有先跳转推送页再返回首页的问题。

    plus.push.addEventListener('click', function (msg) {
      // 存储一下点击后的推送信息
      // uni.setStorageSync('receive', msg);
      // 2 处理跳转  如果没登录 去登录
      // const resos = uni.getSystemInfoSync();
      // if (resos.platform === 'ios') {}
      if (!userStore.isLogin) {
        uni.switchTab({
          url: '/pages/autoLogin/index',
        });
        return;
      }
      if (msg.aps) {
        // 离线 到首页再执行
        uni.setStorageSync('msg_payload', msg.payload);
        uni.$emit('msgPayload');
      } else {
        // 在线可立即执行 但是不行,离线状态点击在线推送不行,所以也到首页再执行
        uni.setStorageSync('msg_payload', msg.payload);
        uni.$emit('msgPayload');
      }
    });
    // 在线推送点击  receive 内创建推送弹窗
    uni.onPushMessage(res => {
      if (res.type == 'click') {
        console.log('点击业务在addEventListener处理');
      }
      if (res.type == 'receive') {
        // 创建推送显示
        // uni.setStorageSync('receive', res);
        // 创建推送显示  ios
        console.log('===onPushMessage======res=============', res);
        const resos = uni.getSystemInfoSync();
        if (resos.platform === 'ios') {
          var content_obj = JSON.parse(res.data.content);
          let titleStr = decodeURIComponent(content_obj.title);
          let contentStr = decodeURIComponent(content_obj.content);
          uni.createPushMessage({
            icon: '',
            title: titleStr || '连xx',
            content: contentStr || '您有一个通知',
            payload: content_obj.url,
            success: res => {
              console.log('成功创建', res);
            },
          });
        } else {
          // 创建推送显示  android
          let contentStr = decodeURIComponent(res.data.content);
          uni.createPushMessage({
            icon: '',
            title: res.data.title || '连xx',
            content: contentStr || '您有一个通知',
            payload: res.data.payload.url,
            success: res => {
              console.log('成功创建', res);
            },
          });
        }
      }
      plus.runtime.setBadgeNumber(0);
    });
    // 获取客户端标识
    uni.getPushClientId({
      success: res => {
        let push_clientid = res.cid;
        uni.setStorageSync('cid', push_clientid);
      },
    });
    // #ifdef APP-PLUS
    let pinf = plus.push.getClientInfo();
    if (pinf && pinf.clientid) {
      uni.setStorageSync('cid', pinf.clientid);
    } else {
      var obtainingCIDTimer = setInterval(function () {
        pinf = plus.push.getClientInfo();
        if (pinf.clientid) {
          uni.setStorageSync('cid', pinf.clientid);
          clearInterval(obtainingCIDTimer);
        }
      }, 50);
    }
    // #endif
    plus.runtime.setBadgeNumber(0);

首页这样处理:

如果是离线推送,冷启动,外部的msgPayload()生效,在线推送的话,

uni.$on('msgPayload', () => {
    msgPayload();
  });
生效。跳转后,移除存储的跳转信息。
onReady(() => {
  msgPayload();
  uni.$on('msgPayload', () => {
    msgPayload();
  });
});

// 不同意隐私 关闭Model
function msgPayload() {
  let payload = uni.getStorageSync('msg_payload');
  if (payload && userStore.isLogin) {
    var redirectUrl = decodeURIComponent(payload);
    console.log('=离线=======redirectUrl=======', redirectUrl); // 123456
    setTimeout(() => {
      if (isHttpLink(redirectUrl)) {
        redirectUrl = getJoinSSOUrl(redirectUrl, userStore.token);
      }
      if (isTabBarLink(redirectUrl)) {
        uni.switchTab({
          url: redirectUrl,
        });
      } else {
        jumpSupport(redirectUrl, '1');
      }
    }, 500);
    setTimeout(() => {
      uni.removeStorageSync('msg_payload');
    }, 1000);
  }
}

 

标签:res,app,content,redirectUrl,uni,推送,payload
From: https://www.cnblogs.com/ljcgood66/p/17963596

相关文章

  • uniapp的video组件在层级太高,无法遮挡的问题
    uniapp-vue项目中需要播放视频,uniapp的video组件在层级太高,无法遮挡,所以使用原生dom的video标签在APP中播放视频,可以被其他元素进行覆盖、遮挡,页面具有更高的定制性<!--eslint-disable--><template><viewv-html="videoHtml"id="dom-video"class="dom-video......
  • Android平台RTMP推送|轻量级RTSP服务|GB28181设备接入模块之实时快照保存JPG还是PNG?
    JPG还是PNG?JPG和PNG是两种常见的图片文件格式,在压缩方式、图像质量、透明效果和可编辑性等方面存在显著差异。压缩方式:JPG是一种有损压缩格式,通过丢弃图像数据来减小文件大小,因此可能会损失一些图像细节和质量。而PNG使用的是无损压缩格式,它不会丢失任何原始图像数据,从而保持了图像......
  • Azure Logic Apps
      在AzureSentinel中,AzureLogicApps可以用于增强和自动化安全操作和响应。它们可以作为安全编排自动化响应(SOAR)的一部分,帮助自动化和简化安全工作流程。以下是一些具体的应用实例: 数据富集和分析:例子:在接收到安全警报时,使用LogicApp来自动从其他源(如威胁情报数据......
  • Next.js 开发指南 路由篇 | App Router
    Next.js开发指南路由篇|AppRouter 前言路由(routers)是应用的重要组成部分。所谓路由,有多种定义,对于应用层的单页应用程序而言,路由是一个决定URL如何呈现的库,在服务层实现API时,路由是解析请求并将请求定向到处理程序的组件。简单的来说,在Next.js中,路由决定了一个页......
  • 微软企业库Unity学习笔记(一)
    微软企业库Unity学习笔记(一) 本文主要介绍:关于Unitycontainer配置,注册映射关系、类型,单实例、已存在对象和指出一些container的基本配置,这只是我关于Unity的学习心得和笔记,希望能够大家多交流相互学习到更多知识,谢谢大家的支持。我们可以通过以下两种方法给Unitycontain......
  • 微软企业库Unity学习笔记(二)
    微软企业库Unity学习笔记(二) 接下来介绍一下依赖注入的方式:构造函数注入属性注入方法注入一、构造函数注入我们将介绍单构造函数和多构造函数注入1)单构造函数使用自动注入单构造函数自动注入,这里我们使用一个简单的例子具体类MyObject依赖于具体类MyDependentC......
  • 如何再造宇宙厂所有App?
    本文内容,纯属十年老架构师杜撰,切勿照着实操,可能会给你带来几十亿的流量,怕你的服务器扛不住。破音前端用uniapp,花800买个短视频应用模板,后端用golang支持高并发,数据库用图数据库加elasticsearch,用户关系用图数据库,内容元数据直接放在elasticsearch,方便搜索,视频,音频,图片......
  • 如何让Visual Studio Tools for Unity插件用于调试你自己的Mono嵌入应用程序
       最近在测试将mono嵌入到C++应用程序中,苦于没有调试器,有时候还是不怎么方便。网上搜了一下,有VS插件MDebug、VSMonoDebugger,实际试用了一下,有点麻烦,而且似乎对Windows+VisualStudio2022支持不大好。因此想到了,Unity引擎是基于mono的,VisualStudio2022也内置了针对Unity的......
  • uniapp---下拉刷新上拉加载
    在用uniapp做APP的时候,下拉刷新,上拉加载是常见的功能需求,现在整理一下: 第一步:设置下拉和上拉属性找到【pages.json】设置:"enablePullDownRefresh":true,"onReachBottomDistance":100,示例: 第二步:页面新增下拉和上拉方法onPullDownRefreshonReachBottom示例:<sc......
  • Applescript成功实现imessage数据筛选,imessage蓝号检测,无痕检测手机号是否注册imess
    一、imessages数据检测的两种方式:1.人工筛选,将要验证的号码输出到文件中,以逗号分隔。再将文件中的号码粘贴到iMessage客户端的地址栏,iMessage客户端会自动逐个检验该号码是否为iMessage账号,检验速度视网速而定。红色表示不是iMessage账号,蓝色表示iMessage账号。2.编写苹果MacOs......