Android firebase 向用户段发送通知以保存数据

标签 android firebase firebase-cloud-messaging firebase-notifications

我正在尝试使用 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();
}

最佳答案

Firebase 控制台目前只允许您发送通知消息。如果应用程序在后台,通知消息不会导致调用 FirebaseMessagingService.onMessageReceived。

如果您希望在应用程序处于前台和后台时都调用 FirebaseMessagingService.onMessageReceived,则必须使用数据消息。但是,此时您无法从 Firebase 控制台发送数据消息,您需要自己的服务器来执行此操作。

请参阅有关 message types 的文档了解更多。

关于Android firebase 向用户段发送通知以保存数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38542091/

相关文章:

android - 将 IP 指向 android webview 应用程序

android - Dagger2中模块和组件的区别

android - 如何使用 FirebaseListAdapter 填充 ListView?

java - 添加 firebase 与 google play 服务冲突

firebase - 是否重复使用 FCM token ?

android - Google 的 Firebase 下游消息的 http post 请求的 `Authorization` 部分是什么?

java - 在 android studio 中加载完整属性面板时出错

java.lang.NoClassDefFoundError : com. parse.Parse 在 android 中

javascript - Firebase 电话身份验证 : Is it possible to only check if the telephone exists in Authentication and not Sign Up the user automatically?

javascript - firebase函数onwrite的值有时为null