RSS Impact 是一个支持 Hook 的 RSS 订阅工具,
支持推送通知、Webhook 、下载、BitTorrent、AI 大模型 等多种形式的 Hook。

0%

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

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

参考链接:

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

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

检测是否有推送权限

废话不多说,先上结论

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

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

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

image-20230815211225739

跳转系统授权管理页

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

参考代码如下:

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

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

其他实现方式

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

判断 Android 推送权限是否开启

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
* 判断 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 跳转到应用的权限页面

1
2
3
4
5
6
7
8
9
10
11
12
// 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 生成】

本文作者:草梅友仁
本文地址: https://blog.cmyr.ltd/archives/545e0e03.html
版权声明:转载请注明出处!

坚持原创技术分享,您的支持将鼓励我继续创作!