2012-03-28 80 views
1

我正在建立一个通过电话差距运行的应用程序网站。手机差距只是检查用户有互联网连接,并将外部网络应用程序加载到框架中。我可以在没有blib的情况下浏览整个网站,但只要尝试登录到Facebook(PHP重定向或JavaScript SDK),应用程序突然重新获取其导航栏或打开一个新窗口(JavaScript SDK)。phonegap - 使用外部网站作为应用程序 - Facebook登录

有反正我可以防止这种情况吗?

问候

回答

1

这是它如何工作的本地或网络,而不打补丁的SDK代码,所有的应用程序。

这可能是可以做到的,但需要挖掘代码。问题是你真的需要它吗?这是一个理想的行为。

您可以尝试使用PhoneGap Facebook插件并启用单一登录,以便本地Facebook应用程序(如果存在)将被打开,而不是浏览器对用户进行身份验证。

顺便说一句,
应用程序只是外部网站包装大多数被拒绝在应用程序商店。

更新:
哪里是一些点,可能是在answer (by Facebook employee)到类似的问题How can I use an access token to circumvent FB.login()也很有帮助。

也看看ChildBrowser PhoneGap插件(和Example)。

+0

他们为什么?你怎么会知道这事? – 2012-03-28 17:48:06

+0

稍微阅读后,我认为你是错的http://stackoverflow.com/questions/5478848/does-apple-reject-mobile-web-shell-applications你不知道这个游戏做什么,你只是假设它是一个“简单的站点” – 2012-03-28 17:54:21

+0

@PhilJackson,重新阅读[回答这个问题](http://stackoverflow.com/a/5478893/155033),这正是我在BTW中所说的。这有点超出了问题的范围。 – 2012-03-28 18:15:25

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>