UniApp集成极光推送详细教程

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

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文件中引入极光服务

javascript 复制代码
<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中,看自己的业务需求

javascript 复制代码
// 获取极光推送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在用户登出的时候处理推送别名信息(*注:根据自己业务需要选择要不要删除极光推送)

javascript 复制代码
// #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在极光推送管理后台------推送管理------推送历史------推送记录中查看成功率

相关推荐
ModestCoder_37 分钟前
将一个新的机器人模型导入最新版isaacLab进行训练(以unitree H1_2为例)
android·java·机器人
robin_suli1 小时前
Spring事务的传播机制
android·java·spring
鸿蒙布道师2 小时前
鸿蒙NEXT开发对象工具类(TS)
android·ios·华为·harmonyos·arkts·鸿蒙系统·huawei
Harrison_zhu3 小时前
Ubuntu18.04 编译 Android7.1代码报错
android
刘小哈哈哈3 小时前
封装了一个iOS多分区自适应宽度layout
macos·ios·cocoa
web_Hsir4 小时前
uniapp 微信小程序 使用ucharts
微信小程序·小程序·uni-app
web_Hsir4 小时前
Uniapp 实现微信小程序滑动面板功能详解
vue.js·微信小程序·uni-app
CYRUS STUDIO5 小时前
Unidbg Trace 反 OLLVM 控制流平坦化(fla)
android·汇编·算法·网络安全·逆向·ollvm
扫地的小何尚6 小时前
NVIDIA工业设施数字孪生中的机器人模拟
android·java·c++·链表·语言模型·机器人·gpu
fakaifa6 小时前
beikeshop多商户跨境电商独立站最新版v1.6.0版本源码
前端·小程序·uni-app·php·beikeshop多商户·beikeshop跨境电商