我有一个使用FCM在用户之间发送消息的应用。我已经实现了FirebaseMessagingService,它可以对RemoteMessage的数据执行某些操作。这是RemoteMes的一个示例:
{
"to" : "cZVz2c3uJBg:APA91bHW...",
"data" :{"friend": "mike"},
"notification" : {
"title" : "Paltrack",
"sound" : "true",
"click_action" : "com.woutkl.groep_2.RegActivityStart"
}
}
我遇到的第一个问题是(如果这是正确的)当应用程序不在前台时,不会调用onMessageReceived。所以在你点击通知后我做了一些事情我开始那个活动,但现在我需要从RemoteMes访问数据,我不知道如何做到这一点。
答案 0 :(得分:1)
当时在后台的应用程序无法从“通知”参数获取通知值。那时我们可以从“数据”参数中获取价值。因此,无论我们想要在通知中显示什么,我们都需要从服务器后端获取具有“数据”和“通知”参数值的相同数据的响应。
每当点击通知时,我们都可以通过带有laucher活动的通知消息中的“data”参数获取该通知消息。
<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>
在启动器活动中,我们可以在点击通知后获得通知消息信息。
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
}
}