Catégories
Développement iPhone OS

Comment récupérer des coordonnées géographiques (Latitude et longitude) sur iPhone/iPad

iOS Geolocation

 Dans ce article nous allons voir comment obtenir de façon programmatique les coordonnées géographique d’un lieu depuis votre application iOS. La localisation est en enjeu important au sein d’une application. Elle a fait le succès de start-up comme Foursquare. Une bonne géolocalisation fait toute la différence, l’expérience utilisateur en est directement impactée.

 

 

Créer un nouveau projet Xcode:

Ouvrir Xcode, Créer un nouveau projet en choisissant View Base application. Nommons cette application “GPS_Location”.

Xcode Welcome page

Xcode View Based Application

Xcode crée automatiquement la structure du projet, et charge toutes les librairies nécessaires au fonctionnement de base d’une application de type View. Vous pourrez vérifier qu’une classe ViewController a bien été créée. De plus dans le dossier Resources des fichiers portant l’extension xib ont été générés.

Importer la classe de géolocalisation

Il suffit pour cela d’ajouter au projet le Core Location framework (CoreLocation.framework). Pour ce faire, il vous faut modifier le fichier GPS_LocationViewController.h  et ajouter :

GPS_LocationViewController.h
1 2 3 4 5 6 7 8 
#import <UIKit/UIKit.h> #import <CoreLocation/CoreLocation.h> @interface GPS_LocationViewController : UIViewController { CLLocationManager *locationManager; } @property (nonatomic, retain) CLLocationManager *locationManager; -(IBAction)Button:(id)sender; @end

 

Utiliser l’interface Builder

Faites un double-clique sur le fichier GPS_LocationViewController.xib pour l’ouvrir avec l’interface Builder. On va faire simple ici. On va juste afficher un bouton, qui au clic nous renverra les coordonnées géographique de la position courante.

Dans la liste à gauche (ou droite si vous l’avez déplacée 🙂 de l’interface builder, Faites donc un glisser-déposer d’un bouton (Round Rect Button) et placez le sur la page :

Xcode Bouton


Modifier le fichier GPS_LocationViewController.m

C’est le coeur même de l’application. C’est d’ici que nous allons gérer le comportement du controlleur associé au bouton. Modifier donc ce fichier et ajouter simplement :

GPS_LocationViewController.m
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 
#import "Current_LatLongViewController.h" @implementation Current_LatLongViewController @synthesize locationManager; - (void)dealloc { [super dealloc]; } - (void)didReceiveMemoryWarning { // Releases the view if it doesn’t have a superview. [super didReceiveMemoryWarning]; // Release any cached data, images, etc that aren’t in use. } #pragma mark – View lifecycle - (void)viewDidUnload { [super viewDidUnload]; } -(IBAction)Button:(id)sender { locationManager = [[CLLocationManager alloc] init]; locationManager.delegate = self; locationManager.desiredAccuracy = kCLLocationAccuracyBest; locationManager.distanceFilter = kCLDistanceFilterNone; [locationManager startUpdatingLocation]; CLLocation *location = [locationManager location]; // Configure the new event with information from the location CLLocationCoordinate2D coordinate = [location coordinate]; NSString *latitude = [NSString stringWithFormat:@"%f", coordinate.latitude]; NSString *longitude = [NSString stringWithFormat:@"%f", coordinate.longitude]; NSLog(@"dLatitude : %@", latitude); NSLog(@"dLongitude : %@",longitude); UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(50, 40, 250, 50)]; UILabel *myLabel = [[UILabel alloc] initWithFrame:CGRectMake(50, 80, 200, 50)]; UILabel *myLabel1 = [[UILabel alloc] initWithFrame:CGRectMake(50, 120, 200, 100)]; myLabel.textColor = [UIColor blackColor]; myLabel1.textColor = [UIColor blackColor]; label.backgroundColor = [UIColor clearColor]; myLabel.backgroundColor = [UIColor clearColor]; myLabel1.backgroundColor = [UIColor clearColor]; [myLabel setText:latitude]; [myLabel1 setText:longitude]; label.text = @"Current Latitude And Longitude"; [self.view addSubview:label]; [self.view addSubview:myLabel]; [self.view addSubview:myLabel1]; } - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { // Return YES for supported orientations return (interfaceOrientation == UIInterfaceOrientationPortrait); } @end

 

En compilant vous devriez connaitre rapidement votre localisation actuelle. Au fait, vous êtes où là ? 🙂

Catégories
Développement iPhone OS

Notification sur un Iphone

 

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 !