我正在尝试在我的Android应用中实施FCM。在一些手机上,当应用程序处于前台/后台/被杀时,会收到通知。但在某些手机上,仅在应用处于前台/后台时才会收到。当应用程序被杀死时,onMessageReceived和启动器getExtra也不会被调用。我正在使用API中的数据和通知对象。 这是我的Android代码 -
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
Log.e("Here", "here");
if (remoteMessage.getData().size() > 0) {
Log.e(TAG, "Data Payload: " + remoteMessage.getData().toString());
try {
JSONObject json = new JSONObject(remoteMessage.getData());
sendPushNotification(json);
} catch (Exception e) {
Log.e(TAG, "Exception: " + e.getMessage());
}
}
if (remoteMessage.getNotification() != null) {
Log.e(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody());
}
}
答案 0 :(得分:1)
在Manifest文件中添加BootBroadcastReceiver
<receiver
android:name=".OnBootBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
创建以下Java文件。调用FirebaseMessagingReceiveService 在里面。
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class OnBootBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent i = new Intent("com.demo.FirebaseMessagingReceiveService");
i.setClass(context, FirebaseMessagingReceiveService.class);
context.startService(i);
}
}
答案 1 :(得分:1)
在自定义ROM设备中,当应用被用户杀死时,所有服务也会被杀死,因此没有通知
为了克服这一点,我们必须使用数据通知
从服务器端发送数据通知,格式如下:
{
"to" : "your_token",
"time_to_live" :4500,
"restricted_package_name":"your_package_name"
"data" : {
"body" : "Sending Notification Body From Data",
"title": "Notification Title from Data",
}
"direct_boot_ok" : true,
"priority" : "high"
}
我在MI,One Plus,OPPO等设备上测试了该解决方案,即使应用被杀死/后台也收到了通知
答案 2 :(得分:0)
我在通知中遇到了同样的问题,经过研究后我们发现问题是设备特定的,不同的设备制造商不仅会处理不同的通知,而且其他服务也就像VPN一样。
杀死应用程序也会终止这些服务,您必须教育最终用户您的应用程序无法在设备列表上运行,这个设备始终会返回正面结果三星设备。
干杯。
答案 3 :(得分:0)
我也遇到过类似的问题。虽然有些消息来源说这是firebase的问题,但更多的是关于不使用Android原生ROM的制造商。
简单来说,像One Plus,MI,Oppo,Vivo等制造商使用定制ROM(重写Android股票的行为)。因此,当应用程序被用户杀死时,其所有服务也都会被杀死,因此没有通知。解决此问题的一种方法是让用户更改其设置。
可以找到原始文章here。