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 способа создать кнопку "Вход":

  1. создать кнопку входа в систему с 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>
  1. создайте свой собственный 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 вверху этой страницы. На высоком уровне таковыми являются:

  1. проверка состояния входа, чтобы увидеть, если кто-то уже вошел в ваше приложение. Во время этого шага, вы также должны проверить, если кто-то ранее входил в приложение, но в настоящее время не вошел в систему.
  2. если они не вошли в систему, вызовите диалоговое окно входа и попросить разрешения данных.
  3. подтвердить свою личность.
  4. сохраните полученный маркер доступа.
  5. совершать вызовы API.
  6. выйти из системы.

Я вижу, что ваша игра больше не требует логин, но, возможно, другие найдут этот ответ полезным. :)