APP 如何打开应用通知权限

注意

本文章使用 uniapp 开发,使用了plus。如果涉及多端,需进行条件编译

获取通知权限状态

function getNotificationStatus() {
  console.log(platform);
  if (platform == "ios") {
    //这里是ios的方法
    var UIApplication = plus.ios.import("UIApplication");
    var app = UIApplication.sharedApplication();
    if (app.currentUserNotificationSettings) {
      var settings = app.currentUserNotificationSettings();
      enabledTypes = settings.plusGetAttribute("types");
      console.log("enabledTypes1:" + enabledTypes);
      //如果enabledTypes = 0 就是通知权限没有开启
      plus.ios.deleteObject(settings);
      return enabledTypes;
    }
  } else if (platform == "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();
    console.log(areNotificationsEnabled);
    return areNotificationsEnabled;
    // 未开通‘允许通知’权限,则弹窗提醒开通,并点击确认后,跳转到系统设置页面进行设置
  }
}

跳转通知权限设置

Android 可以直接跳转通知设置页面。ios 需要跳转设置页面后在手动进入通知设置

function openNotificationSetting() {
	//弹窗按钮绑定方法
	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)
	}