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'})
}
});
},