代码之家  ›  专栏  ›  技术社区  ›  Yeo Bryan

Ionic项目申请通知权限

  •  0
  • Yeo Bryan  · 技术社区  · 1 年前

    在config.xml文件中将minimumTargetSDK从31更新为33之后,将不再向移动设备发送通知。

    我注意到这是因为android如何处理通知相关权限的更新。 https://developer.android.com/develop/ui/views/notifications/notification-permission 。有了新的更新,我们需要在安卓13及以后的应用程序运行期间征求用户的许可。

    我试图通过在启动应用程序时运行的app.component.ts中包含以下代码来获得用户的权限,但设置对话框没有出现。如果我从 this.androidPermissions.requestPermission(this.androidPermissions.PERMISSION.POST_NOTIFICATIONS) this.androidPermissions.requestPermission(this.androidPermissions.PERMISSION.CAMERA) 但是,将显示相机权限的设置对话框。 console.log(this.androidPermissions.PERMISSION); 也不显示通知权限(POST_NOTIFICATIONS)

    有人能告诉我我缺了什么吗?

    app.component.ts

    import { AndroidPermissions } from '@ionic-native/android-permissions'; // Import the AndroidPermissions module
    
    constructor (private androidPermissions : AndroidPermissions){
    if(this.device.platform == "iOS"){
        }
        else{
         this.androidPermissions.requestPermission(this.androidPermissions.PERMISSION.POST_NOTIFICATIONS)
                  .then(result => {
                      if (result.hasPermission) {
                        console.log("PERMISSION GRANTED");
                          // Permission granted
                      } else {
                        console.log("PERMISSION DENID");
                          // Permission denied
                      }
                  })
                  .catch(error => {
                    console.log("ERRRRRRRROR");
                      console.error(error);
                  });
        }
    }
    

    AndroidManifest.xml

    <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
    
    1 回复  |  直到 1 年前
        1
  •  0
  •   KoLivanas    1 年前

    您面临的问题可能是因为您试图请求的权限(POST_NOTIFICATIONS)可能不正确或不适用。安卓平台本身并没有像对摄像头或位置等发出通知那样,对通知发出特定的权限请求。在Android中管理通知权限的典型方法不包括直接通过Android权限API请求它们,就像您对其他权限所做的那样。通知通常在默认情况下启用,但用户可以选择从系统设置中禁用通知。但是,您可以将用户引导到应用程序的系统设置页面,在那里他们可以手动启用通知。

    您可以通过使用以下代码片段打开应用程序设置页面来实现这一点:

    import { Platform } from '@ionic/angular';
    import { InAppBrowser } from '@ionic-native/in-app- 
    browser/ngx';
    
    constructor(
    private platform: Platform, 
    private inAppBrowser: InAppBrowser
    ) {
    if (this.platform.is('android')) {
      const packageName = 'your.package.name'; //app'spackage                                       
      this.inAppBrowser.create(`market://details? 
    id=${packageName}`,'_system');
     }
     }
    

    这将打开应用程序设置,然后用户可以在其中手动启用通知。

    此外,请确保您在AndroidManifest.xml中使用了正确的Android权限。通常,对于通知,您可能包括互联网访问或前台服务等权限,但在标准的Android SDK中没有特定的“发布通知”权限。

    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
    
        2
  •  0
  •   Adrian Mole Chris    1 年前

    请在请求权限之前输入以下内容:

    this.androidPermissions.PERMISSION["POST_NOTIFICATIONS"]="android.permission.POST_NOTIFICATIONS";