PhoneGap - использование внешнего сайта в качестве приложения - Facebook Войти - PullRequest
1 голос
/ 28 марта 2012

Я создаю сайт приложения, работающий через пробел в телефоне. Разрыв телефона просто проверяет, есть ли у пользователя подключение к Интернету, и загружает в него внешнее веб-приложение. Я могу легко перемещаться по сайту без каких-либо намеков, но как только я пытаюсь войти в Facebook (либо PHP-редирект, либо javascript SDK), приложение внезапно возвращает панель навигации или открывает новое окно (javascript SDK).

Могу ли я в любом случае предотвратить это?

С уважением

Ответы [ 2 ]

3 голосов
/ 29 марта 2012

Это заняло некоторое время, но с помощью плагина ChildBrowser мне удалось войти! (это для Android) Я использовал некоторый код из плагина подключения Facebook, который не работал для меня, переписал некоторые вещи, чтобы я мог понять это и теперь работает. Chears Juicy Scripter!

var fb_success = 'https://www.facebook.com/connect/login_success.html';
var fb_logout = 'https://www.facebook.com/connect/login_failed.html';
var fb_logout_ = 'http://m.facebook.com/logout.php?confirm=1&next=' + fb_logout;
var authorize_url = '';
var my_client_id = '##################';
var my_secret = '######################';
var my_type = 'user_agent';
var my_display = 'touch';
var token = false;
var fb_code = false;
var device_ready = false;
var ajax_url = '';

function logged_in(){
    // alert('do what you need to do!');
}
function fb_force_logout(){

}
function fb_auth_check(){
    console.log('fb_auth_check()');
    if( fb_code !== false ) {
        console.log('ajax test instigated...');
        ajax_url = 'https://graph.facebook.com/oauth/access_token?client_id=' + encodeURIComponent(my_client_id) + '&client_secret=' + encodeURIComponent(my_secret) + '&code=' + encodeURIComponent(fb_code) + '&redirect_uri=' + fb_success;
        $.ajax({
            url: ajax_url,
            type: 'POST',
            success: function(html){
                token = html.split("=")[1];
                console.log('success! token = ' + token);
                window.plugins.childBrowser.close();
                fb_init();
            },
            error: function(error) {
                console.log('there was an error...' + ajax_url);
                window.plugins.childBrowser.close();
            }
        });
    }
}
function fb_track_redirects(loc){
    console.log('redirect tracked... ' + loc);
    if ( loc.indexOf(fb_success) >= 0 || loc.indexOf(fb_success) > -1 ) {
        fb_code = loc.match(/code=(.*)$/)[1]
        console.log('success redirect... fb_code=' + fb_code);
        fb_auth_check();
        window.plugins.childBrowser.close();
    } else if ( loc.indexOf(fb_logout) >= 0 || loc.indexOf(fb_logout) > -1 ) {
        window.plugins.childBrowser.close();
    }
}
function inner_init(){
    console.log('inner_init()');
    if( token === false ) {
        console.log('token was false...');
        authorize_url += "https://graph.facebook.com/oauth/authorize?";
        authorize_url += "client_id=" + encodeURIComponent(my_client_id);
        authorize_url += "&redirect_uri=" + encodeURIComponent(fb_success);
        authorize_url += "&display=" + encodeURIComponent(my_display);
        authorize_url += "&scope=publish_stream,offline_access";

        console.log('instigated location change...');
        window.plugins.childBrowser.onLocationChange = function(loc){
            fb_track_redirects(loc);
        }
        console.log('open Facebbok login window');
        window.plugins.childBrowser.showWebPage(authorize_url);
    }else{
        logged_in();
    }
}
function fb_init(){
    console.log('fb_init()');
    if( device_ready === false ) {
        console.log('first device run...');
        document.addEventListener("deviceready", function(){
            device_ready = true;
            console.log('device ready...');
            inner_init();
        }, false);
    }else{
        inner_init();
    }
}

$(document).ready(function(){
    $('#login').bind('click', function(){
        fb_init();
        return false;
    })
});     
</script>
1 голос
/ 28 марта 2012

Вот как это работает для всех собственных или веб-приложений без исправления кода SDK.

Это, вероятно, можно сделать, но потребует копаться в коде. Вопрос в том, действительно ли это нужно? Это желаемое поведение.

Вы можете попробовать использовать плагин PhoneGap Facebook и включить функцию единого входа, чтобы вместо аутентификации пользователя было открыто собственное приложение Facebook, если оно существует, вместо браузера.

КСТАТИ
Приложения, представляющие собой просто внешние сайты, в большинстве своем отклоняются в магазине приложений.

Обновление:
Где некоторые моменты, которые также могут быть полезны в ответе (сотрудник Facebook) на аналогичный вопрос Как использовать токен доступа для обхода FB.login () .

Также обратите внимание на ChildBrowser Плагин PhoneGap (и Пример ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...