lundi 21 mai 2012

[Tutorial][iOS] Mise en place des Notifications Push

Bonjour,


Les Notifications Push sont très pratiques pour les développeurs d'applications iOS. Elles leur permettent d'informer les utilisateurs de toute sorte d'informations pratiques (dispo de mise à jour, évènement important, etc.) sans nécessiter que l'application soit ouverte côté utilisateur.


En cela, ces notifications sont un outil marketing essentiel à intégrer dans toute app qui se respecte.


Cependant, lorsqu'on regarde sur le site d'Apple pour avoir une idée de ce qu'il faut mettre en place pour intégrer ces notifications ça semble complexe : il faut mettre en place une partie client, une partie serveur et il faut mettre les mains dans le cambouis pour générer des certificats.


Heureusement, le monde iOS est dynamique et fourmille d'outil développés par des parties tierces pour nous faciliter le travail. Et dans le cadre des APNS (Apple Push Notification System) la crème de la crème est Urban Airship. Plusieurs possibilités vous sont offertes en termes d'offres. Pour la plupart des développeurs indépendants l'offre gratuite suffira largement puisqu'elle propose 1 million de notifications gratuites par mois, si vous dépassez le million vous serez facturés 0.001€ pour chaque notification supplémentaire.


Une fois inscrit sur Urban Airship nous allons procéder par étape logique :


1) Création d'un certificat global


- Ouvrez l'outil "Trousseau d'accès", allez dans le menu "Assistant de certification" et choisissez "Demander un certificat à une autorité de certificat"


- Dans la pop up qui s'ouvre, saisissez votre email ainsi qu'un nom pour votre certificat global (ex : "NOM Prénom Developer Key") puis sélectionner "Enregistrer sur le disque" et valider.


- L'outil vous propose de télécharger le certificat ainsi généré. Ce certificat va vous servir à obtenir les certificats suivant donc gardez le précieusement dans un coin, il pourra vous être utile pour d'autres applications futures


2) Création des certificats pour les notifications push


- Rendez-vous sur le portail Apple Developer et accédez au Provisionning Portal


- Cliquez sur AppID et cliquez sur le bouton Configure qui se situe à droite sur la ligne correspondant à l'application pour laquelle vous souhaitez paramétrer les notifs.


- Cochez la case "Enable for Apple Push Notification service"


- Commençons par configurer les notifications pour l'environnement de développement afin que vous puissiez les tester :

Cliquez sur le bouton Configure de la ligne "Development Push SSL Certificate"

- Suivez les étapes de la pop up qui s'affiche en uploadant le certificat généré dans l'étape 1)

- Vous obtenez alors au bout de quelques secondes un certificat de développement


- Téléchargez ce certificat puis double cliquez dessus afin qu'il se rajoute au trousseau de clé.
Si tout va bien ce certificat est visible dans la partie "Mes Certificats" et il est associé à votre clé (un petit triangle doit être visible à gauche du certificat pour faire apparaître la clé en question)
Il peut arriver que le certificat ne soit pas ajouté au bon endroit et que du coup il ne soit pas associé à votre clé. Il faut dans, ce cas précis, supprimer le certificat (Clic droit > Supprimer) puis, au lieu de double cliquer à nouveau sur le certificat de dév que vous avez téléchargé précédemment, drag and droppez le dans la partie Mes Certificat du trousseau de session. Et là, normalement, plus de souci !


- Il vous faut maintenant exporter ce certificat de développement car vous allez devoir l'uploader sur Urban Airship. Pour ce faire, faite un clic droit sur votre certificat dans le Trousseau d'accès puis choisissez Exportez. Donnez alors un nom à ce certificat (ex : PUSH_MonAppli_Certif_DEV) et veillez à ce que le format du fichier sélectionné soit bien .p12. Il vous sera demandé de définir un mot de passe pour ce certificat, laissez le à vide et cliquez sur OK (c'est une recommandation de Urban Airship, cependant si vous êtes du genre paranoïaque vous pouvez tout de même saisir un mot de passe mais sachez qu'il vous faudra le saisir sur le portail de Urban Airship également sans quoi les notifs ne pourront pas marcher)


- Réitérez l'ensemble des étapes précédentes pour obtenir un certificat PUSH_MonAppli_Certif_PROD pour les notifications pour l'environnement de production.


- Une fois les deux certificats en votre possession il reste une dernière étape, trop souvent oubliée, qui est fondamentales pour la prise en compte dans votre application des notifications : il vous faut régénérer vos fichiers de provisionning (développement, adhoc et production) et mettre à jour votre appli avec ces nouveaux fichiers de provisionning (dans l'onglet "Build Settings" de XCode)


Le plus dur (et le plus fastidieux surtout) est fait !


3) Création de votre application dans Urban Airship


- Rendez vous sur Urban Airship, loguez-vous et créez DEUX nouvelles applications. Pourquoi deux ? Parce qu'il faut différencier votre application de test pointant, pour les notifications, sur l'environnement de test d'Apple et votre application adhoc ou de production qui elle va pointer sur l'environnement de production d'Apple.
Pour chaque application renseignez simplement 
a) un nom (un conseil : suffixez le nom de chaque application par -DEV ou -PROD, ainsi vous vous y retrouverez facilement lorsqu'il vous faudra envoyer vos notifications sur l'un ou l'autre des environnements).
b) l'icône du jeu
c) sélectionnez "development environement" ou "production environment" selon l'environnement cible
d) la catégorie de votre application
Ensuite cochez "Push Notification Support"
Puis dans la partie Apple qui apparaît, uploader le certificat .p12 correspondant à l'environnement Apple que vous ciblez cochez la case "Push debug mode" pour votre application pointant sur l'environnement de test d'Apple (pour celle de prod vous pouvez cocher cette case mais vos notifications seront alors envoyées plus lentement donc il vaut mieux décocher cette case)


