2010-06-28 10 views
3

Je crée un site Facebook Connect basé sur Flash (AS3) à l'aide de l'API Actionscript 3 et, bien que la fonctionnalité FB Connect de base soit en place pour permettre aux utilisateurs de se connecter correctement, Je cours dans les murs en essayant de demander certaines permissions étendues. Je ne suis pas positif, mais il semble comme si il y a deux limites assez importantes à l'API AS3:Actionscript 3 Limitations de l'API Facebook

  1. Vous devez demander des autorisations étendues séparément de l'appel de connexion initial. En d'autres termes, deux dialogues modaux, pas un, sont requis. Cela semble être dû au fait que la connexion est gérée avec des instances de FacebookSessionUtil, alors que les demandes d'autorisations étendues sont gérées par des instances de FacebookSessionUtil.Facebook.

  2. Il ne semble pas qu'il existe un moyen d'inviter les utilisateurs à autoriser le partage de leur adresse e-mail avec votre application. Bien que j'ai parcouru de manière assez approfondie, il semble que la permission "EMAIL" là seulement invite les utilisateurs à autoriser votre application à leur envoyer des e-mails via Facebook, de ne pas partager leur adresse e-mail directement.

Mes hypothèses sont-elles erronées ici? Serais-je mieux d'utiliser JS et ExternalInterface pour ce genre de travail? Je préfère ne pas reconstruire ce qui est en place mais si ces limitations sont réelles, il semble que je n'aurai pas d'autre choix.

Tout retour ou assistance serait grandement apprécié. Merci!

+0

afaik facebook ne laisse jamais les parties tierces accéder à l'adresse e-mail, une autre bibliothèque client ne vous aidera pas. – grapefrukt

+0

grapefrukt - le premier élément "data" mentionné dans la liste des autorisations étendues de Facebook est l'adresse e-mail principale de l'utilisateur: http://developers.facebook.com/docs/authentication/permissions – justinbach

Répondre

1

1) Vous devrez remplacer la fonction onLogin dans la classe DesktopSession et ajouter vos paramètres d'autorisation étendus.

2) Cela devrait fonctionner à moins que la modification du modèle d'autorisation ne permette que les courriels mandatés. Essayez de l'interroger depuis l'instance de l'utilisateur facebook et voyez ce que vous obtenez.

test dans le Developer console avec l'appel api suivant dans le bloc de la console

<button id="fb-login">Login &amp; Permissions</button> 

<script> 
document.getElementById('fb-login').onclick = function() { 
    var cb = function(response) { 
    Log.info('FB.login callback', response); 
    if (response.session) { 
     Log.info('User logged in'); 
     if (response.perms) { 
     Log.info('User granted permissions'); 
     } 
    } else { 
     Log.info('User is logged out'); 
    } 
    }; 
    FB.login(cb, { perms: 'email' }); 
}; 
</script> 
+0

Merci, phwd. Pourriez-vous être un peu plus précis sur la nature de la dérogation onLogin de 1)? Il semble que onLogin se contente de l'URL habituelle de connexion Facebook (http://www.facebook.com/login.php) et y ajoute un tas de variables GET supplémentaires. Une autre variable est-elle nécessaire dans l'URL? – justinbach

+0

Oui votre email paramètre d'autorisation étendue: 'email' J'ai essayé de surcharger la classe en l'étendant mais la session de bureau est dans tout. J'ai donc fait une recherche rapide et découvert que mon idée a déjà été pensée :(.Ce mec [Jozef Chúťka] (http://blog.yoz.sk/2010/01/facebook-extended-permissions-with-authorization-by-overriding-class-in-swc/) a un tutoriel complet sur comment obtenir pour travailler. Il a essentiellement copié la classe dans son src en utilisant le même modèle de répertoire que dans facebook swc pour cette classe. – phwd

+0

Gardez à l'esprit que cela ne fonctionnera que si l'utilisateur n'est pas déjà connecté. FB Api (moralement, si vous me demandez) remplit response.perms seulement si vous vous êtes réellement connecté. Si vous étiez déjà loggen-in, votre callback sera appelé, mais perms sera vide. J'ai lutté avec ce même problème la semaine dernière. Il existe une méthode getUserStatus (ou quelque chose du genre) qui ne renverra pas les permissions non plus. –

1

est ici une autre façon, vous pouvez faire tout cela directement dans votre AS3 (très pratique)

c'est un extrait de code d'un jeu que je construis sur facebook qui nécessite des autorisations à un certain point dans le jeu .. cela fonctionne bien. (notez que vous devez maintenant spécifier un channel.html et un oauth: true dans votre appel init)

assurez-vous d'avoir la version la plus récente de l'API (maintenant 1.7) (http://code.google. com/p/facebook-actionscript-api)

private function facebookInit():void  // START THE SESSION… 
{ 
    Facebook.init(APP_ID, facebookInitHandler,{ 
     appId: APP_ID, 
     status: true, 
     cookie: true, 
     xfmbl: true, 
     channelUrl: ‘http://yoursiteurl/channel.html', 
     oauth: true, 
     perms: “publish_stream,email” 
    }); 
} 

private function facebookInitHandler(response:Object, fail:Object):void 
{ 
    if (response.accessToken) 
    { 
     userAccessToken = JSON.encode(response.accessToken); 
     facebookLoggedInWithToken = true; 
     loadProfileData(); 
    } else { 
     facebookLoggedInWithToken = false; 
    } 
} 

private function loadProfileData():void 
{ 
    var request:String = ‘/me’; 
    var requestType:String = ‘GET’; 
    var params:Object = null; 
    Facebook.api(request, loadProfileDataHandler, params, requestType); 
} 

private function loadProfileDataHandler(response:Object, fail:Object):void 
{ 
    if (response) { 
     userID = response.id; 
     fullName = response.name; 
     firstName = response.first_name; 
     lastName = response.last_name; 
     userEmail = response.email; 
     userPicURL = ‘http://graph.facebook.com/‘ + userID + ‘/picture’; 
    } 
} 

profitez-en!

+0

la partie importante est options.status = true –