Отправка ASA Amazon с моего PHP-сервера

У меня есть приложение как на платформах Android, так и на iOS. Оба они зарегистрированы в Amazon SNS. Это успешно сделано, потому что, если у меня есть токены устройства, я могу войти в панель приложений своих приложений в Amazon и отправить SNS с их консоли.

Я хочу, чтобы он стал автоматическим. Я имею в виду иметь собственный PHP-сайт администратора (и API) для приложений. Я хочу добавить еще одну страницу на сайт администратора, который может запросить SNS amazon для отправки единой полезной нагрузки с идентификатором устройства, регистрационными ключами и телом сообщения, предоставленным с запросом.

Первый вопрос – возможно ли это? Я видел, что Urban Airship позволяет это, так что обычно и амазонка?

Второй вопрос – что это за процесс? Поскольку я работаю над этим для одного из моих клиентов, и все документы не доступны мне. Мой клиент не может объяснить это амазонке.

Когда я зарегистрировал свои приложения на амазонке, не должны ли они предоставить мне несколько ключей и секретов, которые я могу использовать для вызова их службы через http?

    Да, это возможно. Загрузите SDK SDK от Amazon (AWS) и следуйте их инструкциям, чтобы использовать это в своем API веб-сервера. Получите приложение платформы ARN для iOS и Android, ключ доступа и секретный ключ от консоли Amazon. Затем попробуйте выполнить приведенный ниже код и следуйте приведенным инструкциям:

    <?php require '<path to this file>/aws.phar'; use Aws\Sns\SnsClient; if(isset($_POST['submit'])) { $push_message = $_POST['push_message']; if(!empty($push_message)) { // Create a new Amazon SNS client $sns = SnsClient::factory(array( 'key' => '<access key>', 'secret' => '<app secret>', 'region' => '<region code>' )); // region code samples: us-east-1, ap-northeast-1, sa-east-1, ap-southeast-1, ap-southeast-2, us-west-2, us-gov-west-1, us-west-1, cn-north-1, eu-west-1 $iOS_AppArn = "<iOS app's Application ARN>"; $android_AppArn = "<android app's Application ARN>"; // Get the application's endpoints $iOS_model = $sns->listEndpointsByPlatformApplication(array('PlatformApplicationArn' => $iOS_AppArn)); $android_model = $sns->listEndpointsByPlatformApplication(array('PlatformApplicationArn' => $android_AppArn)); // Display all of the endpoints for the iOS application foreach ($iOS_model['Endpoints'] as $endpoint) { $endpointArn = $endpoint['EndpointArn']; echo $endpointArn; } // Display all of the endpoints for the android application foreach ($android_model['Endpoints'] as $endpoint) { $endpointArn = $endpoint['EndpointArn']; echo $endpointArn; } // iOS: Send a message to each endpoint foreach ($iOS_model['Endpoints'] as $endpoint) { $endpointArn = $endpoint['EndpointArn']; try { $sns->publish(array('Message' => $push_message, 'TargetArn' => $endpointArn)); echo "<strong>Success:</strong> ".$endpointArn."<br/>"; } catch (Exception $e) { echo "<strong>Failed:</strong> ".$endpointArn."<br/><strong>Error:</strong> ".$e->getMessage()."<br/>"; } } // android: Send a message to each endpoint foreach ($android_model['Endpoints'] as $endpoint) { $endpointArn = $endpoint['EndpointArn']; try { $sns->publish(array('Message' => $push_message, 'TargetArn' => $endpointArn)); echo "<strong>Success:</strong> ".$endpointArn."<br/>"; } catch (Exception $e) { echo "<strong>Failed:</strong> ".$endpointArn."<br/><strong>Error:</strong> ".$e->getMessage()."<br/>"; } } } } ?> 

    Код протестирован и работает, не стесняйтесь меняться по мере необходимости.

    Если вы хотите отправить звуковой сигнал оповещения и номер значка с пользовательской полезной нагрузкой, замените этот блок кода // iOS: Send a message to each endpoint foreach ($iOS_model['Endpoints'] as $endpoint)

    с этим кодовым блоком

      foreach ($iOS_model['Endpoints'] as $endpoint) { $endpointArn = $endpoint['EndpointArn']; try { $sns->publish(array( 'TargetArn' => $endpointArn, 'MessageStructure' => 'json', 'Message' => json_encode(array( 'default' => $title, 'APNS_SANDBOX' => json_encode(array( 'aps' => array( 'alert' => $title, 'sound' => 'default', 'badge' => 1 ), // Your custom payload if needed 'whatever' => 'here', 'andwhatever' => 'here' )) )) )); echo "1";//Success push } catch (Exception $e) { echo "2";//Failed push } } 

    я считаю, что самый простой способ отправить push-уведомление одному устройству или пользователю по этому коду

      $snsClient = Aws\Sns\SnsClient::factory(array( 'credentials' => array( 'key' => AMAZON_KEY, 'secret' => AMAZON_SECRET, ), 'region' => AMAZON_REIGON )); //you should have variable that have user end single point . $result = $snsClient->publish(array( 'Message' => "push text message", 'TargetArn' => $user_end_point ));