我使用FCM进行通知,它在前台和后台的所有场景中都能很好地工作。我的问题是,当我从应用程序注销时,另一个用户向我发送消息,我在注销时没有收到任何通知,这很好,但当我再次登录应用程序时,我想收到旧的未读通知,所以如何做到这一点将不胜感激。以下是我使用的代码
public class FirebaseIDService extends FirebaseInstanceIdService {
private static final String TAG = "FirebaseIDService";
Context ctx = this;
@Override
public void onTokenRefresh() {
// Get updated InstanceID token.
try {
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
Log.d(TAG, "Refreshed token: " + refreshedToken);
} catch (Exception e) {
e.printStackTrace();
}
}
}
public class MyFirebaseMessagingService extends FirebaseMessagingService {
private static final String TAG = "FCM Service";
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
super.onMessageReceived(remoteMessage);
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
Log.e("remote", remoteMessage.getData().get("type") + "");
Log.e("remoteMessage", remoteMessage.getData() + "");
Log.e("remoteMessagebody", remoteMessage.getData().get("body") + "");
// handling other data also according to my app which i am not mentioning
}
}
我用这个代码获取旧的通知,但没有工作
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
并且在清单中
<service
android:name=".MyFirebaseMessagingService"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
<service android:name=".FirebaseIDService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
</intent-filter>
</service>
和分级
compile 'com.google.firebase:firebase-messaging:9.2.1'
FCM消息有自己的生存期——默认为4周,可以通过在有效负载中设置time_to_live
来修改。在此之后,该消息将被丢弃。
你可以做的是实现每个notif都保存在你的服务器数据库中,如果它还没有被读取,并且你检测到用户重新登录,将它们作为推送通知重新发送,或者只是在你的应用程序中检索它们并将它们显示为通知。