UniApp集成极光推送详细教程

news2025/4/26 3:42:21

        最近项目要集成推送服务,选型极光推送,记录一下开发过程。

1、极光官网注册登录

        1.1选择极光推送产品,新建应用

        1.2在下一步中选择Android/IOS的消息推送服务

        1.3产品设置中输入应用包名(一经输入后不可更改,一定要正确输入包名),选择想要集成的厂商推送通道,按照后续流程完成注册。

*注:包名要和hbuilder中打包的包名一致

        1.4配置好后就好AppKey、Master Secret,后续要用到。也可以在推送设置——集成设置中查看

2、在uniapp官方插件市场下载极光插件

        极光推送 JPush 官方 SDK

        极光推送 JCore 官方 SDK

        流程参考如下,选择对应的应用,输入Android 包名和iOS 包名

3、Hbuilder项目中集成使用

        3.1打开项目,在mainfest.json中选择安卓/IOS原生插件配置——选择云端插件,选择刚才下载的2个插件

        3.2极光JCore配置如下,输入在极光平台申请的appkey

        3.3JPush配置如下,首先需要去各个厂商通道申请应用,拿到应用的必要信息,例如小米就要去小米的开发者平台去注册申请,可以参考极光官方文档或者自行申请。红框处的参数配置一定要注意,按照示例格式填写参数前缀,否则推送不成功。

4、页面植入极光代码,这里我没有集成全部功能,只做了极光设备别名(Alias)推送和角标的处理,想要集成其他功能请移步官方文档自行查询。

        4.1项目根目录下App.vue文件中引入极光服务

<script>

	// 极光推送  
	// #ifdef APP-PLUS
	const jpushModule = uni.requireNativePlugin('JG-JPush');
	// 推送插件
	const badge_module = uni.requireNativePlugin('Laowu-BadgeModule');
	//#endif
	export default {
		
		onLaunch() {
			
			// #ifdef APP-PLUS
			// 极光推送初始化
			jpushModule.initJPushService();
			//监听通知事件消息
			jpushModule.addConnectEventListener(result=>{
				let connectEnable = result.connectEnable
			})
			jpushModule.addNotificationListener(result=>{
				let notificationEventType = result.notificationEventType
				let messageID = result.messageID
				let title = result.title
				let content = result.content  
				let extras = result.extras
				if(notificationEventType=='notificationOpened'){
					if(extras.MSGID){
						uni.navigateTo({
							url: '/pages/noticeDetail?id='+extras.MSGID
						})
					}
				}  
			})
			this.getNotificationEnabled();
			// #endif
		},
		onShow: function() {
      
		},
		onHide: function() {
		},
		methods: {
			// 处理通知权限
			getNotificationEnabled() {
				if (uni.getSystemInfoSync().platform == 'ios') {
					jpushModule.requestNotificationAuthorization((result) => {
						let status = result.status;
						if (status < 2) {
							this.noticMsgTool();
						}
					});
				} else {
					jpushModule.isNotificationEnabled((result) => {
						// console.log('判断android是否打开权限1:true,0:false', result);
						if (result.code == 0) {
							//如果为0则表示 未打开通知权限
							this.noticMsgTool();
						}
					});
				}
			},
			noticMsgTool() {
				if (uni.getSystemInfoSync().platform == 'ios') {
					//苹果打开对应的通知栏
					uni.showModal({
						title: '通知权限开启提醒',
						content: '您还没有开启通知权限,无法接受到消息通知,请前往设置!',
						showCancel: false,
						confirmText: '去设置',
						success: function(res) {
							if (res.confirm) {
								var app = plus.ios.invoke('UIApplication', 'sharedApplication');
								var setting = plus.ios.invoke('NSURL', 'URLWithString:', 'app-settings:');
								plus.ios.invoke(app, 'openURL:', setting);
								plus.ios.deleteObject(setting);
								plus.ios.deleteObject(app);
							}
						}
					});
				} else {
					//android打开对应的通知栏
					var main = plus.android.runtimeMainActivity();
					var pkName = main.getPackageName();
					var uid = main.getApplicationInfo().plusGetAttribute('uid');
					uni.showModal({
						title: '通知权限开启提醒',
						content: '您还没有开启通知权限,无法接受到消息通知,请前往设置!',
						showCancel: false,
						confirmText: '去设置',
						success: function(res) {
							if (res.confirm) {
								var Intent = plus.android.importClass('android.content.Intent');
								var Build = plus.android.importClass('android.os.Build');
								//android 8.0引导
								if (Build.VERSION.SDK_INT >= 26) {
									var intent = new Intent('android.settings.APP_NOTIFICATION_SETTINGS');
									intent.putExtra('android.provider.extra.APP_PACKAGE', pkName);
								} else if (Build.VERSION.SDK_INT >= 21) {
									//android 5.0-7.0
									var intent = new Intent('android.settings.APP_NOTIFICATION_SETTINGS');
									intent.putExtra('app_package', pkName);
									intent.putExtra('app_uid', uid);
								} else {
									//(<21)其他--跳转到该应用管理的详情页
									intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
									var uri = Uri.fromParts('package', mainActivity.getPackageName(), null);
									intent.setData(uri);
								}
								// 跳转到该应用的系统通知设置页
								main.startActivity(intent);
							}
						}
					});
				}
			}
		},

	}
