Javaから、FirebaseのMessagingでpush通知を送る方法

こんにちは。 エキサイト株式会社の三浦です。

アプリにpush通知を送る方法はいくつかありますが、FirebaseのMessaingはその中でも比較的簡単な方法の1つです。

今回は、Java・Spring Bootを使用して、Firebase Messaging経由でアプリにpush通知を送信する方法を紹介します。

事前準備

まずは事前準備として、認証用の秘密鍵を取得します。

Firebaseのコンソールの「プロジェクトの設定」を開きます。

プロジェクトの設定を開く

「サービスアカウント」のタブに移り、「新しい秘密鍵の生成」を行います。

サービスアカウントタブ

なお、この時まだサービスアカウントが作られていない場合は、まず「サービスアカウントを作成」を行ってください。

秘密鍵がダウンロードできたら準備完了です。

なお、これ以外にもアプリ側でpush通知を受け取れるように準備する必要がありますが、今回はサーバ側のみに焦点を当てるため省略します。

アプリケーションコード実装

ではここから、実際にコードを組んでいきます。

まずはSDKをダウンロードします。 今回はGradleを使います。

implementation 'com.google.firebase:firebase-admin:9.1.1'

続いて、Firebaseの初期化を行います。

今回は @Configuration を使って初期化します。

@Configuration
public class FirebaseConfig {
    /**
     * Firebaseの初期化
     *
     * @throws IOException サービスアカウントキーの読み込みに失敗した場合
     */
    @Bean
    public void initFirebase() throws IOException {

        // ダウンロードした秘密鍵。ファイルとして読み込む方法でも可能
        final String serviceAccountKeyString = "***";
        final InputStream serviceAccountKey = new ByteArrayInputStream(serviceAccountKeyString.getBytes(StandardCharsets.UTF_8));

        // 秘密鍵を使ってFirebaseを初期化する
        final FirebaseOptions options = FirebaseOptions.builder()
                .setCredentials(GoogleCredentials.fromStream(serviceAccountKey))
                .build();

        FirebaseApp.initializeApp(options);
    }
}

あとは実際に通知を送るだけです。

public class SamplePushController {

    public void sendPush() throws FirebaseMessagingException {
        // 送信メッセージを作成
        Message message = Message.builder()
                .putData("sample_data", "sample") // アプリ側に送信したいデータを設定
                .putData("sample_data2", "sample2") // 複数設定可能
                .setNotification( // 通知で表示したいデータを設定
                        Notification.builder()
                                .setBody("通知本文")
                                .build()
                )
                .setTopic("sample-topic") // ユーザが購読したトピックに送信
                // .setToken("***") // 個別デバイスに送信することも可能
                .build();

        // 送信
        FirebaseMessaging.getInstance().send(message);
    }
}

これで通知が送信できます。

なお上記で記述した以外に、一度に複数トピック・ユーザに送信できたり、iOSAndroidで別の内容を送ることも出来たりなど色々な設定項目が存在します。

ぜひ公式ドキュメントを見てみてください。

最後に

push通知は、ユーザのエンゲージメントを上げるために有効な手段です。

Firebase Messagingを使って、ぜひ試してみてください!