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

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

5 ответов


что это такое?

маркер FCM, или широко известный как registrationToken как и в google-облако-обмен сообщениями. Как описано в GCM docs:

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


как я могу сделать это токен?

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


ответ:

на FCM docs:

при первоначальном запуске приложения 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's servers.
    sendRegistrationToServer(refreshedToken);
}

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

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


вот простые шаги добавьте этот 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's servers.
      sendRegistrationToServer(refreshedToken);
  }

}

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

  1. как импортировать бывшие проекты GCM в Firebase
  2. как заставить маркер
  3. как получить доступ маркер
  4. как настроить firebase

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

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


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

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


они устарели метод 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);
}