Construire une application SDK iOS «Poke» avec APNS - Partie 2

Ce didacticiel est le deuxième d’une série de trois articles consacrés à l’utilisation des fonctionnalités de notification push d’iOS 3.0+. Il explique comment envoyer des notifications au service de notification push (APNS) d’Apple via Urban Airship. Cette tranche s’appuie sur les éléments que nous avons configurés dans la dernière, vous voudrez donc aller lire celle-ci en premier pour vous mettre au courant si vous ne l’avez pas déjà fait..

Préparez vos certificats SSL

Le fichier de certificat SSL que vous avez téléchargé à partir du portail de provisioning iOS dans la première partie de cette série est au format DER et ne contient que le certificat. Il ne contient pas votre clé privée. Cependant, Urban Airship a besoin du certificat SSL et de la clé privée téléchargés dans un seul fichier PKCS # 12 pour pouvoir communiquer correctement avec le service de notification Apple Push. Nous avons donc du travail à faire. Heureusement pour nous, l'utilitaire Keychain Access fait pratiquement tout pour nous en quelques clics de souris..

La première chose à faire, si vous ne l'avez pas déjà fait, est de double-cliquer sur le certificat téléchargé (il devrait s'appeler aps_developer_identity.cer) dans le Finder et cliquer sur "Ajouter" pour l'ajouter à votre trousseau.. Remarque: vous devez ajouter le certificat à la même trousseau contenant les clés publique et privée générées par la demande de signature de certificat dans le versement précédent.

Une fois le certificat ajouté à votre trousseau, sélectionnez "Mes certificats" dans la liste de catégories située à gauche et recherchez votre nouveau certificat ajouté. Vérifiez qu’il comporte un triangle de divulgation. Si ce n'est pas le cas, cela signifie que Keychain Access ne peut pas trouver la clé privée qui correspond au certificat dans le trousseau actuel. Assurez-vous d'avoir ajouté le certificat au bon trousseau..

Cliquez avec le bouton droit sur le certificat et choisissez "Exporter" Apple Development Push Services [identificateur] "...". Lorsque la feuille d'exportation apparaît, vérifiez que "Echange d'informations personnelles (.p12) est sélectionné dans le bouton contextuel Format de fichier. Donnez à votre fichier un nom et cliquez sur "Enregistrer".

Une invite apparaît, demandant un mot de passe pour le fichier. Bien que Urban Airship prenne en charge les fichiers PKCS # 12 protégés par mot de passe, il est recommandé de le laisser vide - cliquez simplement sur "OK".

Vous voyez, ce n'était pas trop difficile! Nous sommes maintenant prêts à nous diriger vers Urban Airship et à tout installer.

Dirigeable urbain

Comme indiqué dans le précédent article, nous utiliserons Urban Airship pour communiquer avec le service de notification Push d'Apple et envoyer des messages push à notre application de démonstration..

1. Créer un compte

Pour commencer à utiliser le service Urban Airship, vous devez créer un compte avec eux. Leur forfait indépendant vous donne un million de messages par mois gratuitement (au moment de la rédaction de cet article). Remplissez le formulaire et cliquez sur "Inscrivez-vous". Puis cliquez sur l'URL dans l'e-mail de confirmation envoyé pour activer votre compte..

2. Ajouter une nouvelle application à votre compte

Une fois connecté, accédez au formulaire "Ajouter une nouvelle application" et entrez le nom de votre application. Comme indiqué précédemment, Apple utilise deux groupes de serveurs Push distincts pour le développement et la production. Chacun nécessite de générer un certificat SSL distinct dans le portail d'approvisionnement. De ce fait, Urban Airship vous recommande de créer des applications distinctes pour le développement et la production. Ainsi, vous pourrez continuer à tester les notifications en cours de développement sans interrompre les services Push destinés aux utilisateurs ayant téléchargé votre application depuis l'App Store..

Puisque nous travaillons avec une version de développement de notre application, nous utiliserons notre certificat SSL de développement. Le mode d'application doit être défini sur "Développement - connexion à des serveurs de test". en conséquence.

Cochez la case "Support des notifications push" et un certain nombre de nouveaux champs doivent être ajoutés au formulaire. Les seuls domaines qui nous préoccupent sont les trois sous la rubrique "Apple". Cliquez sur le bouton "Choisir un fichier" et localisez le fichier PKCS # 12 précédemment exporté à partir de Keychain Access. Si vous avez finalement décidé de saisir un mot de passe pour le fichier, saisissez-le dans le champ "Mot de passe du certificat". Nous devrions également cocher la case "Push debug mode" (Mode de débogage push) pour nous aider à résoudre les problèmes éventuels. (Les curieux peuvent cliquer sur le lien pour en savoir plus sur ce que c'est et ce qu'il fait).

Avec toutes vos informations saisies, cliquez sur "Créer votre application".

