2017-02-06 2 views
1

Приложение Android недавно перенесено в Firebase. В наших журналах сервера мы видим, что несколько пользователей не имеют действительного токена. Мы также определили, что эти пользователи видят локально запланированные уведомления, но фактически не открывают приложение после обновления.Будет ли генерироваться токен FCM, если пользователь обновит приложение, но не откроет его?

Так поток:

  1. Пользователь имеет версию приложения, которая не использует ТСМ.
  2. Пользователь обновляет свое приложение до версии, использующей FCM, но НЕ открывает приложение.
  3. Пользователь получает локальные уведомления, запланированные с предыдущего действия, но не открывает приложение или не нажимает на эти уведомления.

Мой вопрос: это только ограничение onTokenRefresh#FirebaseInstanceIdService, или мы должны ожидать, что токен будет сгенерирован где-нибудь в этом потоке?

Обратите внимание, что существует служба AlarmManager, которая запускается каждые 15 минут (я не уверен, что это касается жизненного цикла приложения).

+0

ли я понимаю правильно, что ваше приложение содержит сервис вызывается периодически по AlarmManager, и вы знаете, что служба запущена после версии приложения обновление, потому что вы видите «локально запланированные уведомления»? –

+0

Это правильно. Для меня это похоже на то, что «должен» инициировать токен FCM, который будет создан при обновлении приложения. Но я хотел получить мысли других людей. –

+0

Я видел, что сообщения SO, указывающие тревоги, очищаются при обновлении приложения. Мне любопытно как аварийные сигналы вашего приложения сохраняются после обновления. Также обновляется ли ваше приложение из Play Store или какого-либо другого источника? Наконец, вы можете воспроизвести поведение на тестовом устройстве? –

ответ

1

Я не смог воспроизвести описанное вами поведение. Вы верны, ожидая, что выполнение любого компонента вашего приложения: Activity, Service, или BroadcastReceiver, вызовет инициализацию Firebase, включая генерацию токена. В вашем случае вы сообщаете, что запущена служба приложения, вызываемая периодическим сигналом тревоги. Этого должно быть достаточно, чтобы вызвать генерацию токена. Мои тесты (с использованием 10.0.1) подтвердили, что был создан токен, и для этого случая вызвал onTokenRefresh().

Любое упоминание о том, что обработка не происходит до запуска приложения пользователем, предлагает подключение к приложению Stopped State. Если пользователь принудительно остановил ваше приложение, используя «Настройки»> «AppManager» (ваше приложение)> «Force-Stop», а затем приложение было обновлено, приложение остается в состоянии «Остановлено», а генерация маркера не произойдет, пока пользователь не запустит приложение. Но вы сообщаете, что служба сигнализации запущена, что не произойдет, если приложение находится в состоянии Stopped.

Вы можете рассмотреть возможность использования BroadcastReceiver, зарегистрированного в манифесте, для получения ACTION_MY_PACKAGE_REPLACED. Это действие транслируется при обновлении вашего приложения. Выполнение вашего приемника приведет к инициализации Firebase и генерации токена. Мой тест подтвердил это.

FWIW, в моих тестах я использовал эту команду, чтобы имитировать обновление приложения:

> adb install -r /path/to/apk/my-test-app.apk