将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" />
您面临的问题可能是因为您尝试请求的权限 (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" />