FCM不向所有主题订阅者发送通知(数据通知)

Tho*_*mas 10 android firebase firebase-cloud-messaging

我使用FCM将通知推送给我的应用用户.我还使用Firebase Analytics获取有关应用行为的一些反馈.

我有一个应用程序,它在启动默认活动时订阅特定主题.所以基本上每个至少启动一次应用程序的用户都是主题订阅者.从firebase分析,我可以在过去30天的事件日志中看到21374 first_open.我还可以在"活动用户"仪表板中看到此金额.

所以基本上,至少有21k用户可用于该主题.

我昨天向这个话题发了通知.这是一个数据通知,因此应用程序的后台/前台/未启动状态没有问题.

在onMessageReceived方法中,我在firebase分析上记录一个事件.显然,只有2,9K用户确实收到了通知.

什么可以解释用户数量和通知有效推送给用户之间的这种差异?

一些可以链接的元素:

  • 该应用程序3天前在商店更新.因此,用户可能尚未启动应用程序的新版本.但更新不应删除先前版本已订阅的主题.我还运行了一些测试来验证这一点,并且更新不会删除先前版本订阅的主题(除非首先卸载应用程序).所以这不应该是这个问题的原因.

  • 该应用已使用新版GooglePlayServices/Firebase软件包进行更新(从9.2到10.0.1)是否会删除旧版GooglePlayServices/Firebase软件包订阅的所有主题?

是否还有其他原因会导致订阅者数量和通知传递数量之间出现这种差异?


@Bob Snyder

以下是我检查Google Play服务版本的方法:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    GoogleApiAvailability googleApiAvailability =  GoogleApiAvailability.getInstance();
    int success = googleApiAvailability.isGooglePlayServicesAvailable(this);
    if(success != ConnectionResult.SUCCESS) {
        googleApiAvailability.makeGooglePlayServicesAvailable(this);
    }

    FirebaseMessaging.getInstance().subscribeToTopic("mytopic");
Run Code Online (Sandbox Code Playgroud)

所使用的Google Play服务版本与环境移动+佩戴有关,很多用户在更新其GooglePlayService版本时遇到一些困难,所以我通常会保留比最新版本更低的版本,并且只在必要时才更新.


@Jorgesys

我的FirebaseMessagingService实际上非常简单:

public class MyFirebaseMessagingService extends FirebaseMessagingService {
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    Logger.d("From: " + remoteMessage.getFrom());

    MyFirebaseAnalytics mAnalytics = new MyFirebaseAnalytics(this);
    mAnalytics.logEvent("notif", "reception");

    Map<String, String> data = remoteMessage.getData();
    // Check if message contains a data payload.
    if (data.size() > 0) {
        Logger.d("Message data payload: " + data);
}
Run Code Online (Sandbox Code Playgroud)

logEvent方法是在Firebase上记录事件的方法.

Kus*_*han 5

嗯,这里可能有很多因素可能是一个因素:

1) 人们可能已经删除了您的应用

2) 人们可能在您的应用上使用过“强制停止”

3)分析数据通常需要一些时间来记录,它可能不完整

4) 人们没有连接到网络,他们的主题消息会被缓存,直到主题消息的到期时间(默认为 4 周)

5) 用户可能已经清除了应用数据,这导致实例 ID 失效并且主题消息也被取消订阅。如果您没有重新订阅逻辑,他们将保持未订阅状态。

6)在较新的Android版本中,如果您的应用程序在一段时间内没有打开(谷歌没有透露数量)并且在那些日子里如果您的应用程序没有任何可见的组件,例如前台服务,通知等。应用程序被缓存,通知不会像往常一样发送。这是应用待机

7) 数据消息的到期时间已过,此时,用户未连接到 FCM 服务器并获取消息。

8) 在某些情况下,FCM 可能不会传递消息。当您的应用在连接时在特定设备上有太多消息 (>100) 待处理,或者该设备超过一个月未连接到 FCM 时,就会发生这种情况。在这些情况下,您可能会收到 FirebaseMessagingService.onDeletedMessages() 的回调

可能还有其他因素起作用,例如显示 21k 的主题屏幕,但它不是最新的实际计数等。