Подтвердить что ты не робот

Что такое токен FCM в Firebase?

В новой Firebase, в разделе "Уведомление", они упомянули, что разработчик может отправлять уведомления на конкретное устройство. Для этого в консоли он запрашивает токен FCM. Что это точно и как я могу получить этот токен?

4b9b3361

Ответ 1

Что именно?

Токен FCM, или широко известный как registrationToken токен, как в . Как описано в документах GCM FCM:

Идентификатор, выданный серверами соединения GCM клиентскому приложению, который позволяет ему получать сообщения. Обратите внимание, что регистрационные токены должны храниться в секрете.


Как я могу получить этот токен?

Обновление: токен все еще может быть getToken() путем вызова getToken(), однако, согласно последней версии FCM, FirebaseInstanceIdService.onTokenRefresh() был заменен на FirebaseMessagingService.onNewToken() - который в моем опыте функционирует так же, как onTokenRefresh() сделал.


Старый ответ:

Согласно документам FCM:

При первом запуске приложения FCM SDK создает маркер регистрации для экземпляра клиентского приложения. Если вы хотите настроить таргетинг на отдельные устройства или создать группы устройств, вам потребуется доступ к этому токену.

Вы можете получить доступ к значению токена, расширив FirebaseInstanceIdService. Убедитесь, что вы добавили сервис в свой манифест, затем вызовите getToken в контексте onTokenRefresh и запишите значение, как показано:

@Override
public void onTokenRefresh() {
    // Get updated InstanceID token.
    String refreshedToken = FirebaseInstanceId.getInstance().getToken();
    Log.d(TAG, "Refreshed token: " + refreshedToken);

    // TODO: Implement this method to send any registration to your app servers.
    sendRegistrationToServer(refreshedToken);
}

OnTokenRefreshcallback срабатывает всякий раз, когда генерируется новый токен, поэтому вызов getToken в его контексте гарантирует вам доступ к текущему доступному регистрационному токену. FirebaseInstanceID.getToken() возвращает ноль, если токен еще не сгенерирован.

После того, как вы получили токен, вы можете отправить его на сервер приложений и сохранить его, используя ваш предпочтительный метод. См. Ссылку API идентификатора экземпляра для получения полной информации об API.

Ответ 2

Вот простые шаги добавьте этот gradle:

dependencies {
  compile "com.google.firebase:firebase-messaging:9.0.0"
}

Никаких дополнительных разрешений не требуется в манифесте, таком как GCM. Никакой приемник не нужен, чтобы проявить себя как GCM. С помощью FCM автоматически добавляется com.google.android.gms.gcm.GcmReceiver.

Перенос службы прослушивателя

Расширение службы InstanceIDListenerService теперь требуется, только если вы хотите получить доступ к токену FCM.

Это необходимо, если вы хотите

  • Управление токенами устройства для отправки сообщений на одно устройство напрямую или Отправка сообщений группе устройств или
  • Отправка сообщений группе устройств или
  • Подписывать устройства на темы с помощью API управления подписками на сервер.

Добавить службу в манифест

<service
    android:name=".MyInstanceIDListenerService">
    <intent-filter>
        <action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
    </intent-filter>
</service>

<service
    android:name=".MyFirebaseInstanceIDService">
    <intent-filter>
        <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
    </intent-filter>
</service>

Измените MyInstanceIDListenerService на расширение FirebaseInstanceIdService и обновите код, чтобы прослушать обновления токена и получить токен всякий раз, когда генерируется новый токен.

public class MyInstanceIDListenerService extends FirebaseInstanceIdService {

  ...

  /**
   * Called if InstanceID token is updated. This may occur if the security of
   * the previous token had been compromised. Note that this is also called
   * when the InstanceID token is initially generated, so this is where
   * you retrieve the token.
   */
  // [START refresh_token]
  @Override
  public void onTokenRefresh() {
      // Get updated InstanceID token.
      String refreshedToken = FirebaseInstanceId.getInstance().getToken();
      Log.d(TAG, "Refreshed token: " + refreshedToken);
      // TODO: Implement this method to send any registration to your app servers.
      sendRegistrationToServer(refreshedToken);
  }

}

Для получения дополнительной информации посетите

Ответ 3

FirebaseInstanceIdService теперь устарел. вы должны получить токен в методе onNewToken в службе FirebaseMessagingService.

Проверьте документы

Ответ 4

У меня есть обновление о токене Firebase Cloud Messaging, в котором я могу получить информацию.

Я действительно хотел узнать об этом изменении, поэтому просто отправил письмо в службу поддержки. Токен Firebase Cloud Messaging снова вернется к серверному ключу. Ничего не изменится. Мы снова увидим ключ сервера.

Ответ 5

Они отказались от метода getToken() в следующих примечаниях к выпуску. Вместо этого мы должны использовать getInstanceId.

https://firebase.google.com/docs/reference/android/com/google/firebase/iid/FirebaseInstanceId

Task<InstanceIdResult> task = FirebaseInstanceId.getInstance().getInstanceId();
task.addOnSuccessListener(new OnSuccessListener<InstanceIdResult>() {
      @Override
      public void onSuccess(InstanceIdResult authResult) {
          // Task completed successfully
          // ...
          String fcmToken = authResult.getToken();
      }
});

task.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
    // Task failed with an exception
    // ...
}
});

Чтобы справиться с успехом и неудачей в том же слушателе, присоедините OnCompleteListener:

task.addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
@Override
public void onComplete(@NonNull Task<InstanceIdResult> task) {
    if (task.isSuccessful()) {
        // Task completed successfully
        InstanceIdResult authResult = task.getResult();
        String fcmToken = authResult.getToken();
    } else {
        // Task failed with an exception
        Exception exception = task.getException();
    }
}
});

Кроме того, класс FirebaseInstanceIdService устарел, и они придумали метод onNewToken в FireBaseMessagingService в качестве замены для onTokenRefresh,

здесь вы можете ознакомиться с примечаниями к выпуску, https://firebase.google.com/support/release-notes/android

@Override
public void onNewToken(String s) {
    super.onNewToken(s);
    Use this code logic to send the info to your server.
    //sendRegistrationToServer(s);
}