uniapp 消息推送

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了uniapp 消息推送相关的知识,希望对你有一定的参考价值。

参考技术A UniPush使用指南 https://ask.dcloud.net.cn/article/35716
一、先创建一个应用
https://dev.dcloud.net.cn/app/index?type=0

到这一步推送就完成了(此时安卓离线推送还没实现,但ios可以离线推送了)
会发现app在线时推送安卓手机消息栏会展示收到的推送通知,但IOS消息栏却不展示,这里就是一个坑!!!

如果是IOS就需要创建一个消息通知展示在通知栏上
在app.vue中

服务端开发请参考 UniPush使用指南中的 Rest-V2厂商推送示例
到这里安卓离线推送还没有实现,需要去设置各个厂商通道就可以实现啦

uniapp添加极光推送

1.从dcloud插件市场下载极光SDK插件 (可以云打包,也可以离线打包)

 极光JCore官方SDK下载地址

https://ext.dcloud.net.cn/plugin?id=4028https://ext.dcloud.net.cn/plugin?id=4028

极光JPush官方SDK下载地址

极光JPush官方SDK - DCloud 插件市场极光JPush官方SDK HBuilder插件版本https://ext.dcloud.net.cn/plugin?id=4035

下载SDK插件 

云打包:从插件市场点击for打云包,

离线打包:点击离线打包,将SDK下载到本地,在根目录中新建【nativeplugins】文件夹,将下载的文件放在里面

 2.在项目中红配置mainifest.json

(1)本地插件,点击mainifest.json中的【APP原生插件配置】,选择本地插件,点击确定按钮导入,在mainifest.json的源码视图中配置应用包名和AppKey

添加本地插件

 配置JG-JPUSH,设置Android和ios的应用包名

android_package_name:"包名" 

ios_bundle_id:"包名"

配置JG-JCore ,设置Android和ios的应用包名和极光官网信息的AppKey

android_package_name:"包名"

ios_bundle_id:"包名"

JPUSH_APPKEY_ANDROID:"AppKey"

(2)云端插件配置

点击mainifest.json中的【APP原生插件配置】,选择云端插件,点击确定按钮导入,在mainifest.json的源码视图中配置应用包名和AppKey(跟上述一致)

3.页面代码

 在App.vue中添加以下代码

<script>
const jpushModule = uni.requireNativePlugin('JG-JPush')
	export default 
		onLaunch: function() 
			console.log('App Launch')
			if (uni.getSystemInfoSync().platform == "ios") 
				// 请求定位权限
				let locationServicesEnabled = jpushModule.locationServicesEnabled()
				let locationAuthorizationStatus = jpushModule.getLocationAuthorizationStatus()
				console.log('locationAuthorizationStatus', locationAuthorizationStatus)
				if (locationServicesEnabled == true && locationAuthorizationStatus < 3) 
					jpushModule.requestLocationAuthorization((result) => 
						console.log('定位权限', result.status)
					)
				
				jpushModule.requestNotificationAuthorization((result) => 
					let status = result.status
					if (status < 2) 
						uni.showToast(
							icon: 'none',
							title: '您还没有打开通知权限',
							duration: 3000
						)
					
				)
			

			jpushModule.initJPushService();
			jpushModule.setLoggerEnable(true);
			jpushModule.addConnectEventListener(result => 
				console.log(result)
				let connectEnable = result.connectEnable
				uni.$emit('connectStatusChange', connectEnable)
			);


			jpushModule.addNotificationListener(result => 
				console.log(result)
				if (result.notificationEventType == "notificationOpened") 
				  //点击窗口通知栏推送的消息 跳转指定页面
					uni.navigateTo(
						url: '/pages/home/warningCenter/warningCenter',
						complete(res) 
							console.log(res);
						
					)
				

			);

			jpushModule.addCustomMessageListener(result => 
				let type = result.type
				let messageType = result.messageType
				let content = result.content
				uni.showToast(
					icon: 'none',
					title: JSON.stringify(result),
					duration: 3000
				)
			)

			jpushModule.addLocalNotificationListener(result => 
				let messageID = result.messageID
				let title = result.title
				let content = result.content
				let extras = result.extras
				uni.showToast(
					icon: 'none',
					title: JSON.stringify(result),
					duration: 3000
				)
			)

			jpushModule.addGeofenceListener(result => 
				let code = result.code
				let type = result.type
				let geofenceId = result.geofenceId
				let userInfo = result.userInfo
				uni.showToast(
					icon: 'none',
					title: '触发地理围栏',
					duration: 3000
				)
			)

			jpushModule.setIsAllowedInMessagePop(true)
			jpushModule.pullInMessage(result => 
				let code = result.code
				console.log(code)
			)

			jpushModule.addInMessageListener(result => 
				let eventType = result.eventType
				let messageType = result.messageType
				let content = result.content
				console.log('inMessageListener', eventType, messageType, content)

				uni.showToast(
					icon: 'none',
					title: JSON.stringify(result),
					duration: 3000
				)
			)
		,
		onShow: function() 
			console.log('App Show')
		,
		onHide: function() 
			console.log('App Hide')
		
	
</script>

登录页代码

<script>
	const jpushModule = uni.requireNativePlugin('JG-JPush')
	export default 
		data() 
			return 
				//极光推送
				connectStatus: '未连接',
				registrationID: '未获得',
			
		,
		methods: 
			//点击登录按钮
			login() 
              //登录成功后
                 //设置别名
				jpushModule.setAlias(
						'alias': this.phone,
						'sequence': 1
						)
			,
			connect() 
				uni.$on('connectStatusChange', (connectStatus) => 
					console.log('进入连接')
					var connectStr = ''
					if (connectStatus == true) 
						connectStr = '已连接'
						this.getRegistrationID()
					 else 
						connectStr = '未连接'
					
					console.log('监听到了连接状态变化 --- ', connectStr)
					this.connectStatus = connectStr
				)
			,
			//获取推送ID
			getRegistrationID() 
				jpushModule.getRegistrationID(result => 
					let registerID = result.registerID
					console.log(result)
					this.registrationID = registerID
				)
			
		,
		onLoad() 
			this.connect()
		
	
</script>

以上是关于uniapp 消息推送的主要内容,如果未能解决你的问题,请参考以下文章

uniapp中unipush推送的使用

unipush 小米厂商推送不好用?

Uniapp的消息推送Unipush(在线离线服务端)

uniapp如何提交代码推送

uni-app 使用微信小程序消息推送

uniapp个推服务端推送,离线收不到,检测步骤,服务端PHP