Validez votre saisie.


S'affichent alors des informations importantes concernant votre application dont les deux informations suivantes :


a) Application Key
b) Application Secret


On y est presque, il reste une ultime étape assez rapide : mettre à jour le code de votre application !


4) Mise à jour du code de l'application pour la prise en compte des notifications push


Allez on arrive au bout de ce tutorial, il reste juste à mettre à jour votre code applicatif. Vous allez voir, c'est facile !


- Téléchargez la dernière version de la librairie Urban Airship : ici


- Dézippez le fichier téléchargé et copiez le répertoire Airship dans le répertoire de votre projet.


- Drag and dropez le répertoire PushLib ainsi que la librairie libUAirship dans votre projet XCode


- Ajoutez dans la partie "Build Settings" de XCode, dans la rubrique Header Search Path, le chemin vers le répertoire Airship (si vous l'avez copié dans votre répertoire projet, le chemin à ajouter est Airship/**, les "**" permettent d'indiquer à X-Code qu'il faut considérer l'ensemble des fichiers dans le répertoire et ses sous-répertoires) 


- Créez dans XCode un nouveau fichier plist : AirshipConfig.plist. Dans cette liste ajoutez les couples clé / valeur suivants :

DEVELOPMENT_APP_KEY / L'Application Key (sous forme de NSString) de votre application de dév dans Urban Airship
DEVELOPMENT_APP_SECRET / L'Application Secret (sous forme de NSString) de votre application de dév dans Urban Airship
PRODUCTION_APP_KEY / L'Application Key (sous forme de NSString) de votre application de prod dans Urban Airship
PRODUCTION_APP_SECRET / L'Application Secret (sous forme de NSString) de votre application de prod dans Urban Airship
APP_STORE_OR_AD_HOC_BUILD / Paramètre ayant comme valeur un booléen et valant NO tant que vous testez votre application. Pensez bien à passer ce paramètre à YES dès que vous êtes prêt à soumettre votre application à Apple.


- Dans le code du delegate principal de votre application,
1) dans la méthode application:didFinishLaunchingWithOptions:
a) initialisez une instance de UAirship :



//Init Airship launch options
NSMutableDictionary *takeOffOptions = [[[NSMutableDictionary alloc] init] autorelease];
[takeOffOptions setValue:launchOptions forKey:UAirshipTakeOffOptionsLaunchOptionsKey];
// Create Airship singleton that's used to talk to Urban Airship servers.
// Please populate AirshipConfig.plist with your info from http://go.urbanairship.com
[UAirship takeOff:takeOffOptions];


b) Indiquez que votre application veut pouvoir afficher des notifications :


// Register for notifications
[[UIApplication sharedApplication]
 registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge |
                                     UIRemoteNotificationTypeSound |
                                     UIRemoteNotificationTypeAlert)];


2) Il faut également correctement fermer cette instance dans la méthode application:willTerminate:


- (void)applicationWillTerminate:(UIApplication *)application {
    [UAirship land];
}

3) Enfin, pour terminer, rajoutez la méthode vous permettant de traiter correctement les notifications une fois reçues :




- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    // Updates the device token and registers the token with UA
    [[UAirship shared] registerDeviceToken:deviceToken];
}

Et voilà !!
Votre application est désormais prête à afficher des notifications push !
Le plus simple pour tester cela est d'utiliser l'interface de Urban Airship :

1) connectez-vous à votre compte Urban Airship puis sélectionnez votre application (celle de dév qui est justement faite pour tester que tout fonctionne).
2) dans le menu qui se trouve sur la gauche cliquez sur Push
3) cliquez sur Send Broadcast
4) saisissez alors, si besoin, la valeur du Badge (la valeur qui doit apparaître dans le cercle rouge sur l'icône de votre application)
5) saisissez le message à afficher dans la notification dans le message alert
6) renseignez éventuellement le son à émettre lors de la réception de la notification. Le nom du son que vous renseignez ici doit correspondre à un son qui se trouve dans votre application. Si vous ne renseignez rien ou si le nom renseigné ne correspond pas à un son de votre app c'est le son par défaut qui sera utilisé
7) Cliquez sur Send It, attendez quelques secondes et la notification s'affiche alors sur votre iPhone !! (Assurez vous d'avoir lancé l'application au moins une fois sur votre iPhone avant de faire cela et, sur la pop up s'affichant au lancement, d'avoir accepté la réception des notifications)

Ce sera tout pour aujourd'hui ! Désormais vous n'avez plus d'excuse pour refuser d'intégrer les notifications dans votre app !
Par contre, utilisez les avec parcimonie car, si vous en abusez, vous risquez de voir vos utilisateurs désinstaller votre application ou simplement (pour les plus connaisseurs d'entre eux) désactiver ces dernières.

Olinsha