実装する際に具体的な動作が分からなかったコードを読み解いてみる
FirebaseInstanceId.getInstance().getInstanceId().addOnCompleteListener((task) -> {
if(!task.isSuccessful()){
Log.w("FIREBASE", "getInstanceId failed.", task.getException());
return;
}
String token = (task.getResult() == null) ? "empty" : task.getResult().getToken();
Log.i("FIREBASE", "[CALLBACK] Token = " + token);
});
FirebaseInstanceIdクラスについて
public class FirebaseInstanceId extends Object
オブジェクト型を継承しているクラス
公式の解説によれば
各アプリケーションインスタンスの一意の識別子と、アクションを認証および承認するためのメカニズム(例:FCMメッセージの送信)を提供してくれるらしい
インスタンスIDは以下の場合に失われる可能性があるため注意するべし
1.アプリがインスタンスIDを削除する
2.アプリが新しいデバイスに復元されました ← 可能性としてはこれが高そう
3.ユーザーがアプリをアンインストール/再インストールする ← 可能性としてはこれが高そう
4ユーザーがアプリデータを消去する
インスタンスIDの所有権を証明し、サーバーがアプリに関連付けられているデータまたはサービスにアクセスできるようにするには、getToken(String、String)を呼び出します。ということなので通知を行う際は使うんだろうな...
後で詳しく見ていきましょう
getInstance()メソッド
Firebaseアプリのインスタンスを返すメソッド
返り値 FirebaseInstanceId instance.
getInstanceId()メソッド
このFirebaseプロジェクトのIDと自動的に生成されたトークンを返すメソッド
インスタンスIDが存在しない場合は、インスタンスIDが生成され、
定期的にFirebaseバックエンドに情報が送信されます。
返り値 Taskクラス IDとトークンを保持するInstanceIdResultを介して結果を見るために使用できるタスク。
引数 なし
addOnCompleteLister(OnCompleteListener listener) インターフェース
タスクの完了時に呼び出されるリスナーを追加します。
返り値 this Task
OnCompleteListenerインターフェース
タスクの完了時に呼び出されるリスナーを追加します。
またタスク完了時にOncompleteメソッドを呼び出します
abstract void onComplete(Task task)
λ式
単一の抽象メソッドを持つインターフェースのインスタンスを生成して受け渡す
今回は上記のOnCompleteListerのインスタンスを生成して渡しているようです
つまりaddOncompleteListener((task) -> .....)を書き換えると
以下のようにOnComleteListerインターフェースを実装したクラスを作成します
public class XXXXX implements OnCompleteListener<InstanceIdResult>{
@Override
public void onComplete(@NonNull Task<InstanceIdResult> task){
if(!task.isSuccessful()){
Log.w("FIREBASE", "getInstanceId failed.", task.getException());
return;
}
String token = (task.getResult() == null) ? "empty" : task.getResult().getToken();
Log.i("FIREBASE", "[CALLBACK] Token = " + token);
}
}
addOncompleteListener(new XXXXX());
とすればOKです^^
結果
上手く通知送れました(笑)
注意
この記事は個人的に分からなかったことを整理するために書いているため、同じところで詰まった方の参考になれば幸いです。
まぁ、知らないままでも丸写しすればいいんですけどね(笑)
ちなみに、Java8を使用している人はλ式使えるのでこのまとめ本当に意味ない...