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

时间:2017-12-19 13:24:55

标签: android firebase firebase-cloud-messaging

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

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

所以基本上,至少有21,000个订阅者应该可用于该主题。

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

在onMessageReceived方法中,我在firebase分析上记录一个事件。显然,只有29,000名用户确实收到了通知

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

可以链接的一些元素:

  • 应用程序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");

所使用的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);
}

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

2 个答案:

答案 0 :(得分:3)

这里可能有很多因素可以解决:

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

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

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

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

5)用户可能已清除App Data,导致实例ID失效,主题消息也会被取消订阅。如果您没有重新订阅逻辑,他们将保留未订阅。

6)在较新的Android版本中,如果您的应用程序在一段时间内没有打开(谷歌没有透露金额),那么如果您的应用程序没有任何可见的组件,例如Foreground服务,通知等。应用程序获得缓存,通知不会像往常一样交付。这是App待机

7)数据消息到期的时间已经过去,到那时,用户没有连接到FCM服务器并获取消息。

8)在某些情况下,FCM可能无法传递消息。如果在连接时特定设备上的应用程序有太多邮件(> 100)等待,或者设备在一个多月内未连接到FCM,则会发生这种情况。在这些情况下,您可能会收到对FirebaseMessagingService.onDeletedMessages()的回调

可能还有其他因素有助于主题屏幕显示21k,但它与实际计数等不一致。

答案 1 :(得分:0)

在数据通知非常不准确的情况下,就像在“收到的通知”上进行Firebase分析一样。

我进行了以下测试: 使用Firebase控制台向大约10万用户发送了一个数据通知,该数据通知立即显示通知,这次向另一个100000用户发送了相同的通知。 (在创建测试主题之前,请随机洗净令牌)

根据Firebase控制台,数据通知的接收率为40%,从控制台发送的通知的接收率为84%。因此,您可以预期推开次数与“已接收”的次数成正比,但令人惊讶的是,两组推推次数几乎相同。

在我们进行的另一项测试中,我们将内部系统与Firebase的分析进行了比较,并且系统中的“接收”是Firebase报告的两倍。 请注意,这些测试是在最近(2天)内进行的,可能会有所延迟,因为事件会显示在Firebase中。如果数字在未来几天内保持一致,我将更新评论。

修改 按照承诺的更新,仪表板不会刷新。我强烈感觉到数据通知的“已接收”事件不可靠。