在compileSdkVersion和targetSdkVersion从30更新到31后,firebase消息在andr



我更新了compileSdkVersion和targetSdkVersion从30到31,我没有得到任何通知,我使用
"@react-native-firebase/messaging": "^14.12.0"

我也面临这个问题,这是因为通知蹦床的限制:

为了提高应用性能和用户体验,针对Android 12或更高版本的应用程序不能从用作通知蹦床的服务或广播接收器启动活动。换句话说,在用户点击通知或通知中的操作按钮后,你的应用程序不能在服务或广播接收器中调用startActivity()。

我解决了这个问题,更新代码如下:在react-native中,我们使用:react-native-firebase v5.5.6

转到DisplayNotificationTask.java in:

node_modules react-native-firebase/android/src/main/java/io/蔗糖酶/重火力点/通知/DisplayNotificationTask.java

找到PendingIntent.getActivity

return PendingIntent.getActivity(
context,
notificationId.hashCode(),
intent,
PendingIntent.FLAG_UPDATE_CURRENT
);

将代码替换为以下代码

int flags = Build.VERSION.SDK_INT >= Build.VERSION_CODES.M ? PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE :  PendingIntent.FLAG_UPDATE_CURRENT;
return PendingIntent.getActivity(context, notificationId.hashCode(), intent, flags);

找到PendingIntent.getBroadcast

return PendingIntent.getActivity(
context,
notificationId.hashCode(),
intent,
PendingIntent.FLAG_UPDATE_CURRENT
);

将代码替换为以下代码

int flags = Build.VERSION.SDK_INT >= Build.VERSION_CODES.M ? PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE : PendingIntent.FLAG_UPDATE_CURRENT;
return PendingIntent.getBroadcast(context, notificationId.hashCode(), intent, flags);

Update AndroidManifest.xmlandroid/app/src/main/AndroidManifest.xml:

在所有名称为"firebase"的服务中添加android:exported="false"

Inandroid/app/build.gradle:

dependencies {
// implementation 'com.google.firebase:firebase-core:16.0.0'
// implementation 'com.google.firebase:firebase-messaging:18.0.0'
implementation "com.google.firebase:firebase-iid:21.1.0" 
implementation "com.google.firebase:firebase-messaging:23.1.0"
implementation "com.google.firebase:firebase-inappmessaging:20.2.0" 
}

In Inandroid/build.gradle:

buildscript {
ext {
buildToolsVersion = "31.0.0"
compileSdkVersion = 31
targetSdkVersion = 31
}
...
}

最新更新