1

Я использую последнюю версию Android Android SDK для аутентификации моих пользователей, и я столкнулся с этой проблемой.Андроид 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

Переместить эту часть. Вам необходимо установить Facebook SDK до setContentView.

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

Для этого

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

Не помогает. Обратный вызов все еще не обрабатывается вообще. – fonix232

0

Таким образом, решение было довольно просто - переместить всю обработку в сам фрагмент, и делать только инициализацию SDK в основной деятельности.