uniapp 判断Android和ios用户是否开启通知权限

1,384 阅读1分钟
// 在onLoad和onShow中调用
  onLoad(query){
    that= this;
    // #ifdef APP-PLUS
    that.ios_function();
    that.judge();
    // #endif
  },
  onShow(){
    that= this;
    // #ifdef APP-PLUS
    that.judge()
    // #endif
  },
 // 判断当前用户是否开启通知
    judge(){
      // #ifdef APP-PLUS
      if(that.is_ios){
        var UIApplication = plus.ios.import("UIApplication");  
        var app = UIApplication.sharedApplication();  
        if (app.currentUserNotificationSettings) {  
            var settings = app.currentUserNotificationSettings();  
            that.permissions = settings.plusGetAttribute("types");
        } else {  
            //针对低版本ios系统  
            that.permissions = app.enabledRemoteNotificationTypes();  
        }  
        plus.ios.deleteObject(app);  
      }else{
        var main = plus.android.runtimeMainActivity();
        var NotificationManagerCompat = plus.android.importClass("android.support.v4.app.NotificationManagerCompat");
        that.permissions = NotificationManagerCompat.from(main).areNotificationsEnabled();
      }
      console.error('当前权限开启状态为:',that.permissions);
      // #endif
    },
    // 点击开启权限
    open_permissions(){
      // #ifdef APP-PLUS
      if(that.is_ios){
        if ( !that.permissions ) {  
          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);  
        }
      }else{
        var main = plus.android.runtimeMainActivity();
        var pkName = main.getPackageName();
        var uid = main.getApplicationInfo().plusGetAttribute("uid");
        // 未开通‘允许通知’权限,跳转到系统设置页面进行设置
        if (!that.permissions) {
          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)其他--跳转到该应用管理的详情页
            var Settings = plus.android.importClass("android.provider.Settings");
            var Uri = plus.android.importClass("android.net.Uri");
            var intent = new Intent();
            intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
            var uri = Uri.fromParts("package", main.getPackageName(), null);
            intent.setData(uri);
          }
          // 跳转到该应用的系统通知设置页  
          main.startActivity(intent); 
        }
      }
      // #endif
    },
    ios_function(){
      const systerm_info = uni.getSystemInfoSync();
      // console.log(systerm_info, systerm_info.platform != "ios");
      if (systerm_info.platform != "ios") {
        // Android系统
        that.is_ios= !1;
      } else {
        // ios系统
        that.is_ios= !0;
      }
    }