• 0
  • 0

检测是否开启推送权限,兼容安卓、IOS,可指引前往开启

2020-04-10 907 0 admin 所属分类:Hbuilder

插件市场封装了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

JS库地址

返回顶部