1

AWS SNS を使用してプッシュ通知を送信しています。現在、特定のデバイスをプッシュするpublish方法を使用しています。私の要件は、30 秒以内に何千ものメンバーにプッシュ送信されます。パブリッシュ メソッドを使用した場合、1000 人のユーザーを送信するのに 5 分かかりました。一度に複数のメンバーを送信することについて読んだことがありますが、私のシナリオは、すべてのトピック ユーザーではなく、特定のユーザーにプッシュを送信したいということです。aws-php-sdktopic

たとえば、1 つのトピックに 10,000 人のメンバーを登録しますが、この 10,000 から、ある時点で 9000 人、時には 1000 人のメンバーを送信します。

したがって、トピックを使用して特定のメンバーのみをプッシュする方法は誰でも知っています。

別のケースも考えられます.新しいトピックを作成してこのトピックにメンバーを登録し、彼にメッセージを送信してから削除するtopicたびに、メンバーを登録するたびに時間がかかります. 一度に複数のメンバーを登録するアイデアがある場合は、それも役に立ちます。

以下は、プッシュを送信する現在のコードです。

    $arn = "user arn";
    $sns = new Aws\Sns\SnsClient(array(
                    'version' => 'latest',
                    'key' => my_aws_key,
                    'secret' => aws_secret,
                    'region' => region,
                    'profile' => profile_name,
                    'debug' => false,
                    'http' => array('verify' => false)
                ));
$appArn = "application arn";

$sns->publish(array('Message' => '{ "GCM": "{\"data\": { \"message\": \" This is my message \"} }"}',
                     'MessageStructure' => 'json',
                     'TargetArn' => $arn
                        ));
4

2 に答える 2

2

メソッドを使用することをお勧めしますpublishAsync()

$userArnCollection = array(
    'arn:XXX',
    'arn:YYY',
    'arn:ZZZ',
);
$sns = new Aws\Sns\SnsClient(array(
    'version' => 'latest',
    'key'     => my_aws_key,
    'secret'  => aws_secret,
    'region'  => region,
    'profile' => profile_name,
    'debug'   => false,
    'http'    => array('verify' => false)
));

foreach ($userArnCollection as $userArn) {
    $sns->publishAsync(array(
        'Message'          => '{ "GCM": "{\"data\": { \"message\": \" This is my message \"} }"}',
        'MessageStructure' => 'json',
        'TargetArn'        => $userArn
    ));
}

編集

promise 処理の例

$userArnCollection = array(
    'arn:XXX',
    'arn:YYY',
    'arn:ZZZ',
);
$sns = new Aws\Sns\SnsClient(array(
    'version' => 'latest',
    'key'     => my_aws_key,
    'secret'  => aws_secret,
    'region'  => region,
    'profile' => profile_name,
    'debug'   => false,
    'http'    => array('verify' => false)
));

$promises = array();
foreach ($userArnCollection as $userArn) {
    $promises[] = $sns->publishAsync(array(
        'Message'          => '{ "GCM": "{\"data\": { \"message\": \" This is my message \"} }"}',
        'MessageStructure' => 'json',
        'TargetArn'        => $userArn
    ));
}

$results = \GuzzleHttp\Promise\unwrap($promises);
于 2017-06-26T06:55:25.407 に答える