Ionic 项目请求通知许可

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

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

我注意到这是因为 android 处理通知相关权限的方式进行了更新。https://developer.android.com/develop/ui/views/notifications/notification-permission。在新的更新中,我们需要在 Android 13 及更高版本的应用程序运行时征求用户的许可。

我尝试通过将下面的代码包含在 app.component.ts 中来获得用户的许可,该代码在启动应用程序时运行,但是设置对话框没有出现。但是,如果我将 requestPermission 代码从

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" />
android cordova ionic-framework sdk ionic3
1个回答
0
投票

您面临的问题可能是因为您尝试请求的权限 (POST_NOTIFICATIONS) 可能不正确或不适用。 Android 平台本身没有像相机或位置那样的特定通知权限请求。在 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" />
© www.soinside.com 2019 - 2024. All rights reserved.