uniapp获取手机通知权限实现demo

作者:阿沐

时间:2026-10-31

浏览:411

本文介绍如何在uniapp中获取并跳转至手机通知权限设置页面。通过判断iOS与Android平台,分别调用原生API检测通知状态,并在未开启时引导用户手动开启,提供完整代码示例与注意事项。

文章目录

获取通知权限跳转开启

此前发布过一篇使用插件市场获取权限的文章,但有用户希望获得单独开启通知权限的教程,本文专门整理获取通知权限并跳转开启的方法

设置弹窗通知

首先配置一个弹窗通知,具体样式此处省略,可自行编写,本文仅展示获取及跳转的具体代码

//首先我们需要一个触发,我是在进入页面onReady()生命周期中触发的检测
getQuanxian() {
                let platform = uni.getSystemInfoSync().platform; //首先判断app是安卓还是ios
                console.log(platform);
                if (platform == "ios") { //这里是ios的方法
                    console.log("我是iOS");
                    var UIApplication = plus.ios.import("UIApplication");
                    var app = UIApplication.sharedApplication();
                    var enabledTypes = 0;
                    if (app.currentUserNotificationSettings) {
                        var settings = app.currentUserNotificationSettings();
                        enabledTypes = settings.plusGetAttribute("types");
                        console.log("enabledTypes1:" + enabledTypes);
                        if (enabledTypes == 0) { //如果enabledTypes = 0 就是通知权限没有开启
                            this.tongzhi = true; //这里是我写的一个弹窗上面有一个跳转开启的按钮,自行添加即可
                        }
                    }
                    plus.ios.deleteObject(settings);
                } else if (platform == "android") { //下面是安卓的方法
                    console.log("我是安卓", plus.android);
                    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"
                    );
                    //android.support.v4升级为androidx
                    if (NotificationManagerCompat == null) {
                        NotificationManagerCompat = plus.android.importClass(
                            "androidx.core.app.NotificationManagerCompat"
                        );
                    }
                    var areNotificationsEnabled =
                        NotificationManagerCompat.from(main).areNotificationsEnabled();
                    // 未开通‘允许通知'权限,则弹窗提醒开通,并点击确认后,跳转到系统设置页面进行设置
                    if (!areNotificationsEnabled) {
                        this.tongzhi = true; //这里也一样未开启权限,弹出弹窗
                    }
                }
            },

上述代码依据手机操作系统检测系统是否已开启通知权限,下方代码在检测未开启时弹窗提示,点击弹窗按钮后执行跳转至对应权限设置页面的方法

Tips:

安卓手机因系统新老版本差异,开启权限的位置可能不同,需根据实际情况修改;iOS由于权限限制可能跳转失败,需手动开启

            //开启通知
            openTongZhi() { //弹窗按钮绑定方法
                let platform = uni.getSystemInfoSync().platform; //获取安卓还是ios
                this.tongzhi = false;
                if (platform == "ios") {//如果机型是ios,ios由于权限问题,可能需要手动开启
                    var UIApplication = plus.ios.import("UIApplication");
                    var app = UIApplication.sharedApplication();
                    var settings = app.currentUserNotificationSettings();
                    enabledTypes = settings.plusGetAttribute("types");
                    var NSURL2 = plus.ios.import("NSURL");
                    var setting2 = NSURL2.URLWithString("app-settings:");
                    var application2 = UIApplication.sharedApplication();
                    application2.openURL(setting2);
                    plus.ios.deleteObject(setting2);
                    plus.ios.deleteObject(NSURL2);
                    plus.ios.deleteObject(application2);
                    plus.ios.deleteObject(settings);
                } else if (platform == "android") {//如果机型是安卓
                    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");
                    //android 8.0引导
                    if (Build.VERSION.SDK_INT >= 26) { //判断安卓系统版本
                        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);
                }
            },

以上为在uniapp中开启通知权限的方法,如有需要可自行挪用,若描述不清之处请指出,更多uniapp获取手机通知权限的资料请关注本站其它相关文章!

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章