Проверьте расширенные разрешения с помощью нового фейсбука javascript sdk

есть ли способ проверить мое приложение (холст), если пользователь имеет расширенное разрешение (например, stream.publish)?

i может найти решение для старого sdk.

спасибо!

Ответ 1

Обновление в конце 2011 года:

FB.api('/me/permissions', function (response) {
    console.log(response);
} );

консольный вывод:

{
    data: [
        {
            create_note: 1,
            installed: 1,
            photo_upload: 1,
            publish_stream: 1,
            share_item: 1,
            status_update: 1,
            video_upload: 1,
        }
    ]
}

Ответ 2

это решение устарело в конце 2011 года, пожалуйста, используйте ответ, отмеченный как принятый выше

нашел решение самостоятельно

function check_ext_perm(session,callback) {
    var query = FB.Data.query('select publish_stream,read_stream from permissions where uid={0}', session["uid"]);
    query.wait(function(rows) {
        if(rows[0].publish_stream == 1 && rows[0].read_stream == 1) {
            callback(true);
        } else {
            callback(false);
        }
    });
};

это проверит для publish_stream и read_stream

пример использования:

check_ext_perm(response.session, function(isworking) {
   if(isworking) {
      // post something to wall
   } else {
      // ask for login
   }
});

Ответ 3

FB.ui({
    method: 'permissions.request',
    perms: 'user_website',
    display: 'popup'
    },function(response) {
        alert(response.toSource());
        if (response && response.perms) {
            alert('Permissions granted: '+response.perms);
        } else if (!response.perms){
            alert('User did not authorize permission(s).');
        }
});

Ответ 4

Обобщенная функция выбора,

function check_permissions (permissions, uid, cb) {
  FB.Data
    .query('select {0} from permissions where uid={1}', permissions, uid)
    .wait(function (res) {
      if (!res || res.length < 1) return cb(false);
      var row = res[0];
      var aperm = permissions.split(',');
      for (var i = 0; i < aperm.length; i++) {
        if (row[aperm[i]] != 1) return cb(false);
      }
      return cb(true);
  });
}

Вызывает обратный вызов с истинным, если пользователь имеет все разрешения, иначе вызывает обратный вызов с ложным.

Ответ 5

Ответы, в которых используется FB.Data.query, следует избегать как этот пункт, так как Facebook полностью устарел FB.Data.query. Решение FB.api (/me/permissions...) кажется лучшим.