Iphone notification


Comment faire pour avoir des notifications sur son application Iphone ? C’est ce que nous allons voir tout de suite ! Cool

Avant de commencer à coder, il faut d’abord comprendre le fonctionnement et connaître les différents acteurs qui contribuent à ce service.


Les APNS sont des serveur Apple permettant de notifier une application présente sur un Iphone.

Le provider se charge d’envoyer à l’APNS, le « device token« , identifiant du téléphone à notifier
et le message à envoyer (payload).

La notification d’un terminal mobile comprends deux étapes distinctes : la récupération du device token ( lorsqu’on utilise pour la première fois ) et l’envoi d’une notification à partir du provider.

 

 

1. Comment s’effectue la récupération du token ?


Tout d’abord, l’application envoie une requête une requête à l’APNS par le device ( le téléphone ). Une fois cela effectué, l’APNS renvoie le token au device. Ne pas confondre un device token avec l’UDID qui est l’identifiant du téléphone !

Un device Token se présente sous cette forme là :

C9D4C07C FBBC26D6 EF87A44D 53E16983 1096A5D5 FD825475 56659DDD F715DEFC

ATTENTION : Le device token est unique pour chaque application utilisée sur un device particulier. Chaque application présente dans le device peut recevoir une notification d’un provider !

Le token doit donc être différent pour que l’APNS notifie la bonne application.

Voilà comment on peut illustrer les acteurs intervenant dans une demande de device token auprès de l’APNS:


 

 

2. Comment envoyer une notification ?

 

Le provider se connecte à l’APNS pour notifier une application présente sur un device. Il peut également notifier plusieurs devices à la fois, il faut donc spécifier le device token à notifier !

Un message à afficher doit également être fourni.

Voici comment on peut représenter une demande de notification auprès de l’APNS


 

Pour voir la liste des device tokens qui ne sont pas disponibles, il faut consulter ce qu’on appelle le feedback service. En effet, lorsqu’on désinstalle une appli sur son téléphone, il est normal de ne plus envoyer de notifications !

 

Bon tout ça c’est bien beau mais … comment mettre en place ce service ? Oo

Et bien il est temps de se pencher sur la mise en place de tout ça 😉

 

 

3. Mise en place du service

 

Le provider a besoin d’un certificat pour fonctionner, pour cela il faut :

– créer un compte développeur chez Apple (http://developer.apple.com/iphone/).

– UN MAC !

 

 

3.1 Création d’un certificat

 

Cette manipulation est à faire depuis un mac :

 

Il faut aller dans Keychain Access -> Certificat Assistance -> Request a certificat from a certificat authority.

Il vous faudra ensuite renseigner les champs Nom et Email. En veillant à ce que la case « Save to disk » est bien cochée, enregistrer le certificat là où vous le souhaitez sur votre ordinateur.

 

 

3.2. Avoir son App ID !

 

Chaque application sur Iphone a son App ID unique.

Depuis la page de votre compte développeur chez Apple, il faudra aller dans « App IDs » et cliquer sur « New App ID« .

Remplissez les différents champs ( Description et Bundle Identifier ).

 

 

3.3 Configurer le push


Il faut maintenant configurer le push notification de l’application.

Sélectionnez l’App Id qui vous intéresse dans la liste d’app Ids puis cliquez sur « Configurer« .


Maintenant il vous faut cocher Enable for Apple Push Notification service, cliquez maintenant sur le bouton « Configurer » à coté de Developpement Push SSL certificate.

Il faudra entrer le certificat que vous avez obtenu précédemment avec le keychain, cliquez ensuite sur « Generate » et sauvegardez le certificat quelque part sur votre ordinateur 😉

Le provider utilisera à l’avenir ce certificat (fichier aps_developer_identity.cer) pour faire la liaison avec l’APNS qui renverra une notification !

 

Il est maintenant d’attaquer la configuration du device !

 

 

4 Ajout d’un device

 

Pour tester nos applis sur notre Iphone, il faut d’abord enregistrer celui-ci, on peut utiliser autant de devices qu’on veut pour effectuer ses tests !

Première étape de l’enregistrement, la récupération de l’identifiant unique du device ( l’UDID) obtenu depuis xcode en faisant Window -> Organizer.

L’UDID se trouve à coté du libellé identifier.

 

 

Deuxième étape : il faut maintenant ajouter un device sur votre page développeur en se rendant dans la rubrique Devices puis sur « Add device« .

Entrez ensuite le nom et l’UDID du device avant de confirmer l’enregistrement !

 

 

 

5 Création d’un profil provisoire

 

Ce profil nous permettra d’utiliser notre device pour faire des tests. Il faudra impérativement l’installer sur chaque device sur lequel on veut tester notre appli !

Pour cela, allez sur votre page développeur dans la rubrique Provisioning et cliquez sur « New Profile« .

 

Spécifiez le nom de profil puis sélectionnez l‘app ID. On utilisera l’app ID qu’on a utilisé, « App_ID« . Il faut ensuite préciser la liste de devices que vous voulez associer à ce profil puis confirmer !

A l’apparition du profil sur votre écran, enregistrez le sur votre ordinateur, il aura pour extension mobileprovision.


 

6 Installation de l’application sur votre smartphone


Premièrement, il faut evidemment … connecter le device !

Déplacez votre profil créé ( le fichier .mobileprovision ) sur l’icôone Xcode dans votre Doc.

Dans Xcode, allez dans Window puis dans Organizer, vous devriez voir le profil installé sur le device une fois que vous le sélectionnez dans la liste à gauche !

 

 

 

7. Xcode ( coté client ) :

 

On peut, en plus du messaage texte de notification, avoir un son à jouer et un numéro de badge à afficher.

 

 

7.1 Comment ajouter un fichier son ?

 

Pour jouer un son, il est mieux d’ajouter un fichier .wav dans le répertoire Ressources de votre projet Xcode !

 

 

7.2 Configuration pour la notification

 

Sélectionnez le nom de votre appli sur Xcode puis faites Command-l . Dans l’onglet Properties, mettre le bundle identifier utilisé pour la création de l’app ID sur votre compte développeur (com.aptea.lbp).

 

Allez maintenant dans l’onglet Build, cherchez Code signing Identity. Faites Sélectionnez « Any Iphone OS device » puis sélectionnez le profil.

 

 

7.3 Demande de Device Token

 

Sous Xcode, ouvrir le fichier Delegate et ajouter les lignes de code suivante :

 

– (void)applicationDidFinishLaunching:(UIApplication *)application {

 

[window addSubview:viewController.view];

[window makeKeyAndVisible];

 

NSLog(@ »Registering for push notifications… »);

 

[[UIApplication sharedApplication]

registerForRemoteNotificationTypes:

(UIRemoteNotificationTypeAlert |

UIRemoteNotificationTypeBadge |

UIRemoteNotificationTypeSound)];

 

}

 

– (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {

 

NSString *str = [NSString

stringWithFormat:@ »Device Token=%@ »,deviceToken];

NSLog(str);

 

}

 

– (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {

application.applicationIconBadgeNumber = 0;

 

self.textView.text = [userInfo description];

 

if (application.applicationState == UIApplicationStateActive) {

 

// en cas d’application d’inactive, on ne fait rien, l’alerte va s’afficher toute seule !

 

UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@ »Notification récue »

message:[NSString stringWithFormat:@ »Cette application vient de recevoir cette notification :\n%@ »,

[[userInfo objectForKey:@ »aps »] objectForKey:@ »alert »]]

delegate:self

cancelButtonTitle:@ »OK »

otherButtonTitles:nil];

[alertView show];

[alertView release];

}

}

 

– (void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)err {

 

NSString *str = [NSString stringWithFormat: @ »Error: %@ », err];

NSLog(str);

}

 

– (void)dealloc {

[viewController release];

[window release];

[super dealloc];

}

Les lignes de code ci-dessus permettent d’afficher le device token du device sur lequel on teste l’application.

En cas de succès, on a :

Alors qu’en cas d’échec, un message d’erreur est généré !

Regardons maintenant comment ça se passe….

 

 

8. ….du coté serveur !

 

Afin d’envoyer une notification de push à l’APNS, il faut tout d’abord communiquer avec celui-ci en envoyant le certificat SSL créé,

construire le payload ( message à envoyer ) et envoyer la notification à l’APNS.

 

 

8.1 Comment générer Le certificat


Retrouvez le fichier aps_developer_identity.cer que vous avez généré et double-cliquez dessus pour l’importer dans Keychain !

Ouvrez maintenant Keychain sur votre mac, une fois dans l’onglet « Login« , filtrez tout ça selon la catégorie « Certificates« .

Puis, clic droit sur Apple Development Push Service -> Export Apple Development Push Service ID123 et sauvegardez le fichier sous format p12 ( nom_fichier.p12 ). Il n’est pas nécessaire de rentrer de mot de passe !

Faites la même manipulation pour la private key et enregistrez le dans le même format !

 

Il faut maintenant convertir ces fichiers dans un format spécifique, le format pem. Pour cela, l’utilisation de ligne de commande est nécessaire !

 

openssl pkcs12 -clcerts -nokeys -out apns-dev-cert.pem -in apns-dev-cert.p12

openssl pkcs12 -nocerts -out apns-dev-key.pem -in apns-dev-key.p12

 

openssl rsa -in apns-dev-key.pem -out apns-dev-key-noenc.pem

cat apns-dev-cert.pem apns-dev-key-noenc.pem > apns-dev.pem

 


8.2 Comment créer le payload

 

Le payload est un fichier Json qui contient :

– le message d’alerte à afficher sur le device ( Alert )

– Le badge, nombre à afficher dans le badge pour l’icône de l’application sur la page d’accueil du device

– Le texte indiquant le nom du son qui est activé au moment de l’alerte ( Sound )

 

Et maintenant un exemple de payload qui affiche un message d’alerte, « 1 » comme badge pour l’icône d’application et jouer le son spécifié lors de l’alerte.

{

« aps » : { « alert » : « This is the alert text », « badge » : 1, « sound » : « default » }

}

 

 

8.3 Générer le payload depuis un serveur php

 

Sur votre serveur, créez un fichier .php qu’on appellera par exempleapns.php . Placez dans le même répertoire le fichier .pem généré par ligne de commande, on l’appellera par exemple apns_dev.pem

Veillez bien à ce que le port 2195 soit bien ouvert.

 

 

 

Pour tester le service de push, on peut utiliser une URL de ce genre là :

 

http://mon_nom_de_domaine/apns.php?message=Hello%20from%20toto&badge=1&sound=sound.wav

 

Il est également possible de générer un payload sur un serveur C#/.NE.

Pour cela, une librairie open source de github est téléchargeable à cette adresse là :

https://github.com/Redth/APNS-Sharp


Surtout n’oubliez pas de consulter régulièrement le résultat du feedback service. En effet, ce service liste les devices où la notification est impossible, dans la plupart des cas, cela est dû à la désinstallation de l’application par l’utilisateur.

 

 

Ainsi s’achève ce long tuto sur la notification sur Iphone en espérant qu’il vous a été d’une grande aide et vous a éclairé sur certains mystères de la notification ! 😀

A très bientôt !

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.