问题描述:在使用Android Firebase Cloud Messaging(FCM)时,只有在断开或重新连接到应用程序时才会收到通知。
解决方法:
确保您的设备已经正确设置了FCM服务。您可以参考Firebase官方文档来确保配置正确。
确保您的设备已经正确注册了FCM服务。您可以通过以下代码来注册FCM服务:
public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {
private static final String TAG = "MyFirebaseInstanceID";
@Override
public void onTokenRefresh() {
// Get updated InstanceID token.
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
Log.d(TAG, "Refreshed token: " + refreshedToken);
// Send token to server or store it locally.
sendRegistrationToServer(refreshedToken);
}
private void sendRegistrationToServer(String token) {
// Implement your logic to send the token to your server.
}
}
在您的AndroidManifest.xml
文件中添加以下代码:
FirebaseMessaging.getInstance().subscribeToTopic("topic_name")
.addOnCompleteListener(new OnCompleteListener() {
@Override
public void onComplete(@NonNull Task task) {
if (task.isSuccessful()) {
Log.d(TAG, "Subscribed to topic successfully");
} else {
Log.d(TAG, "Failed to subscribe to topic");
}
}
});
onMessageReceived
方法中添加以下代码来处理后台通知:@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
// Handle the received message.
...
// Check if the application is in the background.
if (isAppInBackground(getApplicationContext())) {
// Show notification in the notification tray.
sendNotification(remoteMessage.getNotification().getBody());
} else {
// Handle the message directly.
handleNow(remoteMessage);
}
}
private boolean isAppInBackground(Context context) {
ActivityManager.RunningAppProcessInfo appProcessInfo = new ActivityManager.RunningAppProcessInfo();
ActivityManager.getMyMemoryState(appProcessInfo);
return appProcessInfo.importance != IMPORTANCE_FOREGROUND;
}
private void sendNotification(String messageBody) {
// Implement your logic to show the notification in the notification tray.
}
private void handleNow(RemoteMessage remoteMessage) {
// Implement your logic to handle the message directly.
}
通过以上步骤,您应该能够在应用程序连接/断开时都能够正确地接收到FCM通知。请注意,如果应用程序处于睡眠状态或后台运行,则无法直接处理通知,而是会在通知栏中显示通知。