В FB.ui с методом permissions.request редирект uri не работает должным образом - PullRequest
0 голосов
/ 28 февраля 2011

Привет, я недавно изменил свое приложение, оно просто берет основную информацию.разрешение от пользователей, но теперь я хочу разрешение на потоковую публикацию тоже.Поэтому я проверяю на своей странице индекса, что если пользователям не предоставлено разрешение на публикацию в потоке, я просто показываю ему диалоговое окно с разрешениями следующим образом:

<?php $permission = $facebook->api(array('method' =>   'users.hasAppPermission','ext_perm'=>'publish_stream','uid'=> $uid));
   if($permission != '1')
   {
    echo "<script type='text/javascript'>

                var dialog = {
                    method: 'permissions.request',
                    perms: 'publish_stream'
                };  

            FB.ui(dialog,null);
        </script>";
   }
?>

Этот код правильно отображает окно разрешений, но проблема в том, что когда пользователь предоставляет разрешение, он перенаправляетсяк моему холсту URL (URL на странице серверов), а не на странице холста (т.е. http://apps.facebook.com/xyz).). Чтобы решить эту проблему, я добавил к ней redirect_uri как

   var dialog = {
       method: 'permissions.request',
       perms: 'publish_stream',
       redirect_uri: 'http://apps.facebook.com/xyz'
   };

, но все равно он не работает.

Пожалуйста, помогите мне, как решить эту проблему.

1 Ответ

4 голосов
/ 28 февраля 2011

Попробуйте вместо этого:

<?php
$loginUrl = $facebook->getLoginUrl(array(
    "scope" => "publish_stream",
    "redirect_uri" => "http://apps.facebook.com/xyz"
));

$isGranted = $facebook->api(array(
    "method"    => "users.hasAppPermission",
    "ext_perm"   => "publish_stream",
    "uid"       => $uid /* The user ID of the user whose permissions
                         * you are checking. If this parameter is not
                         * specified, then it defaults to the session user.
                         */
));
if($isGranted !== "1")
    echo("<script> top.location.href='" . $loginUrl . "'</script>");
?>

Вы также можете использовать FQL для проверки прав доступа.Подробнее об этом можно узнать здесь .


ОБНОВЛЕНИЕ:
Facebook представил разрешение соединение, и теперь его можно использовать вместо старого REST API:

$permissions = $facebook->api("/me/permissions");
if( array_key_exists('publish_stream', $permissions['data'][0]) ) {
    // Permission is granted!
    // Do the related task
    $post_id = $facebook->api('/me/feed', 'post', array('message'=>'Hello World!'));
} else {
    // We don't have the permission
    // Alert the user or ask for the permission!
    header( "Location: " . $facebook->getLoginUrl(array("scope" => "publish_stream")) );
}
...