Intégrer les réseaux communautaires dans votre app

IOS6-2Avec la montée des réseaux sociaux, Apple a compris qu’il fallait frapper un grand coup. Pour ce faire, iOS 6 se trouve agrémenté de 2 nouvelles apps : Twitter et Facebook. Suite à leur intégration, les développeurs ont vu apparaitre plusieurs nouveaux frameworks pour accéder aux comptes de l’utilisateur.

La découverte des frameworks

Le framework Social

Ce framework est la base du système de socialisation de votre application. Il procure entre autres une interface de base pour gérer les actions de l’utilisateur ainsi qu’un modèle pour générer les requêtes HTTP nécessaires au développeur.

L’une des classes les plus utilisées est la SLComposeViewController. Elle fournit une vue, style pop-up, à l’utilisateur pour composer son post et vous pourrez même l’agrémenter d’une image ou d’un lien web. De part sa généricité, elle peut être utilisée pour Twitter, Facebook ou SinaWeibo. Vous ne verrez SinaWeibo dans les préférences que si vous avez un clavier chinois activé.

Le framework Account

Ce framework vous permet d’accéder aux comptes qui sont stockés sur votre machine. La classe ACAccount représente un compte enregistré sur votre machine, qui sera utilisé pour afficher les posts de l’utilisateur sur ses murs (Twitter…). S’il n’existe aucun compte, vous pourrez en créer un depuis votre app.

La publication simplifiée avec IOS 6

Avec iOS 6, Apple fournit un moyen très simplifié de publier sur Facebook et Twitter avec la classe SLComposeViewController de la librairie Social.framework. Comme vous l’aurez compris, SLServiceTypeTwitter identifie le réseau twitter et SLServiceTypeFacebook celui de Facebook.

Voyons comment faire concrètement.

Premièrement, pour concevoir votre post, vous allez avoir besoin d’importer la librairie “Social.framework” depuis la liste “Link binary with Libraries” dans l’onglet “Build Phases” de notre config. Je vous conseille de la mettre en “Optional” si vous souhaitez que votre app soit compatible avec les versions précédentes d’IOS.

Deuxièmement,  ajoutez une référence à celle-ci dans votre controller.

Troisièmement, implémentez le code ci-dessous sur votre événement (clic,…)

Ex :

if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter])

{

SLComposeViewController *tw = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter];

[tw setInitialText:@”Votre Message !”];

[tw addImage:[UIImage imageNamed:@”Votre Image”]];

[tw addURL:[NSURL URLWithString:@”Votre lien”]];

[self presentViewController:tw animated:YES completion:nil];

}

Ci-dessus, les méthodes pour construire le post ainsi que la méthode qui va vous permettre de faire apparaitre votre fenêtre. Le paramètre “complétion” vous permet de spécifier quoi faire quand l’utilisateur valide ou annule son post.

Tous ce que vous aurez à faire pour poster sur Facebook sera de changer SLServiceTypeTwitter par SLServiceTypeFacebook et le tour est joué.

L’utilisation du SDK Facebook

Comme vu dans le chapitre 3, Apple a fait tout le boulot pour les développeurs. Cependant, si on veut aller plus loin, nous pouvons utiliser le SDK que fournit Facebook pour naviguer sur leur site.

Configuration

Pour commencer, il va falloir d’abord vous créer un compte développeur sur Facebook : suivez les instructions du site pour créer votre app, puis téléchargez le sdk (https://developers.facebook.com).

Une fois la librairie installée, allez dans l’onglet “Info” de la config de votre target et insérez la propriété “FacebookAppID” avec comme valeur votre identifiant de développeur Facebook ainsi qu’une “URL Types” avec pour la propriété “URL Scheme” votre id précèdé de “fb”. Sans cela, l’authentification échouera !

L’authentification

Avant de pouvoir requêter le serveur, vous devez vous authentifier. Le SDK vous fournit une classe nommée “FBSession” pour cela. L’ouverture d’une session sera gardée en cache pour les futures requêtes jusqu’à déconnexion.

Vu que la session devra être accessible dans toute l’app, je vous conseille de la déclarer dans la classe “appDelegate.h” accessible de n’importe quelle classe.

Votre appDelegate doit contenir 3 methodes :

La première extrait votre token de l’URL pour vérifier si l’application est bien authentifiée, nous y reviendrons

– (BOOL)application:(UIApplication *)application

openURL:(NSURL *)url

sourceApplication:(NSString *)sourceApplication

annotation:(id)annotation {

return [self.session handleOpenURL:url];

}

La deuxième ferme la session quand on quitte l’app

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

[self.session close];

}

La troisième exécute un rafraîchissement lors du relancement de l’application (sauf si l’app a été tuée)

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

[FBSession.activeSession handleDidBecomeActive];

}

Il est temps de récupérer les données du site. Tout d’abord, voici comment implémenter l’authentification dans votre controller :

– (void) facebookAuthentication {

    // Récuperation de notre appDelegate

    MVAppDelegate *appDelegate = [[UIApplication sharedApplication]delegate];

    if (appDelegate.session == nil) {

        appDelegate.session = [[FBSession alloc] init];

    }

    if (appDelegate.session.isOpen) {

        [appDelegate.session closeAndClearTokenInformation];

    } else {

        if (appDelegate.session.state != FBSessionStateCreated) {

            appDelegate.session = [[FBSession alloc] init];

        }

// Si la session n’est pas ouverte, l’utilisateur est renvoyé sur la page d’authentification

[appDelegate.session openWithCompletionHandler:^(FBSession *session,

                                                         FBSessionState status,

                                                         NSError *error) {

            // Mise a jour du status de la session

    if (appDelegate.session.isOpen) {

        fbGraphToken = appDelegate.session.accessToken;

        [self performSelectorInBackground:@selector(loadFacebookWall) withObject:nil];

    }

        }];

    }

}

Ci-dessus, nous remarquons la présence de notre variable “session” définie précédemment dans la classe appDelegate qu’on initialise si elle ne l’est pas déjà, puis on vérifie le statut de la session.

Si la session est déjà ouverte, on fait le ménage en cache, sinon, on initialise une session puis on appelle la méthode(loadFacebookWall) qui va récupérer les informations à afficher.

La récupération des données

Voyons un exemple de requête Facebook et décortiquons-le !

@”https://graph.facebook.com/idDevFB/feed?limit=15&fields=message,picture,link,description,updated_time,likes,comments&access_token= fbGraphToken”

Nous dénombrons 4 paramètres :

  • Votre identifiant Facebook unique.
  • Le nombre de résultats souhaité.
  • Les informations voulues.
  • Le token retourné par l’authentification.

Il y a bien sûr plus de paramètres possibles que vous pourrez trouver sur le site de Facebook (https://developers.facebook.com/docs/reference/api/).

L’API vous retournera les informations au format JSON, vous allez donc devoir utiliser la classe “NSJSONSerialization” qui prend en paramètre un object “NSData”.

[NSJSONSerialization JSONObjectWithData:[returnData dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingMutableLeaves error:&error];

Une fois au format NSDictionary, vous pouvez récupérer les informations avec les mêmes mots clés que vous avez utilisés dans la requête. Pour récupérer les “likes” dans le dictionnaire “item”, cela donnera :

[[[item valueForKey:@”likes”] valueForKey:@”data”] valueForKey:@”name”];

Et IOS 7 alors ?

Surfant sur ce succès, Apple a intégré deux nouvelles apps natives. Vimeo pour la publication de courtes vidéos et Flickr pour les photos.

De plus, en analysant le SDK de la beta, on voit que les packages Social et Accounts ont été mis à jour puisque des références au réseau social professionnel LinkedIn apparait même si l’api est désactivée, Apple a donc préparé le terrain et pourrait l’activer (ou non) facilement dans une version ultérieure.

Conclusion

Vous maîtrisez désormais la puissance des réseaux sociaux. Utilisez-la pour rendre votre application encore plus attractive et plongez-vous dans la vie virtuelle !

Nombre de vue : 31

AJOUTER UN COMMENTAIRE