2014-07-18 61 views
-1

我有一個移動web應用程序(不是iOS),我試圖使用共享對話框。我正在記錄整個過程的輸出,所以我可以看到系統崩潰的位置。當我在桌面瀏覽器上進行測試時,整個過程完美無缺。但是,當我在iPhone上測試時,系統停在FB.login()處。看看日誌,我的web應用程序運行FB.getLoginStatus()就好了。響應是status =「unknown」的對象。我有一個回調函數,它記錄「getLoginStatus response.status!= connected」,然後嘗試運行FB.login(function(response){})。回調的第一行是嘗試記錄「FB.login響應」。該行永遠不會被記錄。什麼都沒發生。這就好像webapp獲取FB.login()然後什麼也不做。我試過在那個地方運行其他功能(比如FB.api()),並且他們給我正確的錯誤(沒有authToken)。任何想法可能會發生什麼?FB登錄失敗(沒有錯誤,沒有什麼)

示例代碼:

FB.getLoginStatus(function(response) { 
    console.log('getLoginStatus response:'); 
    console.log(response); 
    if(response.status != 'connected') { 
     console.log('getLoginStatus response.status != connected'); // THIS IS THE LAST THING I SEE IN MY CONSOLE 
     FB.login(function(response) { 
      console.log('FB.login response'); 
      console.log(response); 
      if(response.status != 'connected') { 
       console.log('Failed to log in'); 
      } else { 
       console.log('You\'re logged in'); 
      } 
     }); 
    } else { 
     console.log('You\'re logged in'); 
    } 
}); 

產生以下日誌:

getLoginStatus response: 
Object {status: "unknown", authResponse: null} 
getLoginStatus response.status != connected 

澄清:否錯誤響應並在此之後沒有進一步的日誌。重複點擊分享按鈕可獲得完全相同的結果。

回答

1

行 - 找出問題所在。我在最初的問題中省略的是,這一切都是在Angular.js應用程序中調用的。那麼,事實證明FB.login()函數需要在下一個週期中調用。所以通過簡單地將FB.login函數包裝在$ timeout中(根據這裏的答案:AngularJS : Prevent error $digest already in progress when calling $scope.$apply()),它允許它在下一個週期中運行,現在一切正常。最終代碼如下所示:

FB.getLoginStatus(function(response) { 
    console.log('getLoginStatus response:'); 
    console.log(response); 
    if(response.status != 'connected') { 
     console.log('getLoginStatus response.status != connected'); 
     $timeout(function(){ //THIS IS THE FIX 
      FB.login(function(response) { 
       console.log('FB.login response'); 
       console.log(response); 
       if(response.status != 'connected') { 
        console.log('Failed to log in'); 
       } else { 
        console.log('You\'re logged in'); 
       } 
      }); 
     }); 
    } else { 
     console.log('You\'re logged in'); 
    } 
});