AWS SNSを使ってプッシュ通知を送る方法のうちの一つ、トピックを作成してエンドポイントを追加し送信するサンプルです。
一度に複数の端末へ送信する場合、この方法を使うかと思います。
topic_push_test.php
<?php
require(dirname(__FILE__).'/vendor/autoload.php');
use Aws\Sns\SnsClient;
use Aws\Sns\Exception\SnsException;
date_default_timezone_set('Asia/Tokyo');
// 送信するメッセージ作成
$message = array(
'default' => "メッセージ",
'APNS' => json_encode(array(
'aps' => array(
'alert' => "メッセージ"
),
'scheme' => ""
)),
'GCM' => json_encode(array(
'data' => array(
'message' => "メッセージ",
'scheme' => ""
)
))
);
$sns = SnsClient::factory(array(
'credentials' => [
'key' => 'キー',
'secret' => 'シークレット',
],
'region' => 'リージョン名',
'version' => 'バージョン',
));
try {
// トピック生成
$result = $sns->createTopic(array(
'Name' => 'トピック名',
));
$topicArn = $result['TopicArn'];
// トピックにエンドポイントを追加
// 複数エンドポイントがある場合はこの処理を繰り返す
$params = [
'Endpoint' => 'エンドポイント',
'Protocol' => 'Application',
'TopicArn' => $topicArn,
];
$result = $sns->subscribe($params);
// プッシュ通知
$sns->publish(array(
'TargetArn' => $topicArn,
'Message' => (string) json_encode($message),
'MessageStructure' => 'json'
));
// 作ったトピックを削除する場合は以下を実行
// $result = $sns->deleteTopic(array(
// 'TopicArn' => $topicArn,
// ));
} catch(SnsException $e) {
// エラー出力
}
送信するメッセージはandroid、ios両方に対応して、JSON形式で送ることを想定しています。この部分が送りたい内容によって書き換えが必要です。
トピック名は任意でつけられます。