Help us understand the problem. What is going on with this article?

AWS SDK for PHPを利用したAmazon SNSのMobile Push

More than 5 years have passed since last update.

Amazon SNSでMobile PushがサポートされたのでiOS向けだけ試してみました。
今回は下記の環境で行っています。
■環境
PHP5.5.1
AWD SDK for PHP2.4.5

たぶんMobile Pushは2.4.4からです。

まず、SDKを使う前に、AWSのManagement Consoleからでpushできるので、
そちらを試してみてください。
■参考URL
http://dev.classmethod.jp/cloud/aws-amazon-sns-mobile-push-ios/

次に、AWSのブログですね。SDKを使ったサンプルです。
■Amazon Web Services ブログ
http://aws.typepad.com/aws_japan/2013/08/push-notifications-to-mobile-devices-using-amazon-sns.html

で、サンプルコードです。
最低限のコードなので、マニュアルを見た上で自己責任でお願いします。

<?php
require'/aws_sdk_path/vendor/autoload.php';
use Aws\Common\Aws;
use Aws\Common\Enum\Region;
use Aws\Sns\SnsClient;

class Sample {

    // Amazon SDKのインスタンス
    private $obj = null;

    // ManagementConsoleで登録したアプリ(APNS_SANDBOX:開発用)
    private $PlatformApplicationArn = 'arn:aws:sns:ap-northeast-1:000000000000:app/APNS_SANDBOX/sample_app'; // dummy

    /**
     * AWS SDK for PHP
     */
    private function getInstance() {
        if (is_null($this->obj)) {
            $this->obj = Aws::factory(array(
                'key'    => 'dummy',
                'secret' => 'dummy',
                'region' => Region::TOKYO
            ))->get('sns');
        }
        return $this->obj;
    }

    /**
     * Push通知先(EndpointArn)を登録
     */
    public function createPlatformEndpoint($token) {
        $options = array(
            'PlatformApplicationArn' => $this->PlatformApplicationArn,
            'Token'                  => $token,
        );
        try {
            $res = $this->getInstance()->createPlatformEndpoint($options);
        } catch (Exception $e) {
//          echo $e->getMessage();
            return false;
        }
        return $res; // $res['EndpointArn']
    }

    /**
     * 通知
     */
    public function publish($message, $EndpointArn) {
        try {
            $res = $this->getInstance()->publish(array(
                'Message'   => $message,
                'TargetArn' => $EndpointArn
            ));
        } catch (Exception $e) {
//          echo $e->getMessage();
            return false;
        }
        return $res;
    }

    /**
     * 通知(JSON)
     */
    public function publishJson($args) {
        try {
            $res = $this->getInstance()->publish($args);
        } catch (Exception $e) {
//          echo $e->getMessage();
            return false;
        }
        return $res;
    }
}

$message = 'Amazon SNS Mobile Push message.';

// メッセージのみを通知
$AmazonSns = new Sample();
$res = $AmazonSns->createPlatformEndpoint('dummy');
$AmazonSns->publish($message, $res['EndpointArn']);

// JSON形式で色々な値を送る ※文字列の上限に達すると送られないので注意
$AmazonSns->publishJson(array(
    'MessageStructure' => 'json',
    'TargetArn' => $res['EndpointArn'],
    'Message' => json_encode(array(
        'APNS_SANDBOX' => json_encode(array(
            'aps' => array(
                'alert' => $message,
                'badge' => 10, // int型でアプリアイコンに表示するbadge数を指定
                'test_id' => 1 // 好きなパラメータを設定可能
            )
        ))
    )),
));

使い方としては、createPlatformEndpoint()でtokenを登録し、
そのレスポンスで返ってきたEndpointArnを利用してpublish()するだけです。
注意点としては、アプリ名(PlatformApplicationArn)も通知先(EndpointArn)も
AWS側で生成されるものだということです。

実際にサービスで利用する場合は、
1,Management Console上でアプリを登録してPlatformApplicationArnを取得
2,createPlatformEndpoint()のレスポンスのEndpointArnをDB等に登録
3,必要なユーザに対してだけpublish()
という形かなと思います。

AWS側で生成される値を使うのはちょっと面倒かな・・・

yoshu
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした