Проблема с получением идентификатора регистрации из Firebase Cloud Messaging [дубликат]

Функция, основанная на классе Xeoncross

function shortly($input){
$dictionary = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','0','1','2','3','4','5','6','7','8','9'];
if($input===0)
    return $dictionary[0];
$base = count($dictionary);
if(is_numeric($input)){
    $result = [];
    while($input > 0){
        $result[] = $dictionary[($input % $base)];
        $input = floor($input / $base);
    }
    return join("", array_reverse($result));
}
$i = 0;
$input = str_split($input);
foreach($input as $char){
    $pos = array_search($char, $dictionary);
    $i = $i * $base + $pos;
}
return $i;
}
28
задан AL. 7 June 2016 в 06:25
поделиться

5 ответов

Что это такое?

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

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


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

Обновление: токен может все еще однако, в соответствии с последней версией 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's servers.
    sendRegistrationToServer(refreshedToken);
}

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

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

38
ответ дан AL. 18 August 2018 в 20:40
поделиться
  • 1
    Когда этот токен FCM генерируется в первый раз? Нужна ли проверка подлинности с использованием firebase, например, хранилища благ? – arunrk 7 June 2016 в 06:25
  • 2
    @arunrk - я рекомендую вам пройти через это: github.com/firebase/quickstart-android/tree/master/messaging – AnhSirk Dasarp 7 June 2016 в 06:42
  • 3
    Спасибо за комментарии! – arunrk 7 June 2016 в 07:16
  • 4
    @AL, мы скоро вернемся к тому, чтобы присвоить этому значению ключ сервера, так как называть его токеном просто вводит больше путаницы. OP здесь явно спрашивал о токенах клиент-устройства, поэтому я не буду говорить о ключе или маркере сервера здесь. – Frank van Puffelen 25 November 2016 в 05:57
  • 5
    @Al Спасибо большое. На самом деле в ios вам нужен токен устройства и токен регистрации, чтобы сделать успешный вызов push-уведомления со стороны сервера. Поэтому мы протестировали его только с помощью токена, полученного в onTokenRefreshed () и tinggg !! это сработало – Adeel Turk 22 March 2017 в 11:06

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

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. Как получить доступ к token
  4. Как настроить firebase
5
ответ дан Community 18 August 2018 в 20:40
поделиться

Они отказались от метода 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);
}
2
ответ дан Manoj Kumar 18 August 2018 в 20:40
поделиться

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

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

3
ответ дан nir 18 August 2018 в 20:40
поделиться

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

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

2
ответ дан stop-cran 18 August 2018 в 20:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: