uni-app h5+安卓判断通知权限,打开通知权限

发布于 1周前 作者 itying888 来自 Uni-App

uni-app h5+安卓判断通知权限,打开通知权限

以下是uniapp代码

1、安卓代码

var main = plus.android.runtimeMainActivity();  
var pkName = main.getPackageName();  
var NotificationManagerCompat = plus.android.importClass("android.support.v4.app.NotificationManagerCompat");  
var packageNames = NotificationManagerCompat.from(main);  
console.log(JSON.stringify(packageNames));  
if (packageNames.areNotificationsEnabled()) {  
    console.log('已开启通知权限');  
}else{  
    uni.showModal({  
        title: '提示',  
        content: '请先打开APP通知权限',  
        showCancel: false,  
        success: function (res) {  
            if (res.confirm) {  
                var Intent = plus.android.importClass('android.content.Intent');  
                var intent = new Intent('android.settings.APP_NOTIFICATION_SETTINGS');//可设置表中所有Action字段  
                intent.putExtra('android.provider.extra.APP_PACKAGE', pkName);  
                main.startActivity(intent);  
            }  
        }  
    });  
}

2、苹果代码

var UIApplication = plus.ios.import("UIApplication");  
var app = UIApplication.sharedApplication();  
var enabledTypes  = 0;  
if (app.currentUserNotificationSettings) {  
    var settings = app.currentUserNotificationSettings();  
    enabledTypes = settings.plusGetAttribute("types");  
} else {  
    //针对低版本ios系统  
    enabledTypes = app.enabledRemoteNotificationTypes();  
}  
plus.ios.deleteObject(app);  
if ( 0 == enabledTypes ) {  
    uni.showModal({  
        title: '提示',  
        content: '请先打开APP通知权限',  
        showCancel: false,  
        success: function (res) {  
            if (res.confirm) {  
                var UIApplication = plus.ios.import("UIApplication");  
                var NSURL = plus.ios.import("NSURL");  
                var setting = NSURL.URLWithString("app-settings:");  
                var application = UIApplication.sharedApplication();  
                application.openURL(setting);  
                plus.ios.deleteObject(setting);  
                plus.ios.deleteObject(application);  
            }  
        }  
    });  
}

1 回复

uni-app 中,对于 H5+ 环境下的安卓平台,判断通知权限并引导用户打开通知权限,可以通过调用 plus.android.importClass 方法来访问安卓的原生 API。以下是一个示例代码,展示如何实现这一功能。

首先,确保你的 manifest.json 文件中已经配置了相关的权限,例如 android.permission.NOTIFY_WITH_TEXT

然后,在你的 Vue 组件或者页面的脚本中,可以编写如下代码:

export default {
  methods: {
    checkNotificationPermission() {
      // 导入安卓的 NotificationManagerCompat 和 Context 类
      const NotificationManagerCompat = plus.android.importClass('androidx.core.app.NotificationManagerCompat');
      const Context = plus.android.importClass('android.content.Context');
      const main = plus.android.runtimeMainActivity();
      const notificationManagerCompat = NotificationManagerCompat.from(main);

      // 获取当前通知权限状态
      const areNotificationsEnabled = notificationManagerCompat.areNotificationsEnabled();

      if (!areNotificationsEnabled) {
        // 通知权限未开启,引导用户开启
        this.requestNotificationPermission();
      } else {
        console.log('通知权限已开启');
      }
    },
    requestNotificationPermission() {
      // 对于安卓 8.0(API 级别 26)及以上版本,直接跳转到系统设置页面让用户手动开启
      if (plus.os.version >= '8.0') {
        const Intent = plus.android.importClass('android.content.Intent');
        const Settings = plus.android.importClass('android.provider.Settings');
        const main = plus.android.runtimeMainActivity();
        const intent = new Intent(Settings.ACTION_APP_NOTIFICATION_SETTINGS);
        intent.putExtra(Settings.EXTRA_APP_PACKAGE, main.getPackageName());
        main.startActivity(intent);
      } else {
        // 对于安卓 8.0 以下版本,处理可能有所不同,但通常直接跳转到应用详情页
        const Intent = plus.android.importClass('android.content.Intent');
        const main = plus.android.runtimeMainActivity();
        const intent = new Intent(Intent.ACTION_VIEW, plus.android.invoke(main, 'getPackageManager').getPackageInfo(main.getPackageName(), 0).applicationInfo.packageName));
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.setData(plus.android.invoke(main, 'getPackageManager').getLaunchIntentForPackage(main.getPackageName()));
        main.startActivity(intent);
      }
    }
  },
  mounted() {
    // 在组件挂载时检查通知权限
    this.checkNotificationPermission();
  }
};

注意:

  1. 上述代码假设你已经在项目中启用了 H5+ 扩展 API。
  2. 对于安卓 8.0 及以上版本,直接跳转到通知设置页面;对于以下版本,通常跳转到应用详情页,用户需要手动在应用详情页中找到并开启通知权限。
  3. 由于不同安卓版本和设备厂商可能对通知权限管理有所不同,上述代码可能需要根据实际情况进行调整。

确保在实际应用中处理各种可能的异常情况,并给用户清晰的提示信息。

回到顶部