2010-11-18 7 views
5

Utilicé la antigua API de reposo para mostrar el cuadro de diálogo de permisos en Facebook. Ahora, con la nueva API de gráficos, ¿qué puedo hacer? (Estoy en IFrame Apps).¿Cómo se muestra el cuadro de diálogo Permiso ampliado en FB utilizando la nueva API Graph?

sé que puedo engañar y emergente el permiso en una ventana separada:

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

de esa manera .. llamar al FB.login nuevo (quiero decir que quiero que la gente a hacer clic en un botón diferente y el gatillo el diálogo extendido de permisison)

Sin embargo, se ve feo y no parece un diálogo.

¿Hay alguna manera de generar el diálogo? Intento averiguar si FB.ui puede ayudar pero solo hay poca información al respecto.

Además, no creo que la devolución de llamada de "respuesta" se haya ejecutado alguna vez. Ni hago clic en "No permitir" o "permitir", no activará ninguna devolución de llamada. ¿alguna idea?

hihih..alguien me puede ayudar?

Respuesta

21

Finalmente. averigua la solución desde otro sitio web. primero. después de FB.init (...); hacer eso:

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

Entonces, cada vez que necesite llamar al diálogo permssion, hacer eso:

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

que me llevó mucho tiempo para averiguar por mirar el objeto FB y saber que hay UIServer con permisos.request luego de eso, sigo buscando y encuentro esta solución. y FB.ui no habla nada al respecto ... y FB.provide no está documentado. GRACIAS facebook.

+1

¡¡¡Muchas gracias !!! Facebook necesita desesperadamente una mejor documentación de su nueva API. – Nixarn

+0

Al escribir estas líneas, FB.provide() + FB.ui() como se describe arriba no hace nada, lo cual no es sorprendente ya que aprovecha las características no documentadas. – ObscureRobot

+0

Muchas características de Facebook no están documentadas. Gracias a Dios por SO. – Frans

3

No necesita usar javascript o SDK para esto, aunque lo haría más fácil. Sólo es necesario redirigir al usuario a una URL como esta:

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

siempre se debe redirigir al usuario a la ventana superior, ya sea con javascript o el enlace.

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

Si está utilizando el SDK de PHP o C# SDK que podría tener el SDK genera la url para usted, pero el proceso es el mismo.

Además, no es que el redirect_uri tenga que estar en el mismo dominio que la URL de su aplicación iFrame. Esto causará que Facebook redirija a su usuario fuera de Facebook a su sitio web, luego debe redirigir al usuario a la aplicación dentro de Facebook. Por ejemplo:

  1. clics Inicio de sesión
  2. usuario va a la página de inicio de sesión de Facebook
  3. clics del usuario permiten
  4. Facebook redirige al usuario a http://www.example.com/callback
  5. Su aplicación redirige al usuario a http://apps.facebook.com/myapp/loggedin
+0

Sé sobre el enlace y php. pero mi requisito es usar JS, y hacer que se vea igual que el diálogo FBML. Gracias por responder. :) – murvinlai

+1

también redirigir no funciona cuando se utilizan aplicaciones Facebook Canvas. –

1

Una de las respuestas sugiere un hack en el que llama al FB.provide() y luego al FB.ui() para mostrar el cuadro de diálogo de permisos extendidos. Esa solución no funciona para mí, pero ahora hay una solución documentada que sí lo hace. Just call FB.login() para obtener los permisos que necesita.

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

Aún mejor, puede ask for extended permissions with the login button.

Cuestiones relacionadas