「ソフテックだより」では、ソフトウェア開発に関する情報や開発現場における社員の取り組みなどを定期的にお知らせしています。
さまざまなテーマを取り上げていますので、他のソフテックだよりも、ぜひご覧下さい。
ソフテックだより(発行日順)のページへ
ソフテックだより 技術レポート(技術分野別)のページへ
ソフテックだより 現場の声(シーン別)のページへ
今回はタイトルにあります通り、クラウドサービスを用いたAndroidスマートフォン(以下スマホ)へのプッシュ通知についてご紹介したいと思います。
複数のAWSサービスとFCM(Firebase Cloud Messaging)を組み合わせてスマホへのプッシュ通知送信を行います。
とある案件では、以前に『ソフテックだより:第423号 Amazon Cognitoを用いたAPI Gatewayのアクセス管理』でご紹介した内容も組み合わせることでユーザー認証を経たプッシュ通知送信を実現しています。
今回プッシュ通知を実現した構成は以下の通りです。
@ Lambda関数からAmazon SNSを呼び出します。
実案件では前述の記事内で紹介している技術を使用し、Cognitoと組み合わせたAPI GatewayをLambda関数起動のトリガーとしています。
Lambda関数のトリガーには他のAWSサービスを設定することもできます。
A 予め連携の設定を行っておき、Amazon SNS からFCMに接続します。
B FCMから対象のスマホにプッシュ通知が送信されます。
本記事ではLambda関数から実際にプッシュ通知を送信するまでを簡単にご紹介したいと思います。
動作確認のためにプッシュ通知を受信するスマホアプリが必要ですが、今回はクラウドに主眼をおいているので詳細は割愛させていただきます。
あとは画面に従って設定していきます。
今回はプロジェクト名を仮にPushTestとして、Googleアナリティクスの設定はオフとしています。
構成ファイルの次の設定はスマホアプリへのFirebase SDKの追加です。
スマホアプリをKotlinやJavaで開発している場合はこちらの画面で表示されているコードをスマホアプリに追加すれば良いです。別の開発環境(FlutterやXamarin等)を用いている場合はそれぞれの対応方法を調査して実装する必要があります。
これでFCMの設定は終了です。
今回は以下のように実装しています。(プログラム言語は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は送信先のスマホのデバイストークンを表しています。
これで基本的な設定は終了です。
実際にLambda関数をテスト動作させてプッシュ通知を送信できるか確認してみます。
テストデータには送信先スマホのデバイストークン、プッシュ通知のタイトルと内容を設定します。
デバイストークンについてはスマホアプリ側で取得する必要があります。
「テスト」ボタンで動作させると、
スマホ側でプッシュ通知を受信することができました。
細かい手順を省略してしまった箇所もありますが、AWSとFCMを組み合わせてAndroidスマートフォンにプッシュ通知を送信する方法をご紹介いたしました。
初めて挑戦したときはなかなかプッシュ通知を送信できずに難航したのですが、1度できてしまえばそう難しくはないはずです。今回はAndroid端末に対する通知機能ですが、iOSでも同じことができるそうなのでいつか試してまたここでご紹介できればと思います。
実案件では既存のPCアプリで検知した異常を、新規開発したスマホアプリにプッシュ通知で連絡することで、PC画面を確認しなくても手元のスマホで内容を確認できるという機能を実現しています。
スマホアプリではプッシュ通知以外の機能も盛り込んでおり、なかなか苦労しているのですがそれはまた別の機会にご紹介できればと思います。
最後までお読みいただきありがとうございました。
(M.M.)
関連ページへのリンク
関連するソフテックだより