</script>

        4.2在登录页中注册极光ID,也可以写在4.1中,看自己的业务需求

// 获取极光推送ID 并绑定到登录用户,usetInfo是自己系统的登录用户信息
			getRegistrationID(usetInfo) {
				if (!jpushModule || !jpushModule.getRegistrationID) {
					return
				}
				try {
					jpushModule.getRegistrationID((result) => {
						if (usetInfo.RId !== result.registerID) {
							jpushModule.setAlias({
								alias: usetInfo.Id.split('-').join(''),
								sequence: 1
							})
							BindJiGuang({
								UserId: usetInfo.Id,
								RId: result.registerID
							}).then((res) => {
								uni.setStorageSync('registerID', result.registerID); //缓存账户
							})
						}
					});
				} catch (err) {
				}
			},

        4.3在用户登出的时候处理推送别名信息(*注:根据自己业务需要选择要不要删除极光推送

// #ifdef APP-PLUS
					// 删除极光推送别名信息
					const registerID = uni.getStorageSync('registerID')
					if (registerID) {
						jpushModule.deleteAlias({
							sequence: 1
						})
						LogoutBindJiGuang({
							RId: registerID,
							UserId: UserInfo.Id
						})
						uni.removeStorage({
							key: "registerID"
						});
					}
					// #endif

5、打包自定义基座调试

        5.1hbulider工具中选择菜单:“发行——App-Android/IOS-云打包”,选择打自定义调试基座、传统打包

        5.2打包自定义基座成功后,选择菜单“运行——运行到手机或模拟器——运行基座选择——自定义调试基座”后再次运行项目,即可通过自定义调试基座查看日志。

6、苹果推送注意事项:

        6.1在苹果开发者上要注册一个推送的证书,如下图,创建时选择如图2

        6.2在Devices中添加你的测试设备(自定义调试基座调试用),重新生成.p12证书和描述文件。详细操作请参考:uniapp 发布苹果IOS详细流程,包括苹果开发者公司账号申请、IOS证书、.p12证书文件等

        6.3、在极光推送中配置苹果推送鉴权方式和证书,具体流程如下:

        登陆极光推送管理后台——推送设置——集成设置——IOS,选择鉴权方式:iOS证书配置,填写包名并上传.p12证书

7、推送测试

        7.1 登陆极光推送管理后台——推送管理——创建推送——通知消息,

效果如下:

        7.2在极光推送管理后台——推送管理——推送历史——推送记录中查看成功率

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI战略群与星际之门:软银AI投资版图计划深度解析

一、星际之门:万亿美元级 AI 基础设施革命 1.1 项目背景与战略定位 在 AI 技术迅猛发展的今天,算力已成为推动其前进的核心动力。软银联合 OpenAI、甲骨文、英伟达、微软、arm推出的 “星际之门”(Stargate)计划,无疑是 AI 领域的一颗重磅炸弹。作为 AI 领域史上最大单笔…

系统思考与时间管理

时间管理的真正秘诀&#xff1a;主动浪费时间&#xff1f; 巴菲特的私人飞机驾驶员觉得自己不够成功&#xff0c;于是向巴菲特请教应该怎么做。巴菲特让他列出了自己人生中最想实现的25个目标&#xff0c;并按重要程度排序&#xff0c;接着安排时间专注做前五件最重要的事情。…

mac air m系列arm架构芯片安装虚拟机 UTM+debian 浏览器firefox和chrome

成果展示&#xff1a;debian虚拟机&#xff0c;你值得拥有&#xff01; 预期结果 1、mac的m系列芯片&#xff0c;arm 架构且内存小&#xff0c;安装虚拟机。 考虑到mac m系列芯片8g内存&#xff0c;arm架构想安装一个轻量的虚拟机&#xff0c;偶然之间发现了debian&#xff0c…

Keepalived+LVS+nginx高可用架构

注明&#xff1a;所有软件已经下载好&#xff0c;防火墙和SELinux已经全部关闭 一.搭建NFS 1.服务端 1.创建文件 [rootnfs ~]# mkdir -p /nfs/data 2、修改权限 [rootnfs ~]# chmod orw /nfs/data 3、写配置文件 [rootnfs ~]# cat /etc/exports /nfs/data 192.168.111.118(r…

【力扣hot100题】(034)LRU缓存

做完这题已经没有任何力气写链表题了。 思路很简单&#xff0c;就是调试特别的痛苦。 老是频频报错&#xff0c;唉。 class LRUCache { public:struct ListNode{int key,val;ListNode* next; ListNode* prev;ListNode() : key(0), val(0), next(nullptr), prev(nullptr) {}L…

【redis】缓存 更新策略(定期、实时生存),缓存预热、穿透、雪崩、击穿详解

什么是缓存 redis 最常用的场景 核心思路就是把一些常用的数据&#xff0c;放到触手可及&#xff08;访问速度更快&#xff09;的地方 ⽐如我需要去⾼铁站坐⾼铁. 我们知道坐⾼铁是需要反复刷⾝份证的 (进⼊⾼铁站, 检票, 上⻋,乘⻋过程中, 出站…)正常来说, 我的⾝份证是放在…

使用STM32CubeMX和Keil在STM32上创建并运行一个简单的FreeRTOS多任务程序

目标 利用FreeRTOS运行两个任务&#xff0c;分别为点灯和OLED屏的显示。 利用STM32CubeMX生成Keil工程和相关初始化代码 知识回顾 之前已经利用STM32CubeMX生成过Keil工程和相关初始化代码了&#xff0c;可以去回顾一下&#xff0c;详情见&#xff1a;https://blog.csdn.ne…

从查重报告入手的精准论文降重秘籍

每个同学在使用论文查重时&#xff0c;为何同一篇文章&#xff0c;可能重复率从10%—30%不等&#xff1f;归根结底还是使用了不同查重系统。其实不同的论文查重与论文AIGC检测系统的算法、数据及模型都不一样&#xff0c;那如何针对这些系统的“个性”精准降重&#xff0c;这篇…

Uubuntu20.04复现SA-ConvONet步骤

项目地址&#xff1a; tangjiapeng/SA-ConvONet: ICCV2021 Oral SA-ConvONet: Sign-Agnostic Optimization of Convolutional Occupancy Networks 安装步骤&#xff1a; 一、系统更新 检查系统是否已经更新到最新版本&#xff1a; sudo apt-get update sudo apt-get upgra…

【Linux网络#18】:深入理解select多路转接:传统I/O复用的基石

&#x1f4c3;个人主页&#xff1a;island1314 &#x1f525;个人专栏&#xff1a;Linux—登神长阶 目录 一、前言&#xff1a;&#x1f525; I/O 多路转接 为什么需要I/O多路转接&#xff1f; 二、I/O 多路转接之 select 1. 初识 select2. select 函数原型2.1 关于 fd_set 结…

华院计算3项应用成果入选钢铁行业智能制造解决方案推荐目录(2024年)

近日&#xff0c;中国钢铁工业协会发布《钢铁行业智能制造解决方案推荐目录&#xff08;2024年&#xff09;》。由中国钢铁工业协会、钢铁行业智能制造联盟共同开展了2024年钢铁行业智能制造解决方案及数字化转型典型场景应用案例遴选、智能制造创新大赛&#xff08;钢铁行业赛…

python使用cookie、session、selenium实现网站登录(爬取信息)

一、使用cookie 这段代码演示了如何使用Python的urllib和http.cookiejar模块来实现网站的模拟登录&#xff0c;并在登录后访问需要认证的页面。 # 导入必要的库 import requests from urllib import request, parse# 1. 导入http.cookiejar模块中的CookieJar类&#xff0c;用…

vector模拟实现2

文章目录 vector的模拟实现erase函数resize拷贝构造赋值重载函数模版构造及其细节结语 我们今天又见面啦&#xff0c;给生活加点impetus&#xff01;&#xff01;开启今天的编程之路 今天我们来完善vector剩余的内容&#xff0c;以及再探迭代器失效&#xff01; 作者&#xff…

详解相机的内参和外参,以及内外参的标定方法

1 四个坐标系 要想深入搞清楚相机的内参和外参含义&#xff0c; 首先得清楚以下4个坐标系的定义&#xff1a; 世界坐标系&#xff1a; 名字看着很唬人&#xff0c; 其实没什么大不了的&#xff0c; 这个就是你自己定义的某一个坐标系。 比如&#xff0c; 你把房间的某一个点定…

在线sql 转 rust 模型(Diesel、SeaORM),支持多数据 mysql, pg等

SQL 转 Rust 在 Rust 语言中&#xff0c;常用 Diesel 和 SeaORM 进行数据库操作。手写 ORM 模型繁琐&#xff0c;gotool.top 提供 SQL 转 Diesel、SeaORM 工具&#xff0c;自动生成 Rust 代码&#xff0c;提高开发效率。 特色 支持 Diesel / SeaORM&#xff0c;生成符合规范…

高并发内存池(二):Central Cache的实现

前言&#xff1a;本文将要讲解的高并发内存池&#xff0c;它的原型是Google的⼀个开源项⽬tcmalloc&#xff0c;全称Thread-Caching Malloc&#xff0c;近一个月我将以学习为目的来模拟实现一个精简版的高并发内存池&#xff0c;并对核心技术分块进行精细剖析&#xff0c;分享在…

[Windows] VutronMusic v1.6.0 音乐播放器纯净版,可登录同步

VutronMusic-简易好看的PC音乐播放器 链接&#xff1a;https://pan.xunlei.com/s/VOMq7P_fTyhLUXeGerDVhrCTA1?pwduvut# VutronMusic v1.6.0 音乐播放器纯净版&#xff0c;可登录同步

macvlan 和 ipvlan 实现原理及设计案例详解

一、macvlan 实现原理 1. 核心概念 macvlan 允许在单个物理网络接口上创建多个虚拟网络接口&#xff0c;每个虚拟接口拥有 独立的 MAC 地址 和 IP 地址。工作模式&#xff1a; bridge 模式&#xff08;默认&#xff09;&#xff1a;虚拟接口之间可直接通信&#xff0c;类似交…

【蓝桥杯】每日练习 Day19,20

目录 前言 蒙德里安的梦想 分析 最短Hamilton路径 分析 代码 乌龟棋 分析 代码 松散子序列 分析 代码 代码 前言 今天不讲数论&#xff08;因为上课学数论真是太难了&#xff0c;只学了高斯消元&#xff09;所以今天就不单独拿出来讲高斯消元了。今天讲一下昨天和…

《AI大模型应知应会100篇》第7篇:Prompt Engineering基础:如何与大模型有效沟通

第7篇&#xff1a;Prompt Engineering基础&#xff1a;如何与大模型有效沟通 摘要 Prompt Engineering&#xff08;提示工程&#xff09;是与大模型高效沟通的关键技能。通过精心设计的Prompt&#xff0c;可以让模型生成更准确、更有用的结果。本文将从基础知识到高级策略&…