PDA

Просмотр полной версии : [FaceBook] Не работает повторный запрос пермишена


undefined
20.12.2015, 20:40
Использую следующую js-функцию для определения есть ли пермишен:

checkPermission: function(permission, success, error) {
console.log('Checking permissions');
FB.api('/'+app.user.id+'/permissions', function(r) {
var res = false;
for (var i = 0; i < r.data.length; i++) {
if (r.data[i].permission == permission && r.data[i].status == 'granted') {
res = true;
break;
}
}
if (res && success) success();
else if (!res && error) error();
});
}

где:
permission - строка, название пермишена
success -колбэк, дергается если пермишен есть
error - колбэк, дергается если пермишена нет
Собственно когда требуется дернуть некий api, требующий пермишен я делаю:

checkPermission("user_photos",function() {

// some api calls

},function() {
// т.к. пермишена нет, запрашиваем его повторно

FB.login(function(response) {
//check again if permission is granted
checkPermission("user_photos",function() {

// some api calls

},function() {
// не дали пермишен, показываем диалог с ошибкой
});
},{scope:"user_photos"});
});

Например, для пермишена 'publish_actions' данная логика прекрасно работает. А вот для 'user_photos' если юзер сразу не дал пермишен, повторный вызов
FB.login(function(response) {..},{scope:"user_photos"});
Приводит к кратковременному появлению диалога с просьбой о пермишене, который сразу после появления немедленно исчезает.В checkPermission после этого вызывается колбэк error.Никто не сталкивался?

caseyryan
20.12.2015, 20:55
Не посню уже точно, но там какой-то параметр отвечает за кэш запросов. Или в настройках фейсбука выключается или надо отрпавить. Короче в сторону кэширования запроса копай

undefined
20.12.2015, 21:03
Не посню уже точно, но там какой-то параметр отвечает за кэш запросов. Или в настройках фейсбука выключается или надо отрпавить. Короче в сторону кэширования запроса копай
Возможно ты имеешь в виду функцию
FB.getLoginStatus(function(response) {},true|false);
Ей вторым параметром сообщается делать ли новый запрос, либо взять данные из кеша.С её помощью пермишен не запросишь.

Добавлено через 2 минуты
к тому же если бы это был кеш, после перезагрузки он снова спрашивал бы, но такого не наблюдается

caseyryan
21.12.2015, 07:46
А ну да, точно, это я и имел в виду.
Ну тогда попробуй к permissions добавить случайный параметр

undefined
21.12.2015, 12:22
Ну тогда попробуй к permissions добавить случайный параметр

ээ, куда конкретно добавить? Все запросы составляются и шлются внутри fb api.
Еще раз
к тому же если бы это был кеш, после перезагрузки он снова спрашивал бы, но такого не наблюдается


Добавлено через 3 часа 53 минуты
Вопрос решился.Оказывается для повторного запроса пермишена надо делать так:

FB.login(function(response) {...},{scope:'user_photos',auth_type:'rerequest'});