Je suis this pour enregistrer mon appareil dans Firebase
Ici, j'essaie d'afficher et d'enregistrer le jeton de notification
public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {
private static final String TAG = "MyFirebaseIIDService";
@Override
public void onTokenRefresh() {
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
Log.d(TAG, "Refreshed token: " + refreshedToken);
storeToken(refreshedToken);
}
private void storeToken(String token) {
//saving the token on shared preferences
SharedPrefManager.getInstance(getApplicationContext()).saveDeviceToken(token);
}
}
Lorsque j'essaie de l'enregistrer, dit toujours le jeton Token not generated
forme MainActivity
Donc, ici, mon application est connectée à Firebase .. et je sais que FirebaseInstanceIdService
est obsolète, j'ai également essayé avec ceci
public class MyFirebaseInstanceIDService extends FirebaseMessagingService {
private static final String TAG = "MyFirebaseIIDService";
@Override
public void onNewToken(String refreshedToken) {
refreshedToken = FirebaseInstanceId.getInstance().getInstanceId().getResult().getToken();
Log.d(TAG, "Refreshed token: " + refreshedToken);
storeToken(refreshedToken);
}
private void storeToken(String token) {
//saving the token on shared preferences
SharedPrefManager.getInstance(getApplicationContext()).saveDeviceToken(token);
}
}
Mais toujours le même jeton n'est pas généré
Ajoutez simplement ceci dans votre code ..
public class MyActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
SharedPreferences prefs = getSharedPreferences("TOKEN_PREF", MODE_PRIVATE);
String token = prefs.getString("token", "");
Log.e("NEW_INACTIVITY_TOKEN", token);
if (TextUtils.isEmpty(token)) {
FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener(MyActivity.this, new OnSuccessListener<InstanceIdResult>() {
@Override
public void onSuccess(InstanceIdResult instanceIdResult) {
String newToken = instanceIdResult.getToken();
Log.e("newToken", newToken);
SharedPreferences.Editor editor = getSharedPreferences("TOKEN_PREF", MODE_PRIVATE).edit();
if (token!=null){
editor.putString("token", newToken);
editor.apply();
}
}
});
}
}
}
Les jetons Firebase sont appelés une fois lorsque l'application est installée et exécutée pour la première fois, donc ignorez l'enregistrement des données ou l'exécution de cette activité/service une fois que les données sont enregistrées avec des préférences partagées
La méthode onTokenRefresh
/onNewToken
ne sera appelée que lorsqu'un nouveau jeton est généré.
Très souvent (en particulier pendant le développement), votre application a déjà généré un jeton ID d'instance avant d'ajouter le service. Ainsi, onTokenRefresh
/onNewToken
ne sera pas appelé et vous n'aurez pas de jeton dans vos préférences partagées.
Pour cette raison, vous devez obtenir le jeton directement de votre activité principale avec FirebaseInstanceId.getInstance().getInstanceId()
comme indiqué dans documentation . Cela récupérera le dernier jeton généré. À partir de là, vous utilisez onTokenRefresh
/onNewToken
pour répondre aux modifications du jeton .
Peut-être qu'il faut un certain temps pour générer un jeton. Si vous ne l'obtenez pas, vous pouvez le générer comme suit: (Référence: https://firebase.google.com/docs/cloud-messaging/Android/client?authuser= )
FirebaseInstanceId.getInstance().getInstanceId()
.addOnCompleteListener(new OnCompleteListener<InstanceIdResult>()
{
@Override
public void onComplete(@NonNull Task<InstanceIdResult> task)
{
if (!task.isSuccessful()) {
Log.w(TAG, "getInstanceId failed",
task.getException());
return;
}
// Get new Instance ID token
String token = task.getResult().getToken();
//Here you will surely get the token so store it in
//sharedpreference for future use
}
});
Essayez cela, désinstallez et réinstallez l'application car le jeton n'est pas généré à chaque fois que vous jouez l'application. Il est généré lorsque vous effacez sharePref ou réinstallez.
Pas besoin d'utiliser getToken()
nouveau jeton déjà retourné par l'argument onNewToken
@Override
public void onNewToken(String refreshedToken) {
// No need to assign refreshedToken with getToken,
// this method called when token refreshed then use returned refreshedToken directly,
// use `instanceIdResult.getToken()` described below when you need to use token later throw app usage.
// refreshedToken = FirebaseInstanceId.getInstance().getInstanceId().getResult().getToken();
Log.d(TAG, "Refreshed token: " + refreshedToken);
storeToken(refreshedToken);
}
getToken (); est également déconseillé
Obtenez un jeton dans votre activité: .getToken (); est également déconseillé si vous devez obtenir un jeton dans votre activité, puis utilisez comme suit:
FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener( MyActivity.this, new OnSuccessListener<InstanceIdResult>() {
@Override
public void onSuccess(InstanceIdResult instanceIdResult) {
String newToken = instanceIdResult.getToken();
Log.e("newToken",newToken);
}
});