实际上,我的应用程序是从远程服务器上拨打电话,所以我决定使用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以外的其他方式从远程服务器上拨打电话?