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.
- ¿Cómo obtener una notificación interactiva push con Urban Airship en Android?
- Cómo obtener el símbolo de autorización de C2DM para usar el dirigible urbano
- Clave de aplicación de desarrollo y secreto de aplicación para Android
- Notificaciones push en Android 5 no se entregan cuando la aplicación en segundo plano (Titanium) - Pero lo hace en primer plano
- El Dirigible Urbano se estrella al despegar. Argumento de excepción ilegal
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?
- Configuración del Dirigible Urbano con objetivos múltiples - ¿Es posible el mismo ID de paquete?
- Push notificación de UrbanAirship no funciona con servidor en vivo (es decir, con la clave de producción) en android
- Abrir la aplicación Android desde la notificación PUSH
- Cómo registrarse apid en el dirigible urbano para android?
- Push Notifications usando Urban Dirigible devuelve apID como nulo en el primer lanzamiento
- Prolem usando urbanairship Provider android
- Actualización en tiempo real multiplataforma para teléfonos móviles
- Java.lang.NoClassDefFoundError: com.urbanairship.UAirship
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 ));
- Acceda al valor sdk.dir en build.gradle después de la evaluación del proyecto
- No se puede acceder a jarfile lib \ archquery.jar