uni-app 集成推送

研究了几天,终于是打通了uni-app的推送,本文主要针对的是App端的推送开发过程,分为在线推送和离线推送。我们使用uni-app官方推荐的uni-push2.0。官方文档

准备工作:开通uni-push功能

image.png

  1. 勾选uniPush2.0
  2. 点击"配置"
  3. 填写表单

image.png
关联服务空间说明:

uni-push2.0需要开发者开通uniCloud。不管您的业务服务器是否使用uniCloud,但实现推送,就要使用uniCloud服务器。

  • 如果您的后台业务使用uniCloud开发,那理解比较简单。
  • 如果您的后台业务没有使用uniCloud,那么也需要在uni-app项目中创建uniCloud环境。在uniCloud中写推送逻辑,暴露一个接口,再由业务后端调用这个推送接口。

在线推送

以上操作配置好了以后,回到HBuilderX。

因为上面修改了manifest.json配置,一定要重新进行一次云打包(打自定义调试基座和打正式包都可以)后才会生效。

客户端代码

我这边后端使用的是传统服务器,未使用云开发。要实现推送,首先需要拿到一个客户端的唯一标识,使用uni.getPushClientId API链接地址

onLaunch() {
    uni.getPushClientId({
        success: (res) => {
            let push_clientid = res.cid
            console.log('客户端推送标识:', push_clientid)
            // 保存在全局,可以在进入app登录账号后调用一次接口将设备id传给后端
            this.$options.globalData.pushClientId = push_clientid
            // 一进来就掉一次接口把push_clientid传给后端
            this.$setPushClientId(push_clientid).then(res => {
                console.log('[ set pushClientId res ] >', res)
            })
        },
        fail(err) {
            console.log(err)
        }
    })
}

客户端监听推送消息

监听推送消息的代码,需要在收到推送消息之前被执行。所以应当写在应用一启动就会触发的应用生命周期onLaunch中。

//文件路径:项目根目录/App.vue
export default {
    onLaunch: function() {
        console.log('App Launch')
        uni.onPushMessage((res) => {
            console.log("收到推送消息:",res) //监听推送消息
        })
    },
    onShow: function() {
        console.log('App Show')
    },
    onHide: function() {
        console.log('App Hide')
    }
}

服务端代码

  1. 鼠标右击项目根目录,依次执行

image.png

  1. 然后右击uniCloud目录,选择刚开始创建的云服务空间

image.png

  1. 在cloudfunctions目录右击,新建云函数/云对象,命名为uni-push,会创建一个uni-push目录

image.png

  1. 右击uni-push目录,点击 管理公共模块或扩展库依赖,选择uni-cloud-push

image.png

  1. 右击database目录,新建DB Schema,创建这三张表:opendb-tempdata,opendb-device,uni-id-device,也就是json文件,直接输入并选择相应的模板。
  • 修改index.js
'use strict';
const uniPush = uniCloud.getPushManager({appId:"__UNI__XXXX"}) //注意这里需要传入你的应用appId
exports.main = async (event, context) => {
  console.log('event ===> ', event)
  console.log('context ===> ', context)
  // 所有要传的参数,都在业务服务器调用此接口时传入
  const data = JSON.parse(event.body || '{}')
  console.log('params ===> ', data)
	return await uniPush.sendMessage(data)
};

  • package.json
{
  "name": "uni-push",
  "dependencies": {},
  "main": "index.js",
  "extensions": {
    "uni-cloud-push": {}
  }
}
  1. 右击uni-push目录,点击上传部署

  2. 云函数url化

    登录云函数控制台,进入云函数详情

image.png
8. postman测试一下接口

image.png

没问题的话,客户端将会打印“console.log(“收到推送消息:”, xxx)”,这一步最好是使用真机,运行到App基座,使用自定义调试基座运行,会在HBuilderX控制台打印。

离线推送

APP离线时,客户端收到通知会自动在通知栏创建消息,实现离线推送需要配置厂商参数。

苹果需要专用的推送证书,创建证书参考链接

image.png
安卓需要在各厂商开发者后台获取参数,参考链接

参数配置好了以后,再次在postman测试

注意
安卓需要退出app后,在任务管理器彻底清除进程,才会走离线推送

解决离线推送没有声音

这个是因为各安卓厂商为了避免开发者滥用推送进行的限制,因此需要设置离线推送渠道,查看文档

调接口时需要传一个channel参数

image.png

实现离线推送自定义铃声

这个功能只有华为和小米支持

也需要设置channel参数,并使用原生插件,插件地址

注意
使用了原生插件,一定要重新进行一次云打包

  • 华为,申请了自分类权益即可
  • 小米,在申请渠道时,选择系统铃声,url为android.resource://安卓包名/raw/铃声文件名(不要带后缀)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/78851.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

解决跨时区跨语言的国外大文件传输问题

随着信息技术的飞速发展和全球化的深入推进,跨国团队、跨国公司之间的合作变得越来越普遍。在这种背景下,大文件的传输成为了一个经常遇到的挑战。跨语言、跨时区的国外大文件传输,由于涉及到复杂的网络环境、不同国家法律法规等多方面的问题…

MySQL 索引为什么使用 B+ 树,而不使用红黑树 / B 树 ?

面试官问 :索引为什么使用 B 树,而不使用 B 树,不使用红黑树呢 首先 B 树和 B 树 都是多叉搜索树,然后我们先来观察一下 B 树和 B 树的数据结构: B 树的数据结构实现 >> B 树的数据结构实现 >> 【B 树相…

DAY2,ARM(特殊功能寄存器,数据操作指令,跳转指令)

1.cmp、sub、b指令的使用; 代码: .text .global _start _start:mov r0,#9mov r1,#15loop:cmp r0,r1beq stopsubcc r1,r1,r0subhi r0,r0,r1b loopstop:b stop .end结果: 2.汇编指令计算1~100之间和; 代码: .text .gl…

用友Java后端笔试2023-8-5

计算被直线划分区域 在笛卡尔坐标系,存在区域[A,B],被不同线划分成多块小的区域,简单起见,假设这些不同线都直线并且不存在三条直线相交于一点的情况。 img 那么,如何快速计算某个时刻,在 X 坐标轴上[ A,…

dB(分贝)定义及其应用(音量 dB dBA 计算 调整)

一、dB的诞生背景 dB是英文“decibel”的简写,其中,deci表示十分之一,Bel表示“贝”。Decibel,分贝就是十分之一贝。“贝”是“贝尔”的简称,是以杰出科学家Alexander Graham Bell的名字来命名的单位。贝尔在1876年获…

机器学习笔记 - 在 Vision Transformer 中可视化注意力

2022 年,视觉变换器(ViT) 成为卷积神经网络(CNN) 的有力竞争对手,后者现已成为计算机视觉领域的最先进技术,并广泛应用于许多图像识别应用中。在计算效率和准确性方面,ViT 模型超过了当前最先进的 (CNN) 几乎四倍。 一、视觉转换器 (ViT) 如何工作? 视觉转换器模型的性能…

详细整合Spring+SpringMVC+MyBatis+logback(SSM)项目

整体目录结构 表结构 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.a…

【前端|Javascript第5篇】全网最详细的JS的内置对象文章!

前言 在当今数字时代&#xff0c;前端技术正日益成为塑造用户体验的关键。我们在开发中需要用到很多js的内置对象的一些属性来帮助我们更快速的进行开发。或许你是刚踏入前端领域的小白&#xff0c;或者是希望深入了解内置对象的开发者&#xff0c;不论你的经验如何&#xff0c…

vue利用 sortable 完成表格拖拽

先讲一下vue2&#xff0c;使用sortable完成表格拖拽【不只是表格&#xff0c;div也可以实现&#xff0c;但我项目中是表格拖拽】 github地址 安装 npm install sortablejs --save使用 &#xff08;我的项目中是拖拽一个小按钮移动&#xff0c;而不是整行&#xff09; <te…

SQL Server数据库无法连接

问题如下&#xff1a; 原因&#xff1a;sql server服务器未开启 解决方法&#xff1a;以管理员身份打开cmd&#xff0c;输入&#xff1a;net start mssqlserver。

计算机竞赛 python opencv 深度学习 指纹识别算法实现

1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; python opencv 深度学习 指纹识别算法实现 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;4分创新点&#xff1a;4分 该项目较为新颖…

SSL证书过期巡检脚本

Shell版 demo.txt [rootbogon aihuidi]# cat demo.txt www.aihuidi.com:111.222.333.444 xxx.xxx.com:ip,ip脚本&#xff1a; [rootlocalhost aihuidi]# vim check_ssl.sh #!/bin/bash for line in $(cat demo.txt) dodomain$(echo ${line} | awk -F : {print $1})ip_pool$(…

1AE4 的魔改混合放大电路

先上电路图&#xff1a; 最新的1AE4的电路&#xff0c;目标依旧是极致的音效。 因此&#xff0c;为了将1AE4的潜力榨干&#xff0c;采用了一些完全不同的思路&#xff1a; 1&#xff09;原有的屏极接地&#xff0c;因为是一个壳子&#xff0c;所以能起到很好的屏蔽作用&#…

vue 使用indexDB 简单完整逻辑

1 npm npm install idb 2 代码 <template><div><p>Data: {{ data }}</p><button click"fetchData">Fetch Data</button></div> </template><script> import { openDB } from idb;export default {data() {…

❤ 全面解析若依框架vue2版本(springboot-vue前后分离--前端部分)

❤ 解析若依框架之前台修改 1、修改页面标题和logo 修改网页上的logo ruoyi-ui --> public --> favicon.ico&#xff0c;把这个图片换成你自己的logo 修改网页标题 根目录下的vue.config.js const name process.env.VUE_APP_TITLE || ‘若依管理系统’ // 网页标题 换成…

LVS负载均衡DR(直接路由)模式

在LVS&#xff08;Linux Virtual Server&#xff09;负载均衡中的DR&#xff08;Direct Routing&#xff09;模式下&#xff0c;数据包的流向如下&#xff1a; 客户端发送请求到负载均衡器&#xff08;LVS&#xff09;的虚拟IP&#xff08;VIP&#xff09;。负载均衡器&#x…

C++入门篇9---list

list是带头双向循环链表 一、list的相关接口及其功能 1. 构造函数 函数声明功能说明list(size_type n,const value_type& valvalue_type())构造的list中包含n个值为val的元素list()构造空的listlist(const list& x)拷贝构造list(InputIterator first, InputIterator…

【Apollo】Apollo版本变迁里程碑

特点与改进 概述里程碑6.0版本特点及改进7.0版本特点及改进8.0版本特点及改进代码差异 主页传送门&#xff1a;&#x1f4c0; 传送 概述 Apollo (阿波罗)是一个开放的、完整的、安全的平台&#xff0c;将帮助汽车行业及自动驾驶领域的合作伙伴结合车辆和硬件系统&#xff0c;快…

IntellIJ Idea 连接数据库-MySql

前言&#xff1a;可以用mariaDB工具&#xff0c;在本地创建服务器主机和数据库&#xff0c;而后用intellIJ Idea尝试连接 MariaDB创建数据库练习 1.IntellIJ Idea打开界面右侧Database工具&#xff0c;选择MySQL数据库。 2.填写数据库账号密码&#xff0c;地址端口号&#xff…

判断平面中两射线是否相交的高效方法

1. 简介 最近在工作中遇到判断平面内两射线是否相交的问题。 对于这个问题的解决,常规的方法是将两条射线拓展为直线,计算直线的交点,而后判断交点是否在射线上。 这种方法,在思路上较为直观,也易于理解。然后,该方法在计算量上相对较大。对于少量射线间的交点计算尚可…