HaneCa

独り立ちへ向けた長い道

AWS SNSを利用したPush Notificationについて(React Native / iOS)

投稿日: 2018年9月7日 最終更新日: 2019年1月1日

ここでは、AWS SNSを利用したPush Notificationについて紹介します。具体的には次の手順で設定することになりますが、一部の設定方法については、割愛します。

  1. Apple Dev WebコンソールでPush Notification用のiOS Credentialを作成する
  2. 作成されたCredentialをMacのキーツールチェーンにインストールする
  3. インストールしたCredentialのパブリックキーを.p12形式でexportする
  4. AWS SNSでtopicを作成する
  5. AWS SNSでアプリケーションを作成する (.p12ファイルをアップロードする)
  6. 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の開発モードへのメッセージを示しています。

参考サイト

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください