插件市场封装了APP调用操作,检测各种权限是否开启。
IOS 提供了 推送权限检测,但是 安卓端没有提供推送权限检测
往 permission.js 中新增两个方法,并裸露给外层调用
// 检测是否有开启 推送 权限
function checkPushEnable() {
var sys = plus.os.name.toLowerCase();
if (sys == 'android') {
// 安卓的的通知并不是权限范畴(所以你根本找不到),而是类似于服务的性质,因此无法像其他权限一样可以直接产生权限请求提示框,需要自己写
var main = plus.android.runtimeMainActivity();
var NotificationManagerCompat = plus.android.importClass("android.support.v4.app.NotificationManagerCompat");
// true 已开启,false 未开启
var areNotificationsEnabled = NotificationManagerCompat.from(main).areNotificationsEnabled();
return areNotificationsEnabled;
} else if (sys == 'ios') {
var result = judgeIosPermission('push');
console.log(result);
// 1 已获取授权 0 未获取授权 -1 被永久拒绝授权
return result > 0 ? true : false;
} else {
//未知类型 无法判断 不做处理
return true;
}
}
//指引前往开启推送
function openPushSetting() {
var sys = plus.os.name.toLowerCase();
if (sys == 'android') {
// gotoAppPermissionSetting
// 如果还想考虑安卓版本,那么就自己重写插件的gotoAppPermissionSetting()方法
var main = plus.android.runtimeMainActivity();
var pkName = main.getPackageName();
var uid = main.getApplicationInfo().plusGetAttribute("uid");
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 {
//(<21)其他--跳转到该应用管理的详情页
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
var uri = Uri.fromParts("package", mainActivity.getPackageName(), null);
intent.setData(uri);
}
// 跳转到该应用的系统通知设置页
main.startActivity(intent);
} else if (sys == 'ios') {
gotoAppPermissionSetting();
} else {
//未知类型 无法判断 不做处理
return false;
}
}
module.exports = {
judgeIosPermission: judgeIosPermission,
requestAndroidPermission: requestAndroidPermission,
checkSystemEnableLocation: checkSystemEnableLocation,
gotoAppPermissionSetting: gotoAppPermissionSetting,
//新增两个裸露接口
checkPushEnable: checkPushEnable,
openPushSetting: openPushSetting
}
同时添加UI组件,当检测到没有开启推送权限时,显示界面予以提示
组件地址:横条通知提示组件
将下载好的JS库放入js_sdk目录后 在 APP环境中引入
// #ifdef APP-PLUS
import permision from "@/js_sdk/wa-permission/permission.js"
// #endif
在 onShow开头做检测
// #ifdef APP-PLUS
if (!permision.checkPushEnable()) {
console.log('没有推送权限');
if (!this.hasInitCheck) {
// 避免在应用激活期间反复显示
this.hasInitCheck = true;
this.$refs.jyAlertPush.setStatus(true);
}
} else {
this.$refs.jyAlertPush.setStatus(false);
}
// #endif