ここでは、AWS SNSを利用したPush Notificationについて紹介します。具体的には次の手順で設定することになりますが、一部の設定方法については、割愛します。
- Apple Dev WebコンソールでPush Notification用のiOS Credentialを作成する
- 作成されたCredentialをMacのキーツールチェーンにインストールする
- インストールしたCredentialのパブリックキーを.p12形式でexportする
- AWS SNSでtopicを作成する
- AWS SNSでアプリケーションを作成する (.p12ファイルをアップロードする)
- AWS SNSのアプリケーション内にエンドポイントを作成する (デバイスからtoken idの取得が必要)
まず、Apple Developerコンソールでの設定については、下記を参考にしてください。
また、AWSのコンソール上での設定については、下記のサイトが参考になると思いますので、ここでは割愛します。
ここで、エンドポイントを作成する際、device idが必要になります。その値はデバイス毎に異なり、また、インストール毎にも異なります。そのため、通常は初回アクセス時にアプリから直接取得して、サービス側で記憶しておきます。
ここでは、説明を簡略化するため、device idの取得方法についてだけ紹介し、設定はAWSコンソールにログインして、手動で入力することを想定します。
device idの取得方法
今回はReact Native向けのpush notification用ライブラリであるreact-native-push-notificationを利用します。
次の行をApp.jsに追加することでtokenの値がコンソールに表示され、それがdevice idを示しています。
const PushNotification = require('react-native-push-notification'); PushNotification.configure({ onRegister: function(token) { console.log( 'TOKEN:', token ); }, requestPermissions: true, });
メッセージフォーマットについて
次にSNSで送信するメッセージのフォーマットについて紹介します。SNSからメッセージを送信する場合、明確にAndroid向けとiOS向けを記述する必要があります。例えば、次のように記述すると、iOS向けのメッセージとなります。
const AWS = require('aws-sdk'); const sns = new AWS.SNS({apiVersion: '2010-03-31'}); const message = JSON.stringify({ aps: { alert: { title: 'title', body: 'body' } }, extraData: 'extra', }); const data = { Message: JSON.stringify({ payloadKey: 'APNS', APNS: message, APNS_SANDBOX: message, }), MessageStructure: 'json', TargetArn: 'arn:aws:sns:ap-east-1:xxxx:endpoint/APNS_SANDBOX/xxxx/xxxx' }; const response = sns.publish(data).promise();
ここで、送信したいメッセージは、message変数に挿入しています。apsはiosがpush notificationでメッセージとして認識する部分を指し、その子供に当たるalertが表示するメッセージの内容となります。
さらに、メッセージ以外の変数を渡したい場合、apsの兄弟オブジェクトとして定義すると、受信メッセージのdataと呼ばれるオブジェクトの子供として取得できます。
次にdata変数で定義している内容が、送信先(TargetArn)、送信メッセージの形式(MessageStructure)、メッセージ内容(Message)を表しています。さらに、メッセージ内容の中では、ターゲットのプラットフォーム(payloadKey)、それぞれのターゲットに対するメッセージを記述するようになっています。APNSのキーは、iOSのプロダクションモードへのメッセージを示し、APNS_SANDBOXのキーはiOSの開発モードへのメッセージを示しています。
参考サイト
- AWS SNSでPush通知する方法
- react-native-push-notificationマニュアル
- AWS SNSのメッセージフォーマット
- Apple Push Notificationのメッセージフォーマット