[解決済み] Firebase FCMはonTokenRefresh()を強制的に呼び出します。
質問
GCMからFCMにアプリを移行しています。
新しいユーザーが私のアプリをインストールするときに
onTokenRefresh()
が自動的に呼び出されます。問題は、そのユーザーがまだログインしていない(ユーザーIDがない)ことです。
をトリガーするにはどうしたらよいでしょうか。
onTokenRefresh()
をトリガーするにはどうしたらよいでしょうか?
どのように解決するのですか?
この
onTokenRefresh()
メソッドは、新しいトークンが生成されるたびに呼び出されます。アプリをインストールすると、(あなたが発見したように)すぐに生成されます。また、トークンが変更されたときにも呼び出されます。
によると
FirebaseCloudMessaging
のガイドを参照してください。
通知を特定の1台の端末に絞り込むことができます。アプリの初回起動時に アプリの初回起動時に、FCM SDK はクライアントアプリのインスタンスの登録トークンを生成します。 を生成します。
ソース・リンク https://firebase.google.com/docs/notifications/android/console-device#access_the_registration_token
つまり、トークンの登録はアプリごとということです。ユーザーがログインした後にトークンを利用したいようですね。そこで提案したいのは、トークンを
onTokenRefresh()
メソッドでトークンを内部ストレージまたは共有環境設定に保存します。そして、ユーザーがログインした後にストレージからトークンを取得し、必要に応じてサーバーにトークンを登録します。
もし手動で
onTokenRefresh()
を強制したい場合は、IntentServiceを作成し、トークンのインスタンスを削除することができます。その後、getToken を呼び出すと
onTokenRefresh()
メソッドが再び呼び出されます。
コード例です。
public class DeleteTokenService extends IntentService
{
public static final String TAG = DeleteTokenService.class.getSimpleName();
public DeleteTokenService()
{
super(TAG);
}
@Override
protected void onHandleIntent(Intent intent)
{
try
{
// Check for current token
String originalToken = getTokenFromPrefs();
Log.d(TAG, "Token before deletion: " + originalToken);
// Resets Instance ID and revokes all tokens.
FirebaseInstanceId.getInstance().deleteInstanceId();
// Clear current saved token
saveTokenToPrefs("");
// Check for success of empty token
String tokenCheck = getTokenFromPrefs();
Log.d(TAG, "Token deleted. Proof: " + tokenCheck);
// Now manually call onTokenRefresh()
Log.d(TAG, "Getting new token");
FirebaseInstanceId.getInstance().getToken();
}
catch (IOException e)
{
e.printStackTrace();
}
}
private void saveTokenToPrefs(String _token)
{
// Access Shared Preferences
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = preferences.edit();
// Save to SharedPreferences
editor.putString("registration_id", _token);
editor.apply();
}
private String getTokenFromPrefs()
{
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
return preferences.getString("registration_id", null);
}
}
EDIT
<ブロッククオートFirebaseInstanceIdServiceです。
public class FirebaseInstanceIdService extends Service (パブリッククラス Firebase インスタンスIDサービス)
このクラスは非推奨です。FirebaseMessagingService の onNewToken をオーバーライドすることにしました。それが実装されれば が実装されれば、このサービスは安全に削除できます。
onTokenRefresh()は
非推奨
. 使用方法
onNewToken()
で
MyFirebaseMessagingService
public class MyFirebaseMessagingService extends FirebaseMessagingService {
@Override
public void onNewToken(String s) {
super.onNewToken(s);
Log.e("NEW_TOKEN",s);
}
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
super.onMessageReceived(remoteMessage);
}
}
関連
-
[解決済み】Android 8:クリアテキストのHTTPトラフィックが許可されない
-
[解決済み] Androidのローテーションでアクティビティを再開する
-
[解決済み] Bitmapオブジェクトに画像を読み込む際にOutOfMemoryが発生する問題
-
[解決済み] アプリケーションを終了することは嫌われますか?
-
[解決済み] グリッドレイアウトにおけるフリングジェスチャーの検出
-
[解決済み] 初期テキストが「Select One」のAndroidスピナーを作るには?
-
[解決済み] Firebaseでアプリがバックグラウンドにあるときの通知を処理する方法
-
[解決済み】google-services.jsonで異なるproductFlavorsを指定する場合
-
[解決済み】アプリがバックグラウンドにあるとき、Firebase onMessageReceivedが呼ばれない
-
[解決済み] 通知をクリックした後にアプリケーションを開く
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] FirebaseのFCMトークンとは何ですか?
-
[解決済み] ArrayAdapter<myClass> の使用方法
-
[解決済み] Android Webview - キャッシュを完全に削除する
-
[解決済み] HttpPostによる画像送信
-
[解決済み] CardView layout_width="match_parent "が親のRecyclerViewの幅と一致しない。
-
[解決済み] 非ActivityクラスでContextを取得する [重複].
-
[解決済み] Androidアプリケーションのヒープサイズを大きくするには?
-
[解決済み] APKが署名済みかデバッグビルドかを確認するには?
-
[解決済み] Androidの環境設定。ユーザーが環境設定画面を使用していない場合、デフォルト値を読み込むにはどうすればよいですか?
-
[解決済み] ViewPager2でスワイプを無効にするには?