我尝试使用Firebase将数据发送到Android应用。如果应用程序运行后台,我可以发送数据并成功保存。但是如果应用被杀死并且用户通过数据获得通知,则不会保存数据。
我使用FirebaseMessagingService.onMessageReceived
方法捕获数据并将其保存在SharedPreference
文件中。我也阅读了firebase云消息。但我没有服务器,我只是使用firebase控制台。
public void onMessageReceived(RemoteMessage remoteMessage) {
Log.d(TAG, "From: " + remoteMessage.getFrom());
// Check if message contains a data payload.
if (remoteMessage.getData().size() > 0) {
Log.d(TAG, "Message data payload: " + remoteMessage.getData());
}
// Check if message contains a notification payload.
if (remoteMessage.getNotification() != null) {
Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody());
}
if (remoteMessage.getNotification() != null) {
Log.d(TAG, "Message Notification Body Verse: " + remoteMessage.getData().get("verse"));
}
//sendNotification(remoteMessage.getNotification().getBody());
SharedPreferences sharedPref = this.getSharedPreferences(getString(R.string.preference_file_key),
Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
Log.d("FIREBASE NOTIF SERVICE", remoteMessage.getNotification().getTitle());
Log.d("FIREBASE NOTIF SERVICE", remoteMessage.getData().get("verse"));
editor.putString(getString(R.string.preference_verse_title_key), remoteMessage.getNotification().getTitle());
editor.putString(getString(R.string.preference_verse_content_key), remoteMessage.getData().get("verse"));
editor.commit();
}
答案 0 :(得分:1)
Firebase控制台目前仅允许您发送通知消息。如果应用程序在后台,则通知消息不会导致调用FirebaseMessagingService.onMessageReceived。
如果您希望在应用程序位于前台和后台时同时调用FirebaseMessagingService.onMessageReceived,则必须使用数据消息。但是,此时您无法从Firebase控制台发送数据消息,您需要自己的服务器才能执行此操作。
有关详情,请参阅有关message types的文档。