Я использую FCM для отправки уведомлений пользователям моих приложений. Я также использую Firebase Analytics, чтобы получить некоторые отзывы о поведении приложения.
У меня есть приложение, которое подписывается на конкретную тему, когда начинает свою деятельность по умолчанию. Таким образом, в основном каждый пользователь, который запускал хотя бы один раз приложение, является подписчиком темы. Из аналитики firebase я вижу 21374 first_open в журналах событий за последние 30 дней. Я также могу увидеть эту сумму на панели "активных пользователей".
В основном, для этой темы должно быть доступно не менее 21k подписчиков.
Вчера я опубликовал уведомление по этой теме. Это уведомление о данных, поэтому нет проблем с фоном/передним/не начатым состоянием приложения.
В методе onMessageReceived я регистрирую событие на основе аналитики firebase. И, видимо, только 2,9 тыс. Пользователей получили уведомление.
Что может объяснить это различие между подсчетами подписчиков и уведомлением, эффективно продвигаемым пользователям?
Некоторые элементы, которые могут быть связаны:
-
Приложение было обновлено в магазине 3 дня назад. Таким образом, пользователи могут не запускать новую версию приложения. Но обновление не должно удалять тему, уже подписанную предыдущей версией. Я также проверил некоторые тесты, чтобы проверить это, и обновление не удаляет тему, подписанную предыдущей версией (если приложение не будет удалено первым). Поэтому это не должно быть причиной этой проблемы.
-
Приложение было обновлено новой версией пакета GooglePlayServices/Firebase (от 9.2 до 10.0.1) Удаляет ли он все темы, подписанные более старой версией пакета GooglePlayServices/Firebase?
Есть ли другая причина, которая может привести к такой разнице между подсчетами подписчиков и количеством отправленных уведомлений?
@Bob Snyder
Вот как я проверяю версию Google Play Services:
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 относится к среде Mobile + wear, у многих пользователей есть некоторые проблемы с обновлением версии GooglePlayService, поэтому я обычно поддерживаю более низкую версию, чем последняя версия, и обновляю ее только в том случае, если необходимо.
@Jorgesys
My 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.