Как стать автором
Обновить

Комментарии 18

НЛО прилетело и опубликовало эту надпись здесь
Подскажите как быть со старой аналитикой?
Она же так же через json настраивается.
Может от старой вообще отказаться?
Гугл рекомендует плавно переезжать.
В Firebase тоже есть аналитика и судя по описанию возможностей даже больше.
Но честно: пока не копал :)
Буквально сегодня подключал FireBase — при создании проекта можно импортировать существующее приложение — оно автоматически подтянет настройки Google Аналитики и ДОпишет идентификатор в json файл настроек — в итоге работает и старая аналитика и новая.

Но пришлось повозиться с управлением проектами (их полный перечень можно найти в https://console.developers.google.com/iam-admin).
Привязал приложение через Admob (автоматически создает проект в firebase). У меня возникла проблема: зависание после внедрения firebase analytics в момент вызова intent-а Galery (точнее уже после выбора изображения). Убираю firebase analytics — все работает. Экспериментировал только на эмуляторе. А как у Вас?
Еще, не знаете ли можно ли безболезненно удалить проект из firebase? — очень уж страшное предупреждение.
Я случайно приимпортировал проект к другому аккаунту. Пришлось удалить. Тоже напугало такое предупреждение, но решил, что смогу приимпортировать заново к другому аккаунту. Фиг. Не получается. Решил проблему так:

— проекты сразу не удаляются, а висят еще неделю в консоли AIM
— я восстановил все проекты, которые нужны и уже вытянули всю статистику
— там же. в AIM консоли добавил все рабочие аккаунты в перечень владельцев, и потом переключив пользователя, убрал права у изначального пользователя-инициатора проекта
— таким образом у необходимого пользователя собрал все проекты после импорта. Пустые дубликаты висят в списке на удаление.

Интересно, что если после удаления проекта (после удачного импорта) повторно импортировать не получается — только создать. Но при этом выдаются новые id приложения, никак автоматически приложения не увязываются c Google Developer Console и Google Analytics.
Поэтому если проект уже приимпортирован рабочий, осторожно — не удаляйте. Просто уберите из json лишнюю аналитику и настройки FireBase сбора данных.

Тестировал аналитику на устройствах — проблем с файловыми интентами не заметил. Но без разрешения для проекта в AIM консоли на отсылку отчетов о крашах «Mobile Crash Analytics» отказывался их слать в FireBase.

P.S. Может вы нашли — в гугл аналитике очень удобно смотреть выкладку «в текущий момент — пользователи/экраны/устройства». В FireBase не нашел. Да и на первый взгляд меньше возможностей, несмотря на новые встроенные триггеры из приложения — удалено/сброс данных/устройство обновилось/первый запуск. Так и задумано?
Спасибо за развернутый ответ. Похоже, лучше проект не удалять.
В firebase-аналитике мне понравилась возможность UserProperty и расширение отправки информации с events (Bundle).
К сожалению, плотно с firebase пока не было времени разбираться. Завел туда приложение только для эксперимента с внедрением. Кстати, после возвращения на GA (с залитием соответсвующего json), проблема у меня не исчезла. Пока пришлось отключить аналитику.
Может дело в обновленной библиотек аналитики и сервисов 9.0.*. Я использую 9.0.1 — буквально вчерашняя версия. Пробовали откатится или обновить до последней?
В общем, сам виноват. Нашел ответ на stackoverflow. Заменил «com.google.android.gms:play-services:9.0.1» на только необходимые.
По поводу смены иконки: насколько я понял, параметр icon в API аналогичен setSmallIcon в Notification.Builder, и какого-либо способа задать LargeIcon нет. Однако я также обнаружил, что если в запросе к API нет объекта notification, то onMessageReceived срабатывает даже если приложение находится в фоне
Да, все правильно. Если нужно всегда обрабатывать с помощью onMessageReceived, то нужно посылать Data-сообщения.
Спасибо за дополнение!
Еще нужно упомянуть про различия в работе FCM когда приложение работает в foreground и background.

Когда вы используете FCM вам нужен сервис, который будет отвечать за прием сообщений (callback — https://developers.google.com/cloud-messaging/android/android-migrate-fcm#update_your_instanceidlistenerservice)


public class MyFcmListenerService extends FirebaseMessagingService {
  @Override
  public void onMessageReceived(RemoteMessage message){
    String from = message.getFrom();
    Map data = message.getData();
  }
  ...
}



И как только отработает этот метод, мы можете сформировать нотификацию.
NotificationCompat.Builder mBuilder =
        new NotificationCompat.Builder(this)
        .setSmallIcon(R.drawable.notification_icon)
        .setContentTitle("My notification")
        .setContentText("Hello World!");



Когда ваше приложение запущено(работает) и для отправки уведомлений вы используете — <a href=«https://console.firebase.google.com/?pli=1»
Все работает прекрасно: метод onMessageReceived отрабатывает и вы видете свое кастомизированные уведомление.

Но стоит вам свернуть приложение и проделать все тоже самое — никакой вибрации, никакого звука уведомлений вы не увидете. Мало того, если будет использован android 5 и выше увидете белый квадрат, в статус баре, т.к. андройд возьмет иконку вашего приложения и зальет ее белым цветом.
В такой ситуации метод onMessageReceived не отрабатывает =(

Решение оказалось простым — <a href=«https://firebase.google.com/docs/cloud-messaging/downstream#sending_topic_messages_from_the_server
Для тестирования можно воспользоваться fiddler2

https://fcm.googleapis.com/fcm/send
Content-Type:application/json
Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA

{ "data": {
    "score": "5x1",
    "time": "15:10"
  },
  "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1..."
}


Где — Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA, можно взять из google-service.json
»to": «bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...» — это токен вашего устройства, который получается из метода — onTokenRefresh() из сервиса FirebaseInstanceIdService — https://developers.google.com/cloud-messaging/android/android-migrate-fcm#update_your_instanceidlistenerservice
Именно об этом я и писал в конце поста :)

Но давайте будем честны, в GCM ровно такое же поведение: если приложение в foreground — onMessageReceived, если в background или убито, то сообщение направляется в Notification center.

В FCM это можно обойти, если отправлять data-сообщение, как раз как в вашем примере.
Из консоли сейчас отправляются notification-сообщения.
Должен заметить, что строгого разделения на data-сообщения и notification-сообщения нет. В консоли Firebase при создании нового сообщения можно задать пользовательские данные, которые передаются как data в дополнение к notification. Через API также можно отправлять сообщение с data и notification одновременно.

Однако убрать notification при отправке через консоль все равно пока нельзя
Да, консоль пока строго notification. Обещают вскоре поправить :)
data-сообщения в Android также прекрасно (независимо от статуса приложения) обрабатывается в onMessageReceived и для GCM.
Спасибо! Эх где вы были недельку назад?! :)
PS: еще не сразу понял как создавать topic, в Firebase console есть опция отправить через topic, но создать — увы! Решается все просто: в приложении подписываемся на топик с нужным именем (как в стандартном примере) и вуаля через сутки он появляется в Firebase console.
Вот в целом и все, что вам нужно знать чтобы попробовать новые push уведомления.

Что-то 2020 год не задался. Конец августа, хакнули этот Ваш Гугль. Push мусорит с утра.
«FCM Messages» присылает полную чушь всем подряд.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации