Amazon SNS Mobile PushでPUSH通知
予めAWSでやっておくこと
- アプリケーションプラットホームを作成しておく。APNsやFCMの情報を登録する。
- ここに端末のdevice tokenを登録することでendpointを取得できる。
- サーバーではこのendpoint arnをDBに保存しておく。
- ユーザー(端末)を指定して個別にpush通知を送りたいときに使う
- 全体PUSH通知用にTOPICを作成
- endpoint arnを作成したらこのTOPICをsubscribeしておく
- TOPICにmessageをpublishしたらsubscriberに伝播して全端末にpush通知が飛ぶ
- 端末個別にpush通知が飛ばせればいいのであれば作らなくてもいい。
コードサンプル
コピペで動くはず
<?php $client = new SnsClient([ 'profile' => 'dev_sns', 'region' => 'ap-northeast-1', 'version' => 'latest', ]); // アプリケーションプラットホームのエンドポイントを作成 // このendpointにpublishすることで端末指定でpush通知が可能 $result = $client->createPlatformEndpoint([ 'Token' => $token, 'CustomUserData' => $studentId, 'PlatformApplicationArn' => 'arn:aws:sns:ap-northeast-1:xxxxxxxxxxxxxx:app-push-notification-dev' ]); $endpoint = $result['EndpointArn']; // 全体通知用のトピックをsubscribeする $client->subscribe([ 'Protocol' => 'application', 'Endpoint' => $endpoint, 'TopicArn' => 'arn:aws:sns:ap-northeast-1:xxxxxxxxxxxxxx:app/GCM/app-android-dev', 'Attributes' => [], // android/ios指定でフィルタできるように設定してもいいかも ]); // endpointを指定して個別にpush通知 $client->publish([ 'Subject' => 'title', 'Message' => 'message', 'TargetArn' => $endpoint, ]); // topicを指定して全体にpush通知 $client->publish([ 'Subject' => 'title', 'Message' => 'message', 'TargetArn' => 'arn:aws:sns:ap-northeast-1:xxxxxxxxxxxxxx:app/GCM/app-android-dev', ]);