51 votes

Apple PNS (services de notification push) exemple de code

Est-il un exemple de projet montrant comment utiliser un APN de l'IPhone, et la façon de les choses? Je suis actuellement à la recherche, à la documentation, mais il serait agréable d'avoir un peu de travail code pour récupérer en dehors et de voir comment tout cela fonctionne ensemble?

Je n'arrive pas à trouver quelque chose à l'aide de google ou dans le centre des développeurs iphone.

59voto

jessecurry Points 12114

Le pire, sur la configuration du service de notification push est la mise en service. Le plus grand obstacle que j'ai rencontré a été que, il y a un certificat et une clé dans le .cer fichier que vous téléchargez depuis le site d'Apple, j'ai écrit un système de service en C# qui a envoyé les notifications et les connexions continué à échouer parce que j'avais exporté le certificat et non pas la clé.

Je ne me souviens pas qui a écrit cela, voici un peu de code en python qui m'a aidé lorsque j'ai commencé à tester le service de notification. Je l'aime parce qu'il est très simple et fonctionne bien pendant les tests.

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()

Il y a aussi un gem rails appelé apn_on_rails qui semble fonctionner assez bien si vous êtes en développement d'une application rails, je viens de voir ça aujourd'hui et a été en mesure d'envoyer des notifications à partir de la console.

Sur iPhone vous avez juste besoin d'appeler le suivant pour vous inscrire pour tous les types de notifications:

[[UIApplication sharedApplication] registerForRemoteNotificationTypes: UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert];

Pour recevoir le dispositif de jeton que vous aurez besoin de mettre en œuvre le délégué suivant les méthodes:

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken

- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error

Pendant le test, vous pouvez simplement frapper le deviceToken à la console avec NSLog, puis la coller dans le script python ci-dessus, en production, vous aurez évidemment besoin de mettre en place une méthode pour récupérer le jeton de vos serveurs.

Aussi, dans la production, vous aurez besoin de la requête d'Apple service de rétroaction et de supprimer le périphérique jetons les utilisateurs qui l'ont supprimé de votre application.

15voto

Scott K. Points 1285

Un bon endroit pour commencer est Urban Airship. Vous pouvez configurer un compte de base gratuit, qui va faire tout le travail côté serveur d'envoi de notifications push aux serveurs d'Apple. Ils font un excellent travail de vous promenant à travers toutes les étapes nécessaires pour obtenir votre demande de travail de leur service, et avoir un excellent exemple de code qui montre comment inscrire votre application pour les notifications.

Je n'ai pas d'affiliation avec eux d'autres que d'être un utilisateur heureux de leur service.

14voto

Simon Whitaker Points 11881

Dans le cas où cela peut aider, j'ai écrit une bibliothèque Python, PyAPNs, pour interagir avec le Service de Notification Push sur le côté serveur:

http://github.com/simonwhitaker/PyAPNs

12voto

Mladen Points 5699

http://blog.boxedice.com/2009/07/10/how-to-build-an-apple-push-notification-provider-server-tutorial/

Cela m'a aidé beaucoup à faire de fournisseur de code sur le serveur linux avec PHP.

5voto

Ben Gotow Points 7627

Il n'y a vraiment pas beaucoup de code à écrire sur l'iPhone. Vous avez besoin pour obtenir le jeton unique de l'iPhone ou de l'iPod Touch, puis le relais de ce jeton à votre serveur. Obtenir le jeton nécessite un appel à UIApplication mais il n'y a pas de prédéfinis façon d'arriver à votre serveur. Une de mes applications, effectue un HTTP POST à un script PHP qui met le jeton dans une base de données.

Si vous êtes curieux sur la configuration et l'installation des certificats, etc..., vous pouvez consulter le Service de Notification Push Apple Guide de Programmation.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X