ぶろぐ

日記です

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',
]);