从 SDK 31 升级后,通知在 SDK 33 Android 13 上不起作用

问题描述 投票:0回答:2

由于Playstore要求minimumTargetSDK版本为33,这导致我的通知库不再适用于android 13。

受影响的图书馆

 1. awesome-cordova-plugins/local-notifications/ngx (Local Notification)

 2. cordova-plugin-fcm-with-dependecy-updated/ionic/ngx (FCM)

尝试的解决方案

在 Android Manifest 中添加了必要的权限

 <uses-permission android:name="android.permission.NFC" />

尝试请求通知权限无果

前一个函数将为 requestPermission() 返回 false,而不显示对话框以指示我是否要向应用程序授予权限。

async askForLocalNotificationPermission() {
    if (this.platform.is('android')) {
      const hasPermission = await this.localNotifications.requestPermission();

      if (hasPermission) {
        console.log('Notification permission granted');
      } else {
        console.log('Notification permission denied');
      }
    }
  }

后一个函数将为 requestPermission() 返回 true,而不显示对话框以指示我是否要向应用程序授予权限。

async askForFCMNotificationPermission() {
    if (this.platform.is('android')) {
      const hasPermission = await this.fcm.requestPermission();

      if (hasPermission) {
        console.log('Notification permission granted');
      } else {
        console.log('Notification permission denied');
      }
    }
  }
android ionic-framework notifications android-notifications
2个回答
0
投票
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>

添加此权限并请求用户在运行时授予该权限。


0
投票

经过进一步调试,

我发现权限库已过时,并且不包含发送通知所需的新权限。

因此采取以下步骤来解决该问题

  1. 更新 cordova-plugin-android-permissions
  2. 更新node_modules/@ionic-native/android-permissions/index.js
  3. 但是,由于包含发送通知所需的权限设置的 android-permissions 节点模块没有任何更新,我必须手动将权限添加到 index.js 文件中。

  1. 添加以下代码来检查并请求发送通知的权限

    async askForNotificationPermission() {
     return new Promise((resolve)=> {
       let phoneVersion = parseInt(this.device.version, 10);
       if (phoneVersion >= 13) {
         this.androidPermissions.checkPermission(this.androidPermissions.PERMISSION.POST_NOTIFICATIONS).then(
             result => {
               if (result.hasPermission) {
                 resolve(true);
               } else {
                 // Request the permission
                 this.androidPermissions.requestPermission(this.androidPermissions.PERMISSION.POST_NOTIFICATIONS).then(permission => {
                   if(permission.hasPermission) {
                   }
                   else{
                   }
                   resolve(true);
                 });
               }
             },
             err => {
               console.error(err);
               resolve(true);
             }
         );
       }
     });
    

    } }

© www.soinside.com 2019 - 2024. All rights reserved.