Facebook Canvas, не удается войти с facebook на мобильных устройствах
у меня есть приложение canvas facebook, которое имеет как веб-страницу, так и назначенную мобильную страницу. Веб-страница работает нормально, а также при моделировании браузера на мобильный телефон с консолью все работает нормально.
но, когда я пытаюсь запустить приложение из мобильного приложения facebook, приложение canvas загружается (что правильно), но оно не входит в систему.
Я использую FB.функция входа.
login: function () {
var deferred = $q.defer();
FB.login(function (response) {
if (!response || response.error) {
deferred.reject('Error occured');
} else {
deferred.resolve(response);
}
}, {
scope: 'email, user_friends'
});
return deferred.promise;
},
и в настройках > дополнительно-у меня есть: Клиента OAuth Логин, веб-OAuth логин, встроенный браузер OAuth логин, действительный OAuth перенаправление URIs и логин с устройств, заполненных правильно.
но все же из мобильного приложения facebook приложение canvas не формирует логин.
Я пытался заставить это работать весь день. и я нигде не могу найти решение. Я также не могу отладить мобильное приложение facebook.
есть идеи, как подойти к этой проблеме?
редактировать
также посмотрел на мой узел журналы сервера, и я вижу, что FB.логин даже не вызывается.
Изменить 2
Я в конечном итоге заменил логин на getLoginStatus, который не представляет для меня никаких проблем, так как его приложение Facebook canvas... но вопрос по-прежнему остается о том, как сделать логин.
редактировать 3 26.11.2015
ну, так getLoginStatus не полностью решил мою проблему, так как он на самом деле не регистрирует пользователя, поэтому для игр на холсте вы, вероятно необходимо войти в систему для первой записи, если вам нужны разрешения... мое решение было добавить входа, если getLoginStatus возвращает not_autorized вот так:
/**
* [getLoginStatus get the FB login status]
* @return {[type]} [description]
*/
getLoginStatus: function () {
var deferred = $q.defer();
FB.getLoginStatus(function (response) {
if (response.status === 'connected') {
deferred.resolve(response);
} else if (response.status === 'not_authorized') {
_fbFactory.login().then(function (fbLoginResponse) {
deferred.resolve(fbLoginResponse);
});
} else {
deferred.reject('Error occured');
}
});
return deferred.promise;
},
но подождите, есть больше... на FB.функция входа в систему не будет хорошо работать на мобильных холсте игры (не уверен, если его просто не срабатывает или браузеры блог всплывающие окна или оба). в любом случае вам нужно активно вызывать его с помощью кнопки... поэтому для мобильных игр canvas мне пришлось добавить кнопку "Начать играть", а затем войти работа..
EDIT 4 (Final)
в конце концов я заметил, что FB.login () не запускается, если его внешнее событие не запускает его, поэтому мне пришлось внести изменения для мобильного холста, где, если getLoginStatus не возвращается подключенным, я показываю кнопку входа, которая делает вход... остальные остались прежними. то, что я сделал для mobile, было похоже на принятый ответ только в соответствии с моими потребностями...
Я надеюсь, что это поможет кому-то, кроме мне...
1 ответов
убедитесь, что вы вызываете FB.login () с событием, инициированным пользователем, таким как onclick на кнопке, поскольку браузеры могут блокировать потенциально небезопасный/опасный javascript, который вызывается напрямую. Это дополнительный уровень безопасности для конечного пользователя. Есть 2 способа создать кнопку "Вход":
- создать кнопку входа в систему с facebooks login button generator: https://developers.facebook.com/docs/facebook-login/web/login-button
в сгенерированная кнопка входа в систему будет выглядеть примерно так:
<fb:login-button scope="public_profile,email" onlogin="checkLoginState();"> </fb:login-button>
- создайте свой собственный html и используйте событие onclick для вызова FB.в этом():
<button onclick="FB.init()">Login</button>
заметки с веб-сайта разработчиков Facebook:
Как отмечено в справочных документах для этой функции, это приводит к всплывающее окно, показывающее диалог входа в систему, и поэтому должно быть только вызывается в результате нажатия кнопки HTML (так что popup не блокируется браузерами).
https://developers.facebook.com/docs/facebook-login/web
также, FB.getLoginStatus-это правильный первый шаг при входе в систему, чтобы проверить, вошел ли ваш пользователь в facebook и в ваше приложение.
есть несколько шагов, которые необходимо выполнить для интеграции Facebook войдите в свое веб-приложение, большинство из которых включены в Примере quickstart вверху этой страницы. На высоком уровне таковыми являются:
- проверка состояния входа, чтобы увидеть, если кто-то уже вошел в ваше приложение. Во время этого шага, вы также должны проверить, если кто-то ранее входил в приложение, но в настоящее время не вошел в систему.
- если они не вошли в систему, вызовите диалоговое окно входа и попросить разрешения данных.
- подтвердить свою личность.
- сохраните полученный маркер доступа.
- совершать вызовы API.
- выйти из системы.
Я вижу, что ваша игра больше не требует логин, но, возможно, другие найдут этот ответ полезным. :)