0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Firebaseを用いてAndroidAppに通知を実装する際の悩み

Posted at

実装する際に具体的な動作が分からなかったコードを読み解いてみる

    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を使用している人はλ式使えるのでこのまとめ本当に意味ない...

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?