如何在 uni-app 中检测 APP 端是否有通知权限

参考链接:

https://uniapp.dcloud.net.cn/api/system/getappauthorizesetting.html

https://uniapp.dcloud.net.cn/api/system/openappauthorizesetting.html

检测是否有推送权限

废话不多说,先上结论

// #ifdef APP-PLUS || MP-WEIXIN
/**
 * 判断 App 推送权限是否开启
 */
function judgeAppPermissionPush(): boolean {
    const notificationAuthorized = uni.getAppAuthorizeSetting().notificationAuthorized
    return notificationAuthorized === 'authorized'
}
// #endif

是的,就是这么简单,uni-app 官方已经帮我们封装好了。

值得注意的是,该 API 仅支持在 App 和微信小程序端使用,需要做好条件编译

image-20230815211225739

跳转系统授权管理页

如果没有得到授权的话,一般需要引导用户进行授权,此时需要跳转到系统授权的管理页。

参考代码如下:

// #ifdef APP-PLUS || MP-WEIXIN
// 跳转到应用的权限页面
function gotoAppPermissionSetting() {
    uni.openAppAuthorizeSetting()
}
// #endif

和上一个 API 一样,都需要做好条件编译的兼容。

其他实现方式

最后再补充一下非官方的实现方式

判断 Android 推送权限是否开启

/**
 * 判断 Android 推送权限是否开启
 */
function judgeAndroidPermissionPush(): boolean {
    const main = plus.android.runtimeMainActivity() as any
    let NotificationManagerCompat = plus.android.importClass('android.support.v4.app.NotificationManagerCompat') as any
    if (NotificationManagerCompat === null) { // 解决 Android 高版本没有 NotificationManagerCompat 的问题
        NotificationManagerCompat = plus.android.importClass('androidx.core.app.NotificationManagerCompat')
    }
    const manager = NotificationManagerCompat.from(main)
    const areNotificationsEnabled = plus.android.invoke(manager, 'areNotificationsEnabled') as boolean
    return areNotificationsEnabled
}

Android 跳转到应用的权限页面

// Android 跳转到应用的权限页面
function gotoAndroidAppPermissionSetting() {
    const Intent = plus.android.importClass('android.content.Intent') as any
    const Settings = plus.android.importClass('android.provider.Settings') as any
    const Uri = plus.android.importClass('android.net.Uri') as any
    const mainActivity = plus.android.runtimeMainActivity() as any
    const intent = new Intent()
    intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
    const uri = Uri.fromParts('package', mainActivity.getPackageName(), null)
    intent.setData(uri)
    mainActivity.startActivity(intent)
}

iOS 版

iOS 版的实现由于没有设备进行试验,所以代码就不放出来了,可参考官方插件的实现。

但是由于官方插件年久失修,目前的可用性不高,请下载源码后自行调试一遍!!!

总结

本文介绍了 uni-app 官方提供的两个 API:uni.getAppAuthorizeSetting()uni.openAppAuthorizeSetting(),它们可以分别用于检测和跳转到 APP 端的通知权限设置页面。

还提供了非官方的实现方式,主要针对 Android 平台,使用了 plus.android 模块和 Java 类库来实现相同的功能。

注意代码需要做好条件编译,因为这两个 API 只支持在 APP 和微信小程序端使用。

【总结由 New Bing 生成】


评论

发表回复