#android #firebase-cloud-messaging
#Android #firebase-cloud-messaging
Вопрос:
Для тестирования FCM ему нужно только создать FirebaseMessagingService и запустить приложение, токен будет передан ему через его onNewToken (строковый токен). (обязательно нужно создать проект с помощью консоли FCM и загрузить google-service.json).
Вопрос в том, как FCM узнает, что приложение только начинает запускаться, и FCM должен отправить ему токен (как)?
тестовый проект имеет только MainActivity:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
}
и услуга:
public class MyFirebaseMessagingService extends FirebaseMessagingService {
@SuppressLint("LongLogTag")
@Override
public void onNewToken(String token) {
Log.d(TAG, "Refreshed token: " token);
}
@SuppressLint("LongLogTag")
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
Log.d(TAG, "From: " remoteMessage.getFrom());
//...
}
}
плюс добавлены Google-сервисы.json получен из консоли проекта FCM. и в соответствующем build.gradle добавлен плагин apply, следуя инструкции сайта Google FCM:
apply plugin: 'com.google.gms.google-services'
dependencies {
classpath 'com.google.gms:google-services:4.3.3'
и в манифесте:
<service android:name="com.demo.mytestfcmnotificationdemo.MyFirebaseMessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
Ответ №1:
На самом деле это работает наоборот: когда ваше приложение запускается, оно вызывает службы FCM и запрашивает у них, что токен, который у него есть, все еще действителен. Если он больше не действителен, он получает новый токен, а затем вызывает этот onNewToken
обработчик.
Таким образом, FCM не выполняет активное сканирование токенов, которые нуждаются в обновлении, а ожидает, пока устройство свяжется и проверит статус своего токена.
Комментарии:
1. спасибо @Frank! но в моем тестовом проекте нет кода для инициирования вызова FCM, у него есть только служба, созданная FCM (вот в чем вопрос, который у меня есть)? Я обновлю свой вопрос с помощью кода проекта.
2. Когда вы включаете FCM в приложение, службы FCM запрашивают токен. Для этого вам не нужно включать какой-либо пользовательский код.
3. Я думаю, что это та часть, которую я не понимаю. Я регистрирую свое приложение в FCM в их консоли проекта, и в моем приложении есть служба, ожидающая запуска. Как FCM узнает, что мое приложение только запущено, и отправляет в него токен? (После того, как я добавил имя пакета приложения в проект FCM в его консоли, он начинает вращать значок ожидания и говорит что-то вроде ожидания запуска приложения. После запуска моего приложения счетчик останавливается, и мое приложение получает токен). У меня нет кода в приложении, чтобы сделать какой-либо звонок в FCM.
4. Как сказано в моем ответе: FCM не отправляет токен, код FCM в вашем приложении запрашивает его при запуске. Это делается самим FCM SDK, когда вы включаете его в свое приложение, так что это не написанный вами код.
5. спасибо @Frank!, я думаю, это тот самый
apply plugin: 'com.google.gms.google-services'
.