Esta es la primera vez que uso notificaciones automáticas en mi aplicación. He revisado las aplicaciones de muestra junto con los libros y obtuve la forma de enviar notificaciones automáticas a un solo dispositivo. Pero no entiendo exactamente qué cambios debo hacer en mi programa para enviar notificaciones automáticas a múltiples dispositivos. Estoy usando la aplicación 'PushMeBaby' para la codificación del lado del servidor. Por favor, ayúdame. Gracias de antemano.¿Cómo enviar una notificación push a múltiples dispositivos?
Respuesta
Pruebe este código de ejemplo y modifíquelo para su entorno.
$apnsHost = '<APNS host>';
$apnsPort = <port num>;
$apnsCert = '<cert>';
$streamContext = stream_context_create();
stream_context_set_option($streamContext, 'ssl', 'local_cert', $apnsCert);
$apns = stream_socket_client('ssl://' . $apnsHost . ':' . $apnsPort, $error, $errorString, 60, STREAM_CLIENT_CONNECT, $streamContext);
$payload['aps'] = array('alert' => 'some notification', 'badge' => 0, 'sound' => 'none');
$payload = json_encode($payload);
// Note: $device_tokens_array has list of 5 devices' tokens
for($i=0; $i<5; $i++)
{
$apnsMessage = chr(0) . chr(0) . chr(32) . pack('H*', str_replace(' ', '', $device_tokens_array[i])) . chr(0) . chr(strlen($payload)) . $payload;
fwrite($apns, $apnsMessage);
}?>
este artículo ayude a verificar terminar la conexión y el estado de conexión: Apple Push Notification: Sending high volumes of messages
Otros enlaces de referencia:
How can I send push notification to multiple devices in one go in iPhone? y how to handle multiple devices when using Push Notification?
Gracias por responder !!! Es bueno ver respuestas pronto.Pero ya he respondido a estas preguntas :(Necesito una descripción de cómo puedo obtener todos los tokens del dispositivo en mi servidor y cómo enviarles notificaciones en una sola conexión. Puede parecer una pregunta muy básica para usted, pero como soy nuevo, no estoy obteniendo cómo hacerlo. Por favor, ayuda – Yogi
Publiqué código de muestra esperando que pueda darle una dirección. – Priyank
Gracias Priyank, obtuve su lógica y Estoy seguro de que funcionará aunque cambié el lenguaje de la codificación. ¿Estoy en lo cierto? – Yogi
me encontré con que usted tiene que crear una nueva stream_context_create de cada fwrite para evitar que Apple cierre la conexión para un token malo.
Puede simplemente llamar a 'fread ($ socket)' después de enviar cada notificación: si devuelve 'FALSE', vuelva a crear el socket. También podría poner su envío en un try & catch y recrear automáticamente el socket y volver a enviar la notificación (probablemente con un número máximo de reintentos, por las dudas). – user276648
Esto es lo que he hecho here
<?php
set_time_limit(0);
$root_path = "add your root path here";
require_once($root_path."webroot\cron\library\config.php");
require_once($root_path."Vendor\ApnsPHP\Autoload.php");
global $obj_basic;
// Basic settings
$timezone = new DateTimeZone('America/New_York');
$date = new DateTime();
$date->setTimezone($timezone);
$time = $date->format('H:i:s');
//Get notifications data to send push notifications
$queueQuery = " SELECT `notifications`.*, `messages`.`mes_message`, `messages`.`user_id`, `messages`.`mes_originated_from` FROM `notifications`
INNER JOIN `messages`
ON `notifications`.`message_id` = `messages`.`mes_id`
WHERE `notifications`.`created` <= NOW()";
$queueData = $obj_basic->get_query_data($queueQuery);
if(!empty($queueData)) {
// Put your private key's passphrase here:
$passphrase = 'Push';
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'server_certificates_bundle_sandbox.pem');
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);
// Open a connection to the APNS server
$fp = stream_socket_client(
'ssl://gateway.sandbox.push.apple.com:2195', $err,
$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
if (!$fp)
exit("Failed to connect: $err $errstr" . PHP_EOL);
echo '<br>'.date("Y-m-d H:i:s").' Connected to APNS' . PHP_EOL;
foreach($queueData as $val) {
// Put your device token here (without spaces):
$deviceToken = $val['device_token'];
// Create message
// Get senders name
$sql = "SELECT `name` FROM `users` WHERE id =".$val['user_id'];
$name = $obj_basic->get_query_data($sql);
$name = $name[0]['name'];
$message = $name." : ";
// Get total unread messaged for receiver
$query = "SELECT COUNT(*) as count FROM `messages` WHERE mes_parent = 0 AND user_id = ".$val['user_id']." AND mes_readstatus_doc != 0 AND mes_status = 1";
$totalUnread = $obj_basic->get_query_data($query);
$totalUnread = $totalUnread[0]['count'];
$message .= " This is a test message.";
// Create the payload body
$body['aps'] = array(
'alert' => $message,
'badge' => $totalUnread,
'sound' => 'default'
);
// Encode the payload as JSON
$payload = json_encode($body);
// Build the binary notification
$msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;
// Send it to the server
$result = fwrite($fp, $msg, strlen($msg));
if (!$result) {
echo '<br>'.date("Y-m-d H:i:s").' Message not delivered' . PHP_EOL;
} else {
$sqlDelete = "DELETE FROM `notifications` WHERE id = ".$val['id'];
$query_delete = $obj_basic->run_query($sqlDelete,'DELETE');
echo '<br>'.date("Y-m-d H:i:s").' Message successfully delivered' . PHP_EOL;
}
}
// Close the connection to the server
fclose($fp);
echo '<br>'.date("Y-m-d H:i:s").' Connection closed to APNS' . PHP_EOL;
} else {
echo '<br>'.date("Y-m-d H:i:s").' Queue is empty!';
}
- 1. Enviar notificación de inserción de fichas para muchos dispositivos
- 2. Transmitir una notificación a todos los dispositivos registrados
- 3. Registrarse para notificación push
- 4. ¿Cómo probar la notificación push de iOS?
- 5. ¿Se requiere una conexión a Internet en vivo para la notificación push?
- 6. Deseo enviar una notificación DESDE mi iPhone a otro iPhone
- 7. notificaciones push múltiples en 1 dispositivo - iPhone
- 8. enviar notificaciones push a iphone desde python
- 9. Cómo enviar millones de notificación push de Apple como Urban Airship en cuestión de segundos
- 10. Token de dispositivo de notificación push?
- 11. enviar una notificación desde javascript en UIWebView a ObjectiveC
- 12. "notificación Push" - retroalimentación, la aplicación de desinstalación
- 13. Notificación push vs. pull en iphone
- 14. Chat en tiempo real con notificación push
- 15. ¿Cuánto demora la notificación push ios?
- 16. Envío de inserción a múltiples dispositivos Android con un solo POST
- 17. Abrir aplicación Android de notificación PUSH
- 18. android push notificación de servicio de comparación
- 19. ¿Cuántos caracteres puede incluir en una notificación push de Apple?
- 20. ¿Cómo funciona la tecnología de notificación push en Android?
- 21. ¿Cómo puedo enviar una notificación push de Apple con varias líneas, es decir, con un carácter '\ n'?
- 22. ¿Los tokens de notificación push son únicos en todas las aplicaciones para un solo dispositivo?
- 23. ¿Hay algún costo por usar el servicio de notificación push?
- 24. Notificación de iPhone Push - Cómo usar el sonido predeterminado
- 25. Notificación de Apple Push con envío de datos personalizados
- 26. iPhone: cómo quitar la insignia después de la notificación push?
- 27. Enviar notificación al centro de notificación Mountain lion
- 28. Rails 3 y el servicio de notificación push de apple
- 29. ¿Cómo ejecutar Logcat en múltiples dispositivos?
- 30. Error de Java APNS (Servicio de notificación push de Apple)
Puede comprobar lo que he hecho aquí http://stackoverflow.com/questions/14563097/sending-multiple-iphone-push-notifications-apns-php -tutorial –