3. Informations d'identification de l'application

Une fois votre application créée, vous devriez être redirigé vers la page de détails de votre application..

Les deux choses que je veux appeler avant de passer à l'API sont la clé d'application et le secret d'application. Pour une explication des deux, je vous renvoie à la documentation de Urban Airship:

Chaque application possède une clé d'application et à la fois un secret d'application et un secret principal d'application (anciennement appelé secret d'application). Les informations d'identification sont fournies dans l'authentification de base HTTP (avec la clé comme nom d'utilisateur et le secret comme mot de passe), toujours via notre connexion HTTPS. Le secret de l'application doit être inclus dans l'application pour effectuer l'enregistrement, et le secret principal ne doit être utilisé que sur un serveur distant et non inclus dans l'application..

Fondamentalement, nous utiliserons la clé et le secret de l'application comme nom d'utilisateur et mot de passe, respectivement, lors de la communication avec l'API Urban Airship à partir de notre application. Dans cet esprit, couvrons rapidement l'appel d'enregistrement de périphérique de l'API.

4. API d'enregistrement de périphérique

Si vous faites défiler la page de documentation de l'API que nous venons de regarder, le premier élément que vous rencontrerez est la section Enregistrement. Lisez rapidement les quatre premiers paragraphes et vous verrez que nous devons envoyer une demande HTTP PUT à l'adresse https://go.urbanairship.com/api/device_tokens/. pour enregistrer un appareil.

Revenons à notre projet Xcode et ajoutons du code pour que notre application fasse exactement cela!

Retour à l'application

S'il n'est pas déjà ouvert, ouvrez le projet Xcode créé dans la première partie de cette série..

Enregistrement de l'appareil

La première chose à faire est de faire en sorte que notre application transmette le jeton que nous avons reçu de l’APNS à Urban Airship. Si vous vous souvenez de la première partie, nous avons ajouté à notre délégué d'application une méthode de rappel de notification push ressemblant à ceci:

- application (void): (UIApplication *) application didRegisterForRemoteNotificationsWithDeviceToken: (NSData *) deviceToken // TODO: transmettez le jeton à notre serveur NSLog (@ "Nous nous sommes enregistrés avec succès pour les notifications push"); 

Maintenant, nous allons implémenter l'élément TODO.

Si vous examinez la méthode de rappel ci-dessus, vous remarquerez que le jeton de périphérique revient en tant qu'instance de NSData et non de NSString. Si vous recherchez la méthode de rappel dans la documentation d'Apple, vous comprendrez pourquoi:

Le jeton est un type de données opaque, car il s'agit du formulaire que le fournisseur doit soumettre aux serveurs APS lorsqu'il envoie une notification à un périphérique. Les serveurs APS nécessitent un format binaire pour des raisons de performances.

Qu'est-ce que tout cela signifie? Urban Airship a besoin du jeton sous forme de chaîne hexadécimale, mais le système d'exploitation nous le transmet sous forme de données brutes. Nous devons donc effectuer certaines conversions. Bien que ce ne soit sans doute pas le meilleur moyen de procéder, nous allons utiliser la méthode -description de NSData pour convertir les données en chaîne hexadécimale:

 // Convertit le jeton en chaîne hexagonale et s'assure qu'il ne s'agit que de majuscules. NSMutableString * tokenString = [NSMutableString stringWithString: [[description de deviceToken] uppercaseString]]; [tokenString replaceOccurrencesOfString: @ "<" withString:@"" options:0 range:NSMakeRange(0, tokenString.length)]; [tokenString replaceOccurrencesOfString:@">"withString: @" "options: plage: NSMakeRange (0, tokenString.length)]; [tokenString replaceOccurrencesOfString: @" "withString: @" "options: plage 0: NSMakeRange (0, tokenString.length)];

Ensuite, nous devons construire l’URL, comme décrit dans la documentation de l’API:

 // Créez le NSURL pour la requête NSString * urlFormat = @ "https://go.urbanairship.com/api/device_tokens/%@"; NSURL * registrationURL = [NSURL URLWithString: [NSString stringWithFormat: urlFormat, tokenString]];

Nous devons ensuite instancier une requête NSMutableURLRequest. Nous utilisons un mutable requête car nous devons changer la méthode HTTP de la requête en PUT.

 // Créer la demande d'inscription NSMutableURLRequest * registrationRequest = [[NSMutableURLRequest alloc] initWithURL: registrationURL]; [registrationRequest setHTTPMethod: @ "PUT"];

Enfin, nous devons créer une instance de NSURLConnection pour envoyer les données au serveur:

 // Et déclenchez NSURLConnection * connection = [NSURLConnection connectionWithRequest: registrationRequest delegate: self]; [début de la connexion];

Vous remarquerez que nous configurons le délégué de la connexion à lui-même. NSURLRequest ne prenant pas en charge la fourniture initiale des informations d'identification de l'authentification HTTP de base (sans entrer dans le codage en base 64), nous voulons savoir quand la connexion reçoit un défi d'authentification afin de pouvoir fournir le nom d'utilisateur et le mot de passe. NSURLConnection a une méthode déléguée -connection: didReceiveAuthenticationChallenge: que nous devrons maintenant mettre en œuvre aussi.

- (void) connection: (NSURLConnection *) connection didReceiveAuthenticationChallenge: (NSURLAuthenticationChallenge *) challenge // Vérifie les échecs précédents si ([challenge previousFailureCount]> 0) // Nous avons déjà essayé - quelque chose ne va pas avec nos informations d'identification NSLog ( @ "Titres de compétence Urban Airship invalides"); revenir;  // Envoyer nos informations d'identification d'Urban Airship NSURLCredential * airshipCredentials = [Informations d'identification NSURLCredentialWithUser: @ "" mot de passe:@""persistence: NSURLCredentialPersistenceNone]; [[expéditeur du challenge] useCredential: airshipCredentials forAuthenticationChallenge: challenge];

N'oubliez pas de saisir la clé d'application et le secret de votre application Urban Airship aux endroits indiqués. Vous pouvez les récupérer à partir de la page de détail de votre application..

Vous devez également implémenter d'autres méthodes de délégation NSURLConnection, telles que -connection: didFailWithError: et -connection: didReceiveResponse :, que vous pouvez utiliser pour vérifier le code de réponse par rapport à celui attendu figurant dans la documentation d'Urban Airship. Mais je vais laisser cela comme un exercice pour le lecteur.

Ouf! OK, nous avons donc maintenant notre application qui transmet le jeton push qu'il reçoit de l'APNS aux serveurs d'Urban Airship. Nous sommes maintenant prêts à installer l'application sur notre appareil et à envoyer des notifications.!

Installer l'application

Si vous avez déjà parcouru toute la première partie de la série, tout devrait déjà être correctement configuré dans Xcode pour créer l'application et l'installer sur votre iPhone..

Branchez votre iPhone sur votre ordinateur. Si vous effectuez cette opération pour la première fois avec Xcode Open, le système vous demandera si vous souhaitez utiliser le périphérique pour le développement. Si tel est le cas, cliquez sur "Oui". Donnez-lui quelques secondes après l'avoir branché pour qu'il soit correctement reconnu par Xcode..

Vérifiez que le SDK actif est défini sur "Périphérique" dans la fenêtre de synthèse et que la configuration active est définie sur "Débogage". Cliquez ensuite sur le bouton vert "Construire et exécuter" dans la barre d'outils..

En quelques minutes, Xcode devrait créer l’application et l’installer sur votre iPhone. Assurez-vous d'être connecté à un réseau quelconque et laissez l'application s'exécuter pendant quelques minutes pour qu'elle ait le temps de s'enregistrer auprès de l'APNS et d'envoyer son jeton de périphérique à Urban Airship..

L'événement principal

Après deux tutoriels, nous sommes enfin prêt à envoyer une notification push à notre application!

Retournez sur le site web d'Urban Airship et connectez-vous (si vous n'êtes pas encore connecté). Accédez à la page de votre application et sélectionnez "Statistiques" dans le menu de gauche..

A côté de "Jetons de périphérique" sur la droite, il devrait y avoir un chiffre 1. S'il n'y en a pas, revenez en arrière et vérifiez que vous avez entré vos informations d'identification correctement. Vous pouvez également implémenter davantage de méthodes de délégation NSURLConnection pour vérifier que la demande est correctement reçue par les serveurs d'Urban Airship..

Après avoir vérifié que notre appareil est correctement enregistré, nous allons maintenant envoyer un push. Sélectionnez "Notifications Push" dans le menu de gauche, puis choisissez "Jetons de périphérique" dans son sous-menu. Sur la droite, une longue chaîne hexadécimale devrait apparaître sous "Jeton de périphérique". Copiez cette chaîne dans le presse-papiers, puis sélectionnez "Tester les notifications push" sur la gauche..

Assurez-vous que vous êtes sur l'onglet iOS et collez le jeton de votre appareil dans le champ "Jeton de l'appareil". Dans le champ "Alerte", entrez du texte. Après avoir vérifié que votre application ne fonctionne pas sur votre téléphone, cliquez sur "Envoyez-le!"

Dans quelques minutes, l'alerte devrait apparaître sur votre téléphone. Toutes nos félicitations! Vous venez d'envoyer votre première notification push! Faites-moi savoir dans les commentaires si vous avez du mal à le faire fonctionner.

Dans la dernière partie de cette série, nous explorerons certaines des autres fonctionnalités push présentées ici, telles que les badges et les sons, ainsi que certaines fonctionnalités plus avancées de l'API Urban Airship..