Blog technique sur mes expériences de développeur.
31 mai 2014
Dans le précédent article de ce blog, nous avons vu comment mettre en place le Facebook Connect dans une application Android. Par défaut, Facebook ne nous permet pas d’accéder à beaucoup d’informations concernant l’utilisateur comme par exemple son adresse e-mail.
Dans ce nouvel article nous allons donc voir comment accéder ajouter l’autorisation d’accéder à l’adresse e-mail d’un utilisateur lors de sa connexion dans notre application Android.
Cet article utilise une version dépréciée du SDK Facebook.
Pour ce ticket, je ne vais pas partir de zéro et me baser sur le précédent article permettant de mettre en place le Facebook Connect dans une application Android.
Ainsi, pour tout ce qui est téléchargement du SDK Facebook, création de l’application Facebook, création de l’application Android, intégration du SDK Facebook, connexion basique et déconnexion basique, je vous demande de vous référer au projet du précédent ticket. En fait, du projet réalisé dans le ticket précédent, nous allons tout conserver pour ne retravailler que la méthode connectToFacebook()
.
Nous avions vu que lancer une connexion à Facebook est très simple puisqu’il convient d’appeler la méthode statique openActiveSession
de la classe Facebook Session
. Pour pouvoir accéder à l’adresse e-mail de l’utilisateur ça sera un peu différent. En effet, nous allons devoir ouvrir une session à l’aide d’un OpenRequest
qui nous permet de personnaliser les permissions demandées à un utilisateur.
Nous allons donc commencer par créer une OpenRequest
et lui spécifier les permissions dont nous avons besoin (dans notre cas l’e-mail de l’utilisateur) via la méthode setPermissions
. Finalement, comme c’était le cas pour l’ouverture d’une session classique, nous allons également lui spécifier une callback dont la méthode call
sera appelée à la fin de la connexion.
La méthode setPermissions
prend pour paramètre une liste de chaînes de caractères représentant les différentes permissions. Dans le cadre de l’accès à l’adresse e-mail de l’utilisateur, il convient de demander la permission email
.
A noter que suivant que votre code soit exécuté dans un Fragment
ou une Activity
, il convient de choisir le bon constructeur de l’objet OpenRequest
.
final OpenRequest openRequest = new OpenRequest(getActivity()).setPermissions(Arrays.asList("email")).setCallback(new StatusCallback()
{
@Override
public void call(Session session, SessionState state, Exception exception)
{
}
});
Comme pour une connexion classique, dans la méthode call
de la callback, il convient de vérifier que la connexion a effectivement réussi en vérifiant l’état de la session. Si celle-ci est ouverte c’est que la connexion a réussi. Dans le cas contraire, nous pouvons afficher le message d’erreur stockée dans l’exception :
final OpenRequest openRequest = new OpenRequest(getActivity()).setPermissions(Arrays.asList("email")).setCallback(new StatusCallback()
{
@Override
public void call(Session session, SessionState state, Exception exception)
{
if (session.isOpened() == true) {
//connexion réussie !
}
else {
if(exception != null) {
//On affiche le message d'erreur
Toast.makeText(getActivity(), exception.getMessage(), Toast.LENGTH_LONG).show();
}
}
}
});
Il convient maintenant d’afficher, lorsque la session est ouverte, l’adresse e-mail de l’utilisateur. Cette information de nous est pas donnée automatiquement et nécessite la mise en place d’une requête via la méthode newMeRequest
de ma classe Facebook Request
. Cette méthode prend deux paramètres :
Cette nouvelle callback sera appelée quand la requête sera terminée et nous renverra l’utilisateur à travers la classe Facebook GraphUser
:
Request.newMeRequest(session, new GraphUserCallback() {
@Override
public void onCompleted(GraphUser user, Response response) {
if(user != null) {
//on affiche l'e-mailde l'utilisateur
Toast.makeText(getActivity(), user.asMap().get("email").toString(), Toast.LENGTH_LONG).show();
}
else {
//on affiche un message d'erreur
Toast.makeText(getActivity(), "Impossible de récupérer les informations", Toast.LENGTH_LONG).show();
}
}
}).executeAsync();
Pour pouvoir déclencher la connexion à notre application Facebook, il nous reste trois étapes à mettre en place :
OpenRequest
à l’aide de cette session fraîchement créée.final Session session = new Session.Builder(getActivity().getApplicationContext()).build();
Session.setActiveSession(session);
session.openForRead(openRequest);
Voici donc notre méthode connectToFacebook
complète :
public void connectToFacebook() {
final OpenRequest openRequest = new OpenRequest(getActivity()).setPermissions(Arrays.asList("email")).setCallback(new StatusCallback()
{
@Override
public void call(Session session, SessionState state, Exception exception)
{
if (session.isOpened() == true)
{
Request.newMeRequest(session, new GraphUserCallback() {
@Override
public void onCompleted(GraphUser user, Response response) {
if(user != null) {
//on affiche l'e-mailde l'utilisateur
Toast.makeText(getActivity(), user.asMap().get("email").toString(), Toast.LENGTH_LONG).show();
}
else {
//on affiche un message d'erreur
Toast.makeText(getActivity(), "Impossible de récupérer les informations", Toast.LENGTH_LONG).show();
}
}
}).executeAsync();
}
}
});
final Session session = new Session.Builder(getActivity().getApplicationContext()).build();
Session.setActiveSession(session);
session.openForRead(openRequest);
}
Voici alors quelques captures d’écran de la connexion à Facebook :