HOME > ソフテックだより > 第435号(2023年10月4日発行) 技術レポート「AWSとFirebaseによるAndroid端末へのプッシュ通知」

「ソフテックだより」では、ソフトウェア開発に関する情報や開発現場における社員の取り組みなどを定期的にお知らせしています。
さまざまなテーマを取り上げていますので、他のソフテックだよりも、ぜひご覧下さい。

ソフテックだより(発行日順)のページへ
ソフテックだより 技術レポート(技術分野別)のページへ
ソフテックだより 現場の声(シーン別)のページへ


ソフテックだより 第435号(2023年10月4日発行)
技術レポート

「AWSとFirebaseによるAndroid端末へのプッシュ通知」

1. はじめに

今回はタイトルにあります通り、クラウドサービスを用いたAndroidスマートフォン(以下スマホ)へのプッシュ通知についてご紹介したいと思います。
複数のAWSサービスとFCM(Firebase Cloud Messaging)を組み合わせてスマホへのプッシュ通知送信を行います。
とある案件では、以前に『ソフテックだより:第423号 Amazon Cognitoを用いたAPI Gatewayのアクセス管理』でご紹介した内容も組み合わせることでユーザー認証を経たプッシュ通知送信を実現しています。

2. 構成

今回プッシュ通知を実現した構成は以下の通りです。

クリックで拡大
図1. 構成図

@ Lambda関数からAmazon SNSを呼び出します。
実案件では前述の記事内で紹介している技術を使用し、Cognitoと組み合わせたAPI GatewayをLambda関数起動のトリガーとしています。
Lambda関数のトリガーには他のAWSサービスを設定することもできます。
A 予め連携の設定を行っておき、Amazon SNS からFCMに接続します。
B FCMから対象のスマホにプッシュ通知が送信されます。

本記事ではLambda関数から実際にプッシュ通知を送信するまでを簡単にご紹介したいと思います。
動作確認のためにプッシュ通知を受信するスマホアプリが必要ですが、今回はクラウドに主眼をおいているので詳細は割愛させていただきます。

3. FCM設定

3.1 プロジェクト作成

3.1.1 FirebaseページにアクセスしGoogleアカウントでログインします。

3.1.2 「プロジェクトを追加」から作成します。

クリックで拡大
図2. プロジェクトを追加

あとは画面に従って設定していきます。
今回はプロジェクト名を仮にPushTestとして、Googleアナリティクスの設定はオフとしています。

3.2 アプリを追加

3.2.1 作成したプロジェクトの画面からアプリの追加を行います。

クリックで拡大
図3. アプリの追加

3.2.2 パッケージ名を入力します。

クリックで拡大
図4. パッケージ名の入力

スマホアプリで設定しているパッケージ名を入力します。
開発しているスマホアプリのパッケージ名を変更した際は改めてFCMにアプリ追加を行う必要があります。

3.2.3 構成ファイルのダウンロード

クリックで拡大
図5. 構成ファイルのダウンロード

「google-service.json」ファイルをダウンロードしてスマホアプリに組み込みます。

3.2.4 Firebase SDKの追加

クリックで拡大
図6. Firebase SDKの追加

構成ファイルの次の設定はスマホアプリへのFirebase SDKの追加です。
スマホアプリをKotlinやJavaで開発している場合はこちらの画面で表示されているコードをスマホアプリに追加すれば良いです。別の開発環境(FlutterやXamarin等)を用いている場合はそれぞれの対応方法を調査して実装する必要があります。

3.2.5 サーバーキーの確認

クリックで拡大
図7. サーバーキーの確認

FCMプロジェクトの設定からサーバーキーを確認します。
これは後ほどAWS SNSでの設定で必要となります。

これでFCMの設定は終了です。


4. AWS設定

4.1 SNS設定

4.1.1 プッシュ通知の画面からプラットフォームアプリケーションを作成します。

クリックで拡大
図8. プラットフォームアプリケーションの作成@


4.1.2 各入力欄を記入して作成します。

クリックで拡大
図9. プラットフォームアプリケーションの作成A

APIキーにはFCMで確認したサーバーキーを入力します。

4.1.3 作成したプラットフォームアプリケーションのARNを確認します。

クリックで拡大
図10. ARNの確認

このARNは後ほどLambda関数からプッシュ通知送信先の指定に利用します。

4.2 Lambda設定

4.2.1 必要な情報を入力して関数を新規作成します。

クリックで拡大
図11. 関数の作成

重要なのは実行ロールの設定にSNSのアクセス権限を付与することです。権限を付与しないとこの関数からSNSの操作を行えません。ロールはIAMから設定します。

4.2.2 関数の実装

今回は以下のように実装しています。(プログラム言語はPythonを使用しています)

import os
import boto3
import botocore
import json

def lambda_handler(event, context):
    # SNSクライアント、リージョン設定。
    client = boto3.client('sns',region_name='ap-northeast-1')
    
    body_data = event['body']
    device_token = body_data['device_token']
    try:
        # アプリケーションエンドポイント登録
        response_create_platform_endpoint = client.create_platform_endpoint(
            PlatformApplicationArn='arn:aws:sns:ap-northeast-1:XXXXXXXXXXXX:app/GCM/XXXX',(※1)
            Token=device_token
        )
        
        # メッセージデータ作成
        payload = {
            'data': {
	            "title"    : body_data['title'],
	            "message"  : body_data['message']
            }
        }
        push_json_data = json.dumps({
            "GCM": json.dumps(payload)
        })
        
        # プッシュ通知送信
        response_publish = client.publish(
            TargetArn = response_create_platform_endpoint['EndpointArn'],
            Message = push_json_data,
            MessageStructure = 'json'
        )
        
        # アプリケーションエンドポイント削除
        response_delete_endpoint = client.delete_endpoint(
            EndpointArn=response_create_platform_endpoint['EndpointArn']
        )
     
    # その他
    except Exception as e:
        print(str(e))

(※1) 実際は作成したARNを指定してください。
実案件ではもう少し複雑な処理を行っていますが、ここでは単純化しています。
アプリケーションエンドポイントとは送信先を指定するパラメータです。
PlatformApplicationArnは先に作成したプラットフォームアプリケーションのARNを、tokenは送信先のスマホのデバイストークンを表しています。

これで基本的な設定は終了です。

5. テスト送信

実際にLambda関数をテスト動作させてプッシュ通知を送信できるか確認してみます。
テストデータには送信先スマホのデバイストークン、プッシュ通知のタイトルと内容を設定します。
デバイストークンについてはスマホアプリ側で取得する必要があります。

クリックで拡大
図12. テスト送信

「テスト」ボタンで動作させると、

クリックで拡大
図13. 受信できたプッシュ通知

スマホ側でプッシュ通知を受信することができました。

6. おわりに

細かい手順を省略してしまった箇所もありますが、AWSとFCMを組み合わせてAndroidスマートフォンにプッシュ通知を送信する方法をご紹介いたしました。
初めて挑戦したときはなかなかプッシュ通知を送信できずに難航したのですが、1度できてしまえばそう難しくはないはずです。今回はAndroid端末に対する通知機能ですが、iOSでも同じことができるそうなのでいつか試してまたここでご紹介できればと思います。
実案件では既存のPCアプリで検知した異常を、新規開発したスマホアプリにプッシュ通知で連絡することで、PC画面を確認しなくても手元のスマホで内容を確認できるという機能を実現しています。
スマホアプリではプッシュ通知以外の機能も盛り込んでおり、なかなか苦労しているのですがそれはまた別の機会にご紹介できればと思います。

最後までお読みいただきありがとうございました。

(M.M.)


関連ページへのリンク

関連するソフテックだより

ページTOPへ