есть ли способ проверить мое приложение (холст), если пользователь имеет расширенное разрешение (например, stream.publish)?
i может найти решение для старого sdk.
спасибо!
есть ли способ проверить мое приложение (холст), если пользователь имеет расширенное разрешение (например, stream.publish)?
i может найти решение для старого sdk.
спасибо!
Обновление в конце 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,
        }
    ]
}
		
нашел решение самостоятельно
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
   }
});
		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).');
        }
});
		Обобщенная функция выбора,
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);
  });
}
Вызывает обратный вызов с истинным, если пользователь имеет все разрешения, иначе вызывает обратный вызов с ложным.
Ответы, в которых используется FB.Data.query, следует избегать как этот пункт, так как Facebook полностью устарел FB.Data.query. Решение FB.api (/me/permissions...) кажется лучшим.
Вы также можете получить разрешения от FB.login:
FB.login(function(response) {
  // handle the response
}, {
  scope: 'publish_actions', 
  return_scopes: true
});
См. https://developers.facebook.com/docs/reference/javascript/FB.login/v2.1#options