应用程序被杀时,某些手机上没有Firebase通知

时间:2017-09-07 08:54:33

标签: android firebase firebase-cloud-messaging android-notifications

我正在尝试在我的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());
}
}

4 个答案:

答案 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