Откуда и когда извлекается токен и когда он доступен?
Маркер генерируется службой идентификатора экземпляра FCM в фоновом режиме, которая запускается при запуске приложения. Детали того, как генерируется токен, неясны, но, насколько я понимаю, устройству необходимо приличное подключение к Интернету, чтобы оно могло взаимодействовать с серверами FCM для токена.
Это синхронный вызов к серверу Firebase?
Технически говоря, нет. Как указано в документах :
FirebaseInstanceID.getToken()
возвращает ноль, если токен еще не сгенерирован.
В настоящее время, если токен нулевой, вы должны ожидать триггер в вашем onNewToken()
, где вы могли бы затем вызвать getToken()
, который теперь должен содержать токен.
Если я позвоню слишком рано в жизненном цикле приложения, возможно, оно еще не заполнено?
Обычно нормально вызывать getToken()
как можно скорее - в MainActivity вашего приложения - в большинстве случаев, когда ваше приложение достигает этой точки, оно уже имеет значение. Но опять же, вы все равно должны обращаться с ним правильно, если он нулевой.