Как показать диалог расширенного разрешения в FB с помощью нового API Graph? - PullRequest
5 голосов
/ 18 ноября 2010

Я использовал старый API остальных для отображения диалога разрешений в Facebook раньше.Теперь, с новым API графа, что я могу сделать?(Я в IFrame Apps).

Я знаю, что могу обмануть и открыть разрешение в отдельном окне:

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

вот так .. снова вызвать FB.login (скажем, я хочу, чтобы люди нажимали на другую кнопку и запускали расширенное диалоговое окно разрешений)

Однако это выглядит некрасиво и не похоже на диалоговое окно.

Есть ли способсоздать диалог?Я пытаюсь выяснить, может ли помочь FB.ui, но информации об этом очень мало.

Кроме того, я не думаю, что ответный обратный вызов когда-либо будет выполнен.Я не нажимаю кнопку «Не разрешать» или «разрешать», не перезванивает.любая идея?

хихих ... кто-нибудь может мне помочь?

Ответы [ 3 ]

21 голосов
/ 18 ноября 2010

Наконец-то. найти решение с другого сайта. первый. после FB.init (...); сделать это:

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

Затем, когда вам нужно вызвать диалоговое окно permssion, сделайте это:

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

Мне потребовалось так много времени, чтобы разобраться, посмотрев на объект FB и обнаружив, что есть UIServer с permissions.request, после чего я продолжаю искать и находить это решение. и FB.ui ничего не говорит об этом .. и FB.provide не задокументировано. СПАСИБО facebook.

3 голосов
/ 18 ноября 2010

Вам не нужно использовать javascript или какой-либо SDK для этого, хотя это будет проще.Вам нужно только перенаправить пользователя на URL-адрес, например так:

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

Вы всегда должны перенаправлять пользователя в верхнее окно либо с помощью JavaScript, либо по ссылке.

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

Если вывы используете PHP SDK или C # SDK, вы можете сделать так, чтобы sdk сгенерировал для вас URL, но процесс тот же.

Кроме того, redirect_uri не должен находиться в том же домене, что и приложение iFrame.URL-адрес.Это приведет к тому, что Facebook перенаправит вашего пользователя за пределы Facebook на ваш веб-сайт, затем вам следует перенаправить пользователя обратно в приложение внутри Facebook.Например:

  1. Пользователь нажимает кнопку входа
  2. пользователь переходит на страницу входа в Facebook
  3. Пользователь нажимает кнопку
  4. Facebook перенаправляет пользователя на http://www.example.com/callback
  5. Ваше приложение перенаправляет пользователя на http://apps.facebook.com/myapp/loggedin
1 голос
/ 21 ноября 2011

В одном из ответов предлагается взлом, при котором вы вызываете FB.provide(), а затем FB.ui(), чтобы открыть диалоговое окно расширенных разрешений.Это решение не работает для меня, но сейчас есть документированное решение, которое работает. Просто позвоните FB.login(), чтобы получить необходимые разрешения.

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

Еще лучше, вы можете запросить расширенные разрешения с помощью кнопки входа .

...