phonegap - 使用外部网站作为应用程序 - Facebook登录

时间:2012-03-28 15:20:00

标签: facebook cordova

我正在构建一个通过手机间隙运行的应用网站。电话间隙只是检查用户是否有互联网连接,并将外部网络应用程序加载到框架中。我可以在没有blib的情况下浏览网站,但是当我尝试登录Facebook(PHP重定向或javascript SDK)时,应用程序突然恢复其导航栏或打开一个新窗口(javascript SDK)。

无论如何我可以阻止这个吗?

问候

2 个答案:

答案 0 :(得分:3)

虽然使用了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 :(得分:1)

这适用于所有原生或网络应用,无需修补SDK代码。

这可能已经完成,但需要深入研究代码。问题是你真的需要吗?这是一种理想的行为。

您可以尝试使用PhoneGap Facebook插件并启用单点登录,因此如果存在,将打开本地Facebook应用程序而不是浏览器来验证用户。

顺便说一句,
仅包含外部网站的应用在应用商店中被拒绝。

<强>更新
哪些点可能对answer (by Facebook employee)类似问题How can I use an access token to circumvent FB.login()也有帮助。

另请查看ChildBrowser PhoneGap插件(以及Example)。