Envío de Amazon SNS desde mi servidor PHP

Tengo una aplicación tanto en plataformas Android y iOS. Ambos están registrados con Amazon SNS. Esto se realiza con éxito, porque si tengo los tokens de dispositivo, entonces puedo iniciar sesión en mi tablero de aplicaciones en Amazon, y puede enviar SNS desde su consola.

Quiero que lo haga automatizado. Quiero decir tener mi propio sitio de administración de PHP (y API) para las aplicaciones. Quiero agregar otra página al sitio de administración, que puede solicitar a la Amazon SNS para enviar carga única con el identificador del dispositivo, las claves de registro y el cuerpo del mensaje siempre con la solicitud.

Primera pregunta – ¿Es posible? He visto que el dirigible urbano lo permite, por lo que es habitual que Amazon también lo hace?

Segunda pregunta – ¿Cuál es el proceso? Desde que estoy trabajando en esto para uno de mi cliente y todos los documentos no son accesibles para mí. Mi cliente no puede explicarlo a amazon.

Cuando he registrado mis aplicaciones a amazon, ¿no deberían proporcionarme algunas claves y secretos que puedo usar para llamar a su servicio a través de http?

Sí, es posible. Descargue el SDK de PHP de Amazon Web Service (AWS) desde aquí y siga sus instrucciones para usar esto en su API de servidor web. Obtenga los ARN de aplicación de plataforma para iOS y android, ID de clave de acceso y la clave secreta de la consola de Amazon. Y luego pruebe el código de abajo y siga las instrucciones comentadas:

<?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/>"; } } } } ?> 

El código se prueba y funciona, no dude en cambiar como su necesidad.

Si desea enviar un sonido de alerta y un número de placa con carga personalizada, reemplace este bloque de código // iOS: Send a message to each endpoint foreach ($iOS_model['Endpoints'] as $endpoint)

Con este bloque de código

  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 } } 

Creo que la forma más sencilla de enviar notificación push a un solo dispositivo o usuario es por este código

  $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 )); 
  • PhoneGap-Android: Notificación de empuje de Urban Airship desde mi servidor
  • Android: Urban Dirigible 6.0.1: android: elevation no se encontró ningún recurso que coincida con el nombre dado
  • No se puede obtener la notificación push desde el Dirigible Urbano
  • Importación de Dirigible Urbano en Android Studio da problemas de compilación?
  • Ningún receptor de intenciones estableció AirShip Urbano
  • Dirigible Urbano - Push Sample => APID es cada vez nulo
  • Cambiar el nombre del paquete de Android para el proyecto de phonegap
  • Volver a iniciar la aplicación Android cuando el usuario hace clic en la notificación de Dirigible urbano
  • ¿Por qué debo comenzar el servicio de urbanairship como un proceso separado?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.