Lo peor de la configuración del servicio de notificación push es el aprovisionamiento. El principal obstáculo con el que me topé fue que hay un certificado y una clave en el archivo .cer que descargó del sitio de Apple, escribí un servicio de sistema en C# que enviaba notificaciones y las conexiones seguían fallando porque había exportado el certificado y no la clave
No recuerdo quién escribió originalmente esto, aquí hay un poco de código en python que me ayudó cuando estaba probando el servicio de notificación. Me gusta porque es muy simple y funciona bien durante las pruebas.
import socket, ssl, json, struct
# device token returned when the iPhone application
# registers to receive alerts
deviceToken = 'XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX'
thePayLoad = {
'aps': {
'alert':'Oh no! Server\'s Down!',
'sound':'k1DiveAlarm.caf',
'badge':42,
},
'test_data': { 'foo': 'bar' },
}
# Certificate issued by apple and converted to .pem format with openSSL
# Per Apple's Push Notification Guide (end of chapter 3), first export the cert in p12 format
# openssl pkcs12 -in cert.p12 -out cert.pem -nodes
# when prompted "Enter Import Password:" hit return
#
theCertfile = 'cert.pem'
#
theHost = ('gateway.sandbox.push.apple.com', 2195)
#
data = json.dumps(thePayLoad)
# Clear out spaces in the device token and convert to hex
deviceToken = deviceToken.replace(' ','')
byteToken = bytes.fromhex(deviceToken) # Python 3
# byteToken = deviceToken.decode('hex') # Python 2
theFormat = '!BH32sH%ds' % len(data)
theNotification = struct.pack(theFormat, 0, 32, byteToken, len(data), data)
# Create our connection using the certfile saved locally
ssl_sock = ssl.wrap_socket(socket.socket(socket.AF_INET, socket.SOCK_STREAM), certfile = theCertfile)
ssl_sock.connect(theHost)
# Write out our data
ssl_sock.write(theNotification)
# Close the connection -- apple would prefer that we keep
# a connection open and push data as needed.
ssl_sock.close()
Hay también una joya carriles llamada apn_on_rails que parece funcionar bastante bien si está desarrollando una aplicación de rieles, acabo de ver hoy en día y fue capaz de enviar notificaciones desde la consola.
En el lado iPhone sólo tendrá que llamar al siguiente para registrar a todos los tipos de notificaciones:
[[UIApplication sharedApplication] registerForRemoteNotificationTypes: UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert];
Para recibir el token de dispositivo que necesita para implementar los siguientes métodos de delegado:
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
Durante la prueba, puede activar el dispositivo Token en la consola con NSLog, y luego pegarlo en la secuencia de comandos python, en producción obviamente tendrá que configurar algún método para obtener el token en sus servidores.
Además, en producción necesitará consultar el servicio de comentarios de Apple y eliminar los tokens de dispositivos de los usuarios que eliminaron su aplicación.
Compruebe aquí http://arashnorouzi.wordpress.com/2011/03/31/sending-apple-push-notifications-in-asp-net-part-1/ es exactamente lo que está buscando. – Moon
@ froh42 ¿Tiene algún código satisfactorio? También quiero un código de muestra para la implementación paso a paso. Si lo tiene, por favor proporciónémelo. Gracias de antemano. –