Android FCM通知使用RemoteMessage中的数据

时间:2017-05-08 19:50:13

标签: android firebase firebase-cloud-messaging

我有一个使用FCM在用户之间发送消息的应用。我已经实现了FirebaseMessagingService,它可以对RemoteMessage的数据执行某些操作。这是RemoteMes的一个示例:

{
"to" : "cZVz2c3uJBg:APA91bHW...",
"data" :{"friend": "mike"},
"notification" : {
  "title" : "Paltrack",
  "sound" : "true",
  "click_action" : "com.woutkl.groep_2.RegActivityStart"
  }
}

我遇到的第一个问题是(如果这是正确的)当应用程序不在前台时,不会调用onMessageReceived。所以在你点击通知后我做了一些事情我开始那个活动,但现在我需要从RemoteMes访问数据,我不知道如何做到这一点。

2 个答案:

答案 0 :(得分:1)

当时在后台的应用程序无法从“通知”参数获取通知值。那时我们可以从“数据”参数中获取价值。因此,无论我们想要在通知中显示什么,我们都需要从服务器后端获取具有“数据”和“通知”参数值的相同数据的响应。

每当点击通知时,我们都可以通过带有laucher活动的通知消息中的“data”参数获取该通知消息。

AndroidManifest.xml:

<activity
    android:name=".view.SplashActivity"
    android:screenOrientation="portrait">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

在启动器活动中,我们可以在点击通知后获得通知消息信息。

SplashActivity:

public class SplashActivity
{
@Override
protected void onCreate(Bundle savedInstanceState) {
Bundle bundle = getIntent().getExtras();
if (bundle != null && bundle.get("data")!=null) {
    String datas = bundle.get("data").toString();
    Log.e("splash of pushfcm", datas);
    try {
        JSONObject obj = new JSONObject(datas);
        String text = obj.getString("friend");
    } catch (JSONException e) {
        e.printStackTrace();
    }
} else {
    //Log.d("fcm no data", "no data in fcm");
}
}
}

答案 1 :(得分:0)

当应用处于后台时,包含数据和通知的Firebase消息将不会调用onMessageReceived。这是设计的。

点击通知后,数据会添加到意图中,以将您的活动作为附加内容启动。

在你的活动中,获得额外的意图:

Bundle extras = getIntent().getExtras();

现在获取你额外的所有标签......并使用你需要的东西:

if(extras!=null){
   Set<String> keysInExtras = extras.keySet();

   for(String key : keysInExtras){
     //find the keys you need and get the data from the bundle using those keys
   }

}