[解決済み] Firebase Cloud Messaging - ログアウトの処理
質問
ユーザーが私のアプリケーションからログアウトし、デバイスへの通知を受け取らないようにしたい場合、どのように対処すればよいでしょうか。
私は
FirebaseInstanceId.getInstance().deleteToken(FirebaseInstanceId.getInstance().getId(), FirebaseMessaging.INSTANCE_ID_SCOPE)
しかし、私はまだ私のデバイスの
registration_id
.
また、これが削除すべきトークンであることを確認しました。
FirebaseInstanceId.getInstance().getToken(FirebaseInstanceId.getInstance().getId(), FirebaseMessaging.INSTANCE_ID_SCOPE)
または単に
FirebaseInstanceId.getInstance().getToken()
).
また、試しに
FirebaseInstanceId.getInstance().deleteInstanceId()
も試しましたが、次に
FirebaseInstanceId.getInstance.getToken
を呼び出すと、null を受け取ります (2回目では動作します)。
私は推測します、後に
deleteInstanceId
をすぐに呼び出すことができます。
getToken()
を呼び出すこともできますが、ハックされているように見えます。また、そこに
この答え
があり、それはすべきではないと述べていますが、それは明らかに動作しないトークンの削除を提案しています。
では、これを処理するための正しい方法は何でしょうか?
どのように解決するのか?
なるほど、なんとか検証してみたところ、以下のような結論になりました。
-
deleteToken()
の対になるものです。getToken(String, String)
に対してではなくgetToken()
.
渡すSender IDが異なるSender ID(google-services.jsonで確認できるのと同じIDではない)場合にのみ動作します。例えば、異なるサーバーからアプリへの送信を許可したい場合、以下のように呼び出します。
getToken("THEIR_SENDER_ID", "FCM")
を呼び出し、それらに
認可
を付与し、アプリに送信します。これは、その特定の送信者にのみ対応する別の登録トークンを返します。
将来、もしあなたが彼らの
認証
を削除した場合、アプリに送信するために
deleteToken("THEIR_SENDER_ID", "FCM")
. これは対応するトークンを無効にし、Senderがメッセージを送信しようとすると、意図した動作として、彼らは
NotRegistered
エラーが発生します。
-
自分自身のSenderのトークンを削除するためには、正しい処理として
deleteInstanceId()
.
特筆すべきはこれ 回答者: @Prince 特に、このコードサンプルは私を助けてくれました。
すでに @MichałK さんの投稿で行っているように、このコードで
deleteInstanceId()
,
getToken()
は、新しいトークンのリクエストを送信するために呼び出される必要があります。しかし、2回目に呼び出す必要はありません。ということは
onTokenRefresh()
onNewToken()
が実装されていれば、自動的に新しいトークンを提供するトリガーがかかるはずです。
略して
deleteInstanceId()
>
getToken()
> チェック
onTokenRefresh()
onNewToken()
.
ノート
: 呼び出し
deleteInstanceId()
を呼び出すと、自分のアプリのトークンが削除されるだけではありません。トピック サブスクリプションと、アプリ インスタンスに関連付けられたその他のすべてのトークンが削除されます。
あなたが呼び出しているのは
deleteToken()
を正しく呼び出していますか?audienceの値は、(あなたがリンクした私の回答からもわかるように) "アプリサーバーの送信者IDに設定"であるべきです。あなたが渡している
getId()
の値を渡していますが、これはSender IDと同じではありません(アプリのインスタンスIDの値が含まれています)。また、どのようにメッセージを送信していますか (App Server または Notifications Console)?
getToken()
と
getToken(String, String)
は異なるトークンを返します。私の答えを参照してください
ここで
.
また
FirebaseInstanceId.getInstance().deleteInstanceId()
を呼び出したが、次に
FirebaseInstanceId.getInstance.getToken
null を受け取ります (2回目では動作します)。
を呼び出しているからでしょう。
getToken()
を呼び出すと、まだ生成中です。意図した動作になっているだけです。
推測するに
deleteInstanceId
をすぐに呼び出すことができます。getToken()
を再び呼び出すことができますが、ハックされているように見えます。
そうではありません。新しく生成された(すでに生成されていることが前提ですが)トークンを取得する方法です。だから、大丈夫だと思います。
関連
-
[解決済み] Firebaseでアプリがバックグラウンドにあるときの通知を処理する方法
-
[解決済み】Firebase Console を使用せずに Firebase Cloud Messaging 通知を送信するには?
-
[解決済み] AndroidにおけるViewPager2の適切な実装
-
[解決済み] アプリ内課金テスト:android.test.purchased already owned
-
[解決済み] FloatingActionButtonのサンプルとサポートライブラリ
-
[解決済み] データベースでリサイクルビューを使用する
-
[解決済み] グリッドビューの高さが削減される
-
[解決済み] PendingIntentの "requestCode "は何に使うのですか?
-
[解決済み] サポートライブラリのアクションバーをPreferenceActivityに追加するには?
-
[解決済み] google-services.jsonって実際何してるの?
最新
-
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トークンとは何ですか?
-
[解決済み] プログラムでソフトキーボードを開く
-
[解決済み] Android - タイトルバーに戻るボタンが表示される
-
[解決済み] Androidでマイナスマージンを使用するのは悪いことですか?
-
[解決済み] 非ActivityクラスでContextを取得する [重複].
-
[解決済み] Androidアプリケーションのヒープサイズを大きくするには?
-
[解決済み] Android StudioからADBを手動で再起動する方法
-
[解決済み] アンドロイドのdatepickerダイアログで最大の日付を設定するには?
-
[解決済み] ブルートゥースアプリケーションのテストにアンドロイドエミュレータを使用するには?
-
[解決済み] Firebase FCMはonTokenRefresh()を強制的に呼び出します。