基於unipush實現直播開播提醒功能


1、unipush的使用以及注意事項

https://www.cnblogs.com/huihuihero/p/13711909.html

2、獲取手機標識(主要是clientid),后端會需要用到的

詳細可見 https://ask.dcloud.net.cn/article/34



在App.vue里添加以下代碼
onLaunch(){
	// #ifdef APP-PLUS  

	this.getPhoneSign()

	// #endif
}


methods:{
	//獲取手機標識
	getPhoneSign(){
		plus.push.getClientInfoAsync(
			res => {  //獲取成功
				uni.setStorageSync('phonecid',res.clientid)
			},
			err => {  //獲取失敗
			      	
			}
		)
	},
}

3、開播提醒功能說明

用戶點擊直播間“開播提醒”按鈕,作如下判斷

1、判斷用戶是否登錄,未登錄則引導用戶去登錄

2、判斷用戶手機是否開啟通知權限,若沒有則引導其開啟,若已開啟則請求接口設置開播提醒

4、功能實現

1、引入此插件 https://ext.dcloud.net.cn/plugin?id=594

在main.js里引入
import permission from '@/js_sdk/wa-permission/permission.js'
Vue.prototype.$perJudge=permission

2、修改permission.js,添加以下代碼(添加判斷安卓通知權限的函數以及暴露此函數)

//判斷android通知權限是否開啟
function judgeAndroidPermissionPush(){
	var result = false;
	var main = plus.android.runtimeMainActivity();
	var pkName = main.getPackageName();
	var uid = main.getApplicationInfo().plusGetAttribute("uid");
	var NotificationManagerCompat = plus.android.importClass("android.support.v4.app.NotificationManagerCompat");
	var areNotificationsEnabled = NotificationManagerCompat.from(main).areNotificationsEnabled();  
	if (!areNotificationsEnabled) {  //未開啟通知權限
		result = false
		uni.showModal({  //進一步處理,提示並引導用戶去設置中心開啟通知權限
			title: '提示',  
			content: '您尚未開啟通知權限,我們無法及時提醒到您,是否前往開啟',   
			success: function (res) {  
				if (res.confirm) {  
					var Intent = plus.android.importClass('android.content.Intent');
					var Build = plus.android.importClass("android.os.Build");
	
					//判斷當前安卓系統
					if (Build.VERSION.SDK_INT >= 26) {  //android 8.0+  
						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 {  //其他android版本
						var Settings = plus.android.importClass("android.provider.Settings");
						var Uri = plus.android.importClass("android.net.Uri");
						var intent = new Intent();
						intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
						var uri = Uri.fromParts("package", main.getPackageName(), null);
						intent.setData(uri);
					}
					
					// 跳轉到該應用的系統通知設置頁  
					main.startActivity(intent); 
				}  
			}
		});
	}else{  //已開啟通知權限
		result = true
	}
	return result  //返回狀態:false為未開啟,true為開啟,反饋給調用此函數的頁面
}



module.exports = {
	judgeIosPermission: judgeIosPermission,
	requestAndroidPermission: requestAndroidPermission,
	checkSystemEnableLocation: checkSystemEnableLocation,
	gotoAppPermissionSetting: gotoAppPermissionSetting,
	judgeAndroidPermissionPush: judgeAndroidPermissionPush   //添加此行代碼,將判斷安卓通知權限是否開啟的函數暴露
}

3、在直播間頁面調用

//點擊“開播提醒”按鈕事件,先檢查相關信息:如是否登錄,是否開啟通知權限
checkStartremind(){
	if(this.userToken){  //是否登錄
		if(this.$platform=='ios'){  //iOS端
			let res=this.$perJudge.judgeIosPermission('push')  //判斷用戶是否開通了推送權限
			if(res){  //權限開啟了
				this.setStartRemind()  //設置開播提醒
			}else{  //權限未開啟
				//iOS判斷未開啟通知權限時,封裝函數中未做相關處理,所以這里做一下處理,引導用戶去開啟
				uni.showModal({
					title: '提示',
					content: "您尚未開啟通知權限,我們無法及時提醒到您,是否前往開啟",
					success: res => {
						if (res.confirm) {
							this.$perJudge.gotoAppPermissionSetting()
						}
					}
				});
			}
		}else{  //Android端
			let res=this.$perJudge.judgeAndroidPermissionPush()
			if(res){  //權限開啟了
				this.setStartRemind()
			}else{  //權限未開啟
				//安卓判斷未開啟通知權限時,已直接在封裝函數中引導用戶去開啟了,所以這里無需做處理
			}
		}
	}else{
		this.loginPopRemind="登錄后即可設置開播提醒,是否登錄?"
		this.$refs.noLoginPopup.open()
	}
},



//設置開播提醒
setStartRemind(){
	let cid=""
	if(uni.getStorageSync('phonecid')){
		cid=uni.getStorageSync('phonecid')
	}else{
		let prif=plus.push.getClientInfo()
		cid=prif.clientid
		uni.setStorageSync('phonecid',cid)
	}
				
	let params={
		lid:this.lid,
		cid: cid
	}
								
	uni.request({
		url: `${this.$baseUrl}/api-user/addUserLivePush`,
		method: 'POST',
		data: params,
		header: {
			"Content-Type":"application/x-www-form-urlencoded"
		},
		success: res => {
			if(res.data.code==200){
				uni.showToast({title: '訂閱成功,我們將在開播時通知您觀看',icon:'none',duration:2500})
			}else if(res.data.code==500){
				uni.showToast({title: '您已訂閱,我們將在開播時通知您觀看',icon:'none',duration:2500})
			}else{
				uni.showToast({title: res.data.msg,icon:'none'})
			}
		},
		fail: () => {
			uni.showToast({title: '服務器開小差了呢,請您稍后再試',icon:'none'})
		}
	});
},


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM