Sto mantenendo un flag in pref condiviso che indica se il token gcm è stato inviato al server o meno. Nella schermata Splash ogni volta che chiamo un metodo sendDevicetokenToServer. Questo metodo controlla se l'id utente non è vuoto e lo stato di invio gcm quindi invia token al server.
public static void sendRegistrationToServer(final Context context) {
if(Common.getBooleanPerf(context,Constants.isTokenSentToServer,false) ||
Common.getStringPref(context,Constants.userId,"").isEmpty()){
return;
}
String token = FirebaseInstanceId.getInstance().getToken();
String userId = Common.getUserId(context);
if(!userId.isEmpty()) {
HashMap<String, Object> reqJson = new HashMap<>();
reqJson.put("deviceToken", token);
ApiInterface apiService =
ApiClient.getClient().create(ApiInterface.class);
Call<JsonElement> call = apiService.updateDeviceToken(reqJson,Common.getUserId(context),Common.getAccessToken(context));
call.enqueue(new Callback<JsonElement>() {
@Override
public void onResponse(Call<JsonElement> call, Response<JsonElement> serverResponse) {
try {
JsonElement jsonElement = serverResponse.body();
JSONObject response = new JSONObject(jsonElement.toString());
if(context == null){
return;
}
if(response.getString(Constants.statusCode).equalsIgnoreCase(Constants.responseStatusSuccess)) {
Common.saveBooleanPref(context,Constants.isTokenSentToServer,true);
}
}catch (Exception e){
e.printStackTrace();
}
}
@Override
public void onFailure(Call<JsonElement> call, Throwable throwable) {
Log.d("", "RetroFit2.0 :getAppVersion: " + "eroorrrrrrrrrrrr");
Log.e("eroooooooorr", throwable.toString());
}
});
}
}
In classe MyFirebaseInstanceIDService
@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.
Common.saveBooleanPref(this,Constants.isTokenSentToServer,false);
Common.sendRegistrationToServer(this);
}
fonte
2016-09-29 12:51:10
Basta chiamare il FirebaseInstanceId.getInstance(). ControllaToken '()' nel vostro '' onCreate di MainActivity'() '. O ovunque nell'Attività pensi di averne bisogno. –
Secondo i registri, la mia implementazione 'FirebaseInstanceIdService' genera token all'avvio dell'applicazione. C'è un modo per impedirlo? – Bravo
Siamo spiacenti. Sono un po 'confuso.Ti riferisci a 'FirebaseInstanceIdService.onTokenRefresh()'? –