Je suis les instructions sur https://firebase.google.com/docs/ cloud-messaging / android / client pour configurer l'application Firebase Cloud Messaging Client sur Android. J'ai déjà modifié le manifeste de mon application pour inclure les services MyFirebaseMessagingService et MyFirebaseInstanceIDService. J'essaie maintenant d'accéder au jeton d'enregistrement de l'appareil. Voici le contenu de mon fichier MyFirebaseInstanceIDService.java (code obtenu à partir de https://github.com/firebase/quickstart-android/blob/master/messaging/app/src/main/java/com/ google / firebase / quickstart / fcm / MyFirebaseInstanceIDService.java):

/**
 * Copyright 2016 Google Inc. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.[myapp];
import android.util.Log;
import com.google.firebase.iid.FirebaseInstanceId;
import com.google.firebase.iid.FirebaseInstanceIdService;
public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {
    private static final String TAG = "MyFirebaseIIDService";
    /**
     * Called if InstanceID token is updated. This may occur if the security of
     * the previous token had been compromised. Note that this is called when the InstanceID token
     * is initially generated so this is where you would 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);
        // If you want to send messages to this application instance or
        // manage this apps subscriptions on the server side, send the
        // Instance ID token to your app server.
        sendRegistrationToServer(refreshedToken);
        // TODO: Implement this method to send any registration to your app's servers.
        System.out.println("Registration.onTokenRefresh TOKEN: " + refreshedToken );
    }
    // [END refresh_token]
    /**
     * Persist token to third-party servers.
     *
     * Modify this method to associate the user's FCM InstanceID token with any server-side account
     * maintained by your application.
     *
     * @param token The new token.
     */
    private void sendRegistrationToServer(String token) {
        // TODO: Implement this method to send token to your app server.
    }
}

Puisque j'utilise Log.d(TAG, "Refreshed token: " + refreshedToken);, je m'attendais à voir le jeton du moniteur Android dans Android Studio, mais je ne peux pas le voir. Savez-vous ce que je dois faire pour que la méthode onTokenRefresh() soit appelée afin que FirebaseInstanceId.getInstance().getToken() soit exécutée et que le jeton puisse être généré? Je vous remercie.

0
Jaime Montoya 27 nov. 2017 à 19:46

3 réponses

Meilleure réponse

J'ai simplement dû l'utiliser dès la première activité de mon application:

@Override
protected void onCreate(Bundle savedInstanceState) {
    // Get token
    String token = FirebaseInstanceId.getInstance().getToken();
    System.out.println("Token obtained from [MyFirstActivity].java: "+token+" Token received successfully.");
}

Dans le moniteur Android, je pouvais voir quelque chose de similaire à ceci:

11-27 11:08:49.213 10730-10730/com.[myapp] I/System.out: Token obtained from [MyFirstActivity].java: f95EVa9yfbo:APA91bFm56ZuQLWYSDDgPlkf4a88Lu6Gp4DoXVDJ5dRIlnjDncq0UdNnlSi7wxbbut6YX7Z1kmvyS3bzk_Zrl-1doHCw5XFeOXTthNzo4sXASWqQjHdfuA3pH3Js4wlbf_CnRkw5Mzao Token received successfully.

-1
Jaime Montoya 27 nov. 2017 à 17:13

Avez-vous enregistré le service dans votre manifeste? Cela se produit généralement automatiquement lorsque vous utilisez Android Studio, mais assurez-vous qu'il est là comme décrit dans le référence

1
A. Kuchinke 27 nov. 2017 à 17:20

onTokenRefresh est appelé uniquement lorsque le jeton est mis à jour. Vous devriez le demander avec FirebaseInstanceId.getInstance().getInstanceId(). FirebaseInstanceId.getInstance().getToken() est obsolète et bloquant - donc, l'appeler depuis onCreate est vraiment une mauvaise idée car cela introduira une suspension sur le thread principal / ui

1
Michael Sotnikov 13 déc. 2019 à 12:41
47515908