gcmトークンがサーバーに送信されたかどうかを示す共有フラグに1つのフラグを維持しています。私が1つのメソッドsendDevicetokenToServerを呼び出すたびに、スプラッシュ画面で。このメソッドは、ユーザIDが空でないかどうかをチェックし、gcmがステータスを送信してからトークンをサーバに送信します。
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());
}
});
}
}
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);
}
ちょうどあなたの 'MainActivity'の'のonCreate() ''でFirebaseInstanceId.getInstance()。入手トークンを() 'を呼び出します。またはアクティビティのどこにいてもそれが必要になると思います。 –
ログによれば、私の 'FirebaseInstanceIdService'実装はアプリケーション起動時にトークンを生成します。私がこれを防ぐ方法はありますか? – Bravo
申し訳ありません。私は少し混乱しています。あなたは 'FirebaseInstanceIdService.onTokenRefresh()'を参照していますか? –