我使用 FCM 向我的应用程序用户推送通知。我还使用 Firebase Analytics 来获取有关应用程序行为的反馈。
我有一个应用程序,在其默认活动启动时订阅特定主题。因此,基本上每个使用过该应用程序的用户都是主题订阅者。从 Firebase Analytics 中,我可以在过去 30 天的事件日志中看到 21374 个 first_open。我也可以在“活跃用户”仪表板中看到此数量。
因此,基本上应该有至少 21k 订阅者可用于该主题。
昨天我向这个主题发送了一条通知。这是一个数据通知,所以应用程序的后台/前台/未启动状态都没有问题。
在 onMessageReceived 方法中,我在 Firebase Analytics 上记录了一个事件。而且显然,只有 2.9K 用户收到了通知。
什么可以解释订阅者计数和有效推送给用户的通知之间的差异?
以下是一些可能相关的元素:
- 应用程序在 3 天前更新了商店。因此,用户可能尚未启动新版本的应用程序。但更新不应删除先前版本已订阅的主题。我还运行了一些测试来验证这一点,并且更新不会删除由先前版本订阅的主题(除非首先卸载应用程序)。因此,这不应该是出现此问题的原因。 - 应用程序使用了 GooglePlayServices / Firebase 包的新版本(从 9.2 到 10.0.1)。它是否会删除旧版 GooglePlayServices / Firebase 包订阅的所有主题?
是否有其他原因可以导致订阅者计数和通知发送计数之间的差异?
我有一个应用程序,在其默认活动启动时订阅特定主题。因此,基本上每个使用过该应用程序的用户都是主题订阅者。从 Firebase Analytics 中,我可以在过去 30 天的事件日志中看到 21374 个 first_open。我也可以在“活跃用户”仪表板中看到此数量。
因此,基本上应该有至少 21k 订阅者可用于该主题。
昨天我向这个主题发送了一条通知。这是一个数据通知,所以应用程序的后台/前台/未启动状态都没有问题。
在 onMessageReceived 方法中,我在 Firebase Analytics 上记录了一个事件。而且显然,只有 2.9K 用户收到了通知。
什么可以解释订阅者计数和有效推送给用户的通知之间的差异?
以下是一些可能相关的元素:
- 应用程序在 3 天前更新了商店。因此,用户可能尚未启动新版本的应用程序。但更新不应删除先前版本已订阅的主题。我还运行了一些测试来验证这一点,并且更新不会删除由先前版本订阅的主题(除非首先卸载应用程序)。因此,这不应该是出现此问题的原因。 - 应用程序使用了 GooglePlayServices / Firebase 包的新版本(从 9.2 到 10.0.1)。它是否会删除旧版 GooglePlayServices / Firebase 包订阅的所有主题?
是否有其他原因可以导致订阅者计数和通知发送计数之间的差异?
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上记录事件的方法。