2016-10-15 58 views
1

我正在使用最新的Facebook Android SDK對我的用戶進行身份驗證,並且我遇到了此問題。Android的Facebook登錄未處理

我有一個根活動設置,具有一個自定義的ActivityResult處理程序系統(基本上,片段可以註冊和刪除特定結果的ActivityResultHandlers,這種方式處理片段內的活動間請求的結果)。我已經擴大了這個與Facebook的CallbackManager,它的SDK文檔中描述的方式:

在我的活動,我有這樣的:

@Override 
void onCreate(Bundle bundle) { 
    [...] 
    setContentView(R.layout.activity); 

    FacebookSdk.sdkInitialize(getApplicationContext()); 
    facebookCallbackManager = CallbackManager.Factory.create(); 
} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    for (Map.Entry<Integer, ActivityResultHandler> entry : activityResultHandlers.entrySet()) { 
     if (entry.getKey() == requestCode) 
      entry.getValue().onActivityResultCustom(requestCode, resultCode, data); 
    } 

    super.onActivityResult(requestCode, resultCode, data); 
    facebookCallbackManager.onActivityResult(requestCode, resultCode, data); 
} 

而在我的片段,我這樣做:

@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    [...] 
    LoginManager.getInstance().registerCallback(
     ((MainActivity)getActivity()).getFacebookCallbackManager(), 
     new FacebookCallback<LoginResult>() { [...] } 
    ); 
} 

然後,我打電話LoginManager開始認證,一旦按下按鈕(我使用自定義圖形,所以FacebookLoginButton不幸)。現在

LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("email","user_friends","public_profile")); 

,這部分工作得很好,我可以在該facebookCallbackManager.onActivityResult()方法被調用調試器看到的。但是,進入內部後,我看到LoginManager註冊了特定的響應代碼(假設爲64206),而SDK返回的請求代碼完全不同(129742),因此LoginManager回調沒有處理。

我在做什麼錯在這裏?

回答

0

移動此部分。您需要在setContentView之前初始化Facebook SDK

setContentView(R.layout.activity); 
FacebookSdk.sdkInitialize(getApplicationContext()); 

對此

FacebookSdk.sdkInitialize(getApplicationContext()); 
setContentView(R.layout.activity); 
+0

沒有幫助。回調仍然沒有被處理。 – fonix232

0

因此,解決方案是非常簡單 - 將整個加工成片段本身,只有在做的主要活動的SDK初始化。