当应用程序在后台运行时,未调用FCM的onMesasageReceived吗?

时间:2019-04-02 05:36:35

标签: android firebase firebase-cloud-messaging background-process

实际上,我的应用程序是从远程服务器上拨打电话,所以我决定使用Firebase云消息传递。我写了一个媒体播放器,可以播放5秒钟,如下所示,

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    super.onMessageReceived(remoteMessage);

//if app is in foreground
  if (remoteMessage.getNotification().getBody().equalsIgnoreCase("deleteall"))
    {
          MediaPlayer player = MediaPlayer.create(this, R.raw.uniphone);

        player.start();
    }

//if app is in background
if(remoteMessage.getData().size() > 0)
    {
        MediaPlayer player = MediaPlayer.create(this, R.raw.uniphone);

        player.start();
}

    showNotification(remoteMessage.getNotification().getTitle(), remoteMessage.getNotification().getBody());

此代码在应用程序处于前台状态时可以正常运行,但是在应用程序处于后台或终止状态时不起作用。

我知道当应用程序在后台运行时,FCM的onMessageReceived不会被调用,而是在系统托盘的帮助下显示通知。

当我搜索此问题时,遇到了一个解决方案,我们必须发送“数据消息”而不是“通知消息”,并且允许数据消息调用FCM的onMessageReceived。

请注意,我还尝试通过更改代码以及Web服务器的json格式的Notification声音,但是没有任何效果。

我的json作为数据有效载荷

{"to":"<my_fcm_token_here>",

"data": {

"somekey": "somevalue",
"somekey1": "somevalue1"
}
}

我也尝试了数据消息的概念,但这也行不通...我只是在过去3天试图修复它,而一切都失败了,请有人帮我解决这个问题。

否则,我的应用程序是否可以通过FCM以外的其他方式从远程服务器上拨打电话?

0 个答案:

没有答案