1

我建立一個移動網站,通過Facebook權威性與下面的代碼的FB.login在移動瀏覽器不觸發

(function (d, s, id) { 
    var js, fjs = d.getElementsByTagName(s)[0]; 
    if (d.getElementById(id)) { 
     return; 
    } 
    js = d.createElement(s); 
    js.id = id; 
    js.src = "//connect.facebook.net/en_US/all.js"; 
    fjs.parentNode.insertBefore(js, fjs); 
}(document, 'script', 'facebook-jssdk')); 

window.fbAsyncInit = function() { 
    FB.init({ 
     appId: '{app_id}', // App ID from the app dashboard 
     channelUrl: '{app url}', // Channel file for x-domain comms 
     status: true, // Check Facebook Login status 
     xfbml: true 
    }); 

    FB.login(function (response) { 
    //FB.login contents 
    }, { 
     scope: '{permissions}' 
    }); 
} 

這適用於桌面瀏覽器,但在移動瀏覽器的FB.login沒有按」引導用戶觸發。似乎很多人都有這個問題。根據this堆棧交換問題FB.login不能在window.fbAsyncInit裏面解決,解決這個問題的最好方法是一旦加載了所有東西,就有一個觸發FB.login的按鈕。在我實施它之前,有人可以授權驗證這是我的最佳選擇。

回答

1

最好的方法是使用FB.getLoginStatus而不是FB.loginfbAsyncInit部分,然後根據當前狀態您可以登錄用戶或使用他的憑據。得到了這樣的事情:

window.fbAsyncInit = function() { 
    FB.Event.subscribe('auth.statusChange', function(auth){ 
     if(auth.status==='connected'){ 
      // subscribe to event, and do some magic stuff when status changes 
     } 
    }); 

    FB.init({ 
     appId: fb_config_app_id,  // App ID from the app dashboard 
     channelUrl: fb_config_channel, // Channel file for x-domain comms 
     status: true,     // Check Facebook Login status 
     xfbml: true      // Look for social plugins on the page 
    }); 

    // Load in the user credentials 
    FB.getLoginStatus(function(response){ 
     if (response.status === 'connected') { 
      // hey - user is already connected ! 
     } else { 
      // login user 
     } 
    }); 
} 
+0

@Slavomir嗨,該FB.getLoginStatus功能確實在fbAsyncInit工作因爲你已經斷言,但是,應該指出的是,最終是要麼沒有登錄或授權還是用戶必須去通過FB.Login(據我所知)最好通過不同頁面上的按鈕觸發。 –

+0

Hi @ BenPearce - 你確定嗎?我的例子來自現場項目,我使用給定的例子,爲我工作:) – Slavomir