1

저는 최신 Facebook Android SDK를 사용하여 사용자를 인증하고 있으며,이 문제에 대해 조사하고 있습니다.Android Facebook 로그인이 처리되지 않습니다.

사용자 정의 ActivityResult 처리기 시스템을 사용하여 루트 활동을 설정했습니다 (기본적으로 조각은 특정 결과에 대한 ActivityResultHandlers를 등록 및 제거하여 조각 내 상호 작용 요청의 결과를 처리합니다). 나는 페이스 북 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() 메서드가 호출되어 디버거에서 볼 수 있습니다. 그러나 내부에서 스테핑, SDK가 완전히 다른 요청 코드 (129742) 반환하는 동안 특정 응답 코드 (예, 64206)에 대한 LoginManager 등록되어있는, 따라서 LoginManager 콜백 처리되지 않는 것을 참조하십시오.

내가 뭘 잘못하고 있니?

답변

0

이 부분을 이동하십시오. setContentView 전에 Facebook SDK을 초기화해야합니다. 이

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

도움이되지 않습니다. 콜백은 아직 처리되지 않고 있습니다. – fonix232

0

으로

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

그래서 해결책은 아주 간단했다 - 조각 자체에 전체 처리를 이동하고, 단지 주요 활동에서 SDK 초기화를 할.

관련 문제