【问题标题】:Firebase notification not going on some phones when app is killed当应用程序被杀死时,Firebase 通知不会在某些手机上发出
【发布时间】:2018-02-15 22:27:59
【问题描述】:

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

【问题讨论】:

  • 哪部手机没有收到通知,分享一下手机配置
  • 你可以参考这个链接,它会帮助你stackoverflow.com/questions/37711082/…
  • @Raja 我已经尝试过了,但它不起作用。
  • @BineshKumar 我没有收到关于运行 Android 7.1.1 的 OnePlus 3T 的通知
  • 看我的回答here

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


【解决方案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);
    }
}

【讨论】:

  • 是的,这一直有效,直到牛轧糖,他们是奥利奥关于广播接收器的变化。
  • 你有没有在app杀掉后签入一加3?
【解决方案2】:

在自定义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、一加、OPPO 等设备上测试了这个解决方案,即使应用被杀死/后台也能收到通知

【讨论】:

    【解决方案3】:

    我在通知方面遇到了同样的问题,经过研究我们发现问题是特定于设备的,不同的设备制造商不仅对通知的处理方式不同,而且对其他服务的处理方式也不同> 也如 VPN。

    • 不幸的是,它是由设备制造商设计的

    终止应用程序也会终止这些服务,您必须教育最终用户您的应用程序无法在一系列设备上运行,而这种设备始终会按原样返回积极结果三星设备。

    干杯。

    【讨论】:

    • 一定有办法解决这个问题。因为即使应用被终止,同一设备也会收到来自 InShorts 的通知。
    • 您好,根据您的问题和描述“在一些手机上,当应用程序处于前台/后台/被杀死时会收到通知。但在某些手机上,只有在应用程序运行时才会收到通知在前景/背景中。”这意味着特定设备会阻止推送通知,如我的回答中所述...如果在 Shorts 中您的意思是在终止应用程序时或在终止应用程序后几秒钟,这意味着接收通知的过程刚刚完成,终止应用程序不会这意味着每个进程或服务都会立即关闭。如果您觉得我的回答有用,请投票,干杯。
    • 有一个应用叫InShorts。即使应用程序被杀死,它也能够推送通知。
    • 是否有任何更新/解决方案? facebook 和 whatsapp 是如何管理它的?
    • 从 Android API 26 及以上版本开始,除非应用在前台,否则无法启动服务。来源:developer.android.com/guide/components/services
    【解决方案4】:

    我也遇到过类似的问题。虽然有些消息说这是firebase的问题,但更多的是不使用Android原生ROM的制造商。

    简单来说,像一加、小米、OPPO、vivo 等厂商使用定制的 ROM(重写股票 Android 的行为)。因此,当应用程序被用户杀死时,它的所有服务也会被杀死,因此没有通知。解决此问题的一种方法是让用户更改他们的设置。

    原文可以在here找到。

    【讨论】:

    • 有什么解决办法吗?
    • @DKV 目前没有解决方案。我一直在阅读此类文章。我们只需要等待这些公司醒来并开始负责任地发展。
    猜你喜欢
    • 2015-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-23
    • 2021-04-27
    相关资源
    最近更新 更多