我如何获得"数据有效载荷"从Android应用程序处于被杀死状态时的推送通知(使用FCM)?

时间:2017-06-30 10:45:39

标签: android firebase firebase-cloud-messaging

我的推送通知(使用FCM)在前台和后台状态下正常工作,但在杀死状态下,我只能从系统托盘接收通知,但无法获得数据有效负载" 。 我知道onMessageReceived()在kill状态下没有调用(如果我错了就纠正我), 是否有任何方法可以在死亡状态下调用此方法或以任何其他方式获取数据有效负载"。请帮忙!

3 个答案:

答案 0 :(得分:1)

如果您希望在应用程序处于终止状态时读取数据有效负载,则不发送通知有效负载仅使用数据有效负载管理所有操作。 如果应用程序处于终止状态并且您发送通知有效负载,则它不会调用onRecive()方法,因此在数据有效负载中发送通知和通知消息并在onRecive()中生成通知

答案 1 :(得分:0)

我有完美的解决方案:

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    super.onMessageReceived(remoteMessage);
    Log.e("FCM_MESSAGE", remoteMessage.getData().toString());
    Map<String, String> dataMap = remoteMessage.getData();
}

只需将您的整个数据放入Map中,然后通过从地图中输入不同的键来获取值。

我还建议仅使用数据而不是通知,并使用http://www.androidbegin.com/tutorial/android-custom-notification-tutorial/构建您自己的自定义通知

希望这有帮助。

答案 2 :(得分:-1)

  @Override
  public void onMessageReceived(RemoteMessage remoteMessage) {
        super.onMessageReceived(remoteMessage);
        
        if (remoteMessage.getData().size() > 0) {
            Map<String, String> data = remoteMessage.getData();
            ArrayList<String> ndata = new ArrayList<>();
            for (Map.Entry<String, String> entry: data.entrySet()){
                ndata.add(entry.getValue());
            }
            if(ndata.size()>0){
                showNotification(ndata.get(1), ndata.get(0));
            }
        }
        if (remoteMessage.getNotification() != null) {
            showNotification(
                    remoteMessage.getNotification().getTitle(),
                    remoteMessage.getNotification().getBody());
        }
  }