2010-11-18 5 views
5

Ich habe die alte Rest API verwendet, um den Permission Dialog in Facebook zu zeigen. Jetzt, mit der neuen Grafik-API, was kann ich tun? (Ich bin in IFrame Apps).Wie zeigt man den Extended Permission Dialog im FB mit der neuen Graph API an?

Ich weiß, dass ich die Erlaubnis, in einem separaten Fenster betrügen und Popup können:

FB.login(function(response) { 
        if (response.session) { 
        if (response.perms) { 
         // user is logged in and granted some permissions. 
         // perms is a comma separated list of granted permissions 
        } else { 
         // user is logged in, but did not grant any permissions 
        } 
        } else { 
        // user is not logged in 
        } 
       }, {perms:'offline_access'}); 

so .. rufen Sie die FB.login wieder (wir sagen, dass ich die Menschen auf einen anderen Knopf klicken möchten und Trigger der erweiterte Permisison-Dialog)

Es sieht jedoch hässlich aus, und es sieht nicht wie ein Dialog aus.

Gibt es eine Möglichkeit, den Dialog zu generieren? Ich versuche herauszufinden, ob FB.ui helfen kann, aber es gibt nur wenig Informationen darüber.

Darüber hinaus glaube ich nicht, dass die 'Antwort' Rückruf jemals ausgeführt werden. Weder ich klicke "nicht erlauben" oder "erlauben", wird keinen Rückruf auslösen. irgendeine Idee?

hihih..kann mir jemand helfen?

Antwort

21

Endlich. finde die Lösung von einer anderen Website. zuerst. nach FB.init (...); das tun:

FB.provide("UIServer.Methods", 
    { 'permissions.request' : { size : {width: 575, height: 300}, 
    url: 'connect/uiserver.php', 
    transform : FB.UIServer.genericTransform } 
    }); 

Dann, wenn Sie den permssion Dialog aufrufen müssen, tun:

FB.ui({method: "permissions.request", "perms": 'email,offline_access'}, 
    callBack); 

Es hat mich so lange durch einen Blick auf die FB-Objekt, um herauszufinden, und herauszufinden, gibt es UIServer mit permissions.request dann suche ich weiter und finde diese Lösung. und FB.ui redet nichts darüber .. und FB.provide ist nicht dokumentiert. DANKE Facebook.

+1

Vielen Dank !!! Facebook braucht dringend eine bessere Dokumentation seiner neuen API. – Nixarn

+0

Zum jetzigen Zeitpunkt tut FB.provide() + FB.ui() wie oben beschrieben nichts - was nicht verwunderlich ist, da hier undokumentierte Funktionen genutzt werden. – ObscureRobot

+0

Viele Funktionen von Facebook sind nicht dokumentiert. Danke Gott für SO. – Frans

3

Sie benötigen kein JavaScript oder SDK, obwohl dies die Arbeit erleichtern würde. Sie müssen nur den Benutzer zu einer URL wie folgt umgeleitet werden:

https://graph.facebook.com/oauth/authorize? 
    client_id=...& 
    redirect_uri=http://www.example.com/callback& 
    scope=user_photos,user_videos,publish_stream 

Sie immer den Benutzer auf das obere Fenster umleiten sollte entweder mit Javascript oder dem Link.

window.top.location = <login_url> or <a href=<login_url> target="_top">Login</a> 

Wenn Sie das PHP SDK oder die C# SDK verwenden könnten Sie die URL für Sie die sdk erzeugen, aber das Verfahren ist das gleiche.

Auch nicht, dass die redirect_uri auf der gleichen Domäne wie die URL Ihrer iFrame-Anwendung sein muss. Dies führt dazu, dass Facebook Ihren Nutzer außerhalb von Facebook auf Ihre Website umleitet. Sie sollten den Nutzer dann zurück zur App innerhalb von Facebook umleiten. Zum Beispiel:

  1. Benutzer Klicks anmelden
  2. Benutzer geht auf Facebook-Login-Seite
  3. Nutzer klickt
  4. Facebook leitet den Benutzer auf http://www.example.com/callback
  5. Ihre App leitet den Benutzer auf http://apps.facebook.com/myapp/loggedin
erlauben
+0

Ich weiß über den Link und PHP. aber meine Anforderung ist, JS zu verwenden und es so aussehen zu lassen, wie der FBML-Dialog. Danke für die Antwort tho. :) – murvinlai

+1

auch die Umleitung funktioniert nicht, wenn Sie Facebook Canvas-Apps verwenden. –

1

Eine der Antworten schlägt einen Hack vor, in dem Sie FB.provide() und dann FB.ui() aufrufen, um den erweiterten Berechtigungsdialog zu öffnen. Diese Lösung funktioniert nicht für mich, aber jetzt gibt es eine dokumentierte Lösung. Just call FB.login(), um die erforderlichen Berechtigungen zu erhalten.

FB.login(function(response){ 
    if (response.authResponse) { 
     alert('success!'); 
    } else { 
     alert('fail!'); 
    } 
    },{scope: 'email'}); 

Noch besser können Sie ask for extended permissions with the login button.

Verwandte Themen