5 Stimmen

Wie zeigt man den erweiterten Erlaubnisdialog in FB mit der neuen Graph API an?

Ich habe früher die alte Rest-Api für die Anzeige des Erlaubnisdialogs in Facebook verwendet. Jetzt, mit der neuen Graph-API, was kann ich tun? (Ich bin in IFrame Apps).

Ich weiß, dass ich schummeln und die Erlaubnis in einem separaten Fenster einblenden kann:

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'});

Rufen Sie FB.login erneut auf (sagen wir, ich möchte, dass die Leute auf eine andere Schaltfläche klicken und den erweiterten Genehmigungsdialog auslösen).

Allerdings sieht es hässlich aus und nicht wie ein Dialog.

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

Außerdem glaube ich nicht, dass der "Antwort"-Callback jemals ausgeführt wird. Weder ich klicken Sie auf "nicht zulassen" oder "zulassen", wird keine Rückruf auslösen. eine Idee?

hihih..kann mir jemand helfen?

21voto

murvinlai Punkte 46187

Schließlich finden Sie die Lösung auf einer anderen Website. zuerst. nach FB.init( ... ); tun Sie das:

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

Rufen Sie dann den Genehmigungsdialog auf, wenn Sie ihn benötigen:

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

Es dauerte mich so lange, um herauszufinden, durch einen Blick auf das FB-Objekt und finden Sie heraus, es ist UIServer mit permissions.request dann aus, dass, ich halten suchen und finden Sie diese Lösung. und FB.ui spricht nichts darüber.. und FB.provide ist nicht dokumentiert. DANKE Facebook.

0 Stimmen

Zum jetzigen Zeitpunkt bewirkt FB.provide() + FB.ui(), wie oben beschrieben, nichts - was nicht überraschend ist, da dies undokumentierte Funktionen ausnutzt.

0 Stimmen

Viele Funktionen von Facebook sind undokumentiert. Gott sei Dank gibt es SO.

3voto

Nate Totten Punkte 8864

Sie brauchen dafür weder Javascript noch ein SDK zu verwenden, auch wenn es die Sache einfacher machen würde. Sie müssen den Benutzer nur auf eine URL wie diese umleiten:

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

Sie sollten den Benutzer immer zum obersten Fenster umleiten, entweder mit Javascript oder mit dem Link.

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

Wenn Sie das PHP-SDK oder das C#-SDK verwenden, können Sie die URL vom SDK generieren lassen, aber der Vorgang ist derselbe.

Außerdem muss die redirect_uri nicht auf derselben Domäne liegen wie die URL Ihrer iFrame-Anwendung. 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 klickt auf Login
  2. Benutzer geht zur Facebook-Anmeldeseite
  3. Benutzer-Klicks erlauben
  4. Facebook leitet den Nutzer weiter zu http://www.example.com/callback
  5. Ihre Anwendung leitet den Benutzer weiter zu http://apps.facebook.com/myapp/loggedin

0 Stimmen

Ich weiß über den Link und php. aber meine Anforderung ist es, JS zu verwenden, und machen es das gleiche wie das FBML-Dialogfeld aussehen. Vielen Dank für die Antwort :)

1 Stimmen

Außerdem funktioniert die Weiterleitung nicht bei der Verwendung von Facebook Canvas-Apps.

1voto

ObscureRobot Punkte 7198

Eine der Antworten schlägt einen Hack vor, bei dem Sie die FB.provide() und dann FB.ui() um den erweiterten Berechtigungsdialog aufzurufen. Diese Lösung funktioniert bei mir nicht, aber es gibt jetzt eine dokumentierte Lösung, die funktioniert. Einfach anrufen FB.login() um die erforderlichen Genehmigungen zu erhalten.

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

Noch besser: Sie können bei der Anmeldung nach erweiterten Rechten fragen Taste .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X