2012-03-28 92 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>