Где константа запроса (64206) для входа в систему, определенная в Facebook SDK

Я использую Facebook SDK (4. *) на Android. Просто реализован программный логин (без использования "LoginButton" ) с помощью LoginManager logInWithReadPermissions(). Для того, чтобы обратный вызов работал, мне нужно вызвать FacebookCallbackManager.onActivityResult(requestCode, resultCode, data);, который я делаю в моем методе onActivityResult.

Однако, мой onActivityResult обрабатывает результаты, формирует несколько возвращающих действий, и он проверяет requestCode, чтобы увидеть, какое действие возвращено. Я вижу, что вход facebook возвращается с 64206, но я не могу найти, где эта константа определена. Я не хочу жестко кодировать 64206, и мне было интересно: кто-то знает, где этот код результата, определенный в SDK Facebook (и является ли он общедоступным)?

Ответ 1

Итак, после всего, что я решил вставить в отладчик и нашел его в Facebook SDK. Коды запросов определены в CallbackManagerImpl.RequestCodeOffset.

Вы можете получить код запроса на вход: CallbackManagerImpl.RequestCodeOffset.Login.toRequestCode().

Здесь вы также найдете коды для Share, Message, Like, GameRequest, AppGroupCreate, AppGroupJoin, AppInvite.

Ответ 2

Лучше всего позвонить FacebookSdk.getCallbackRequestCodeOffset()

Ответ 3

На самом деле вам не нужно заботиться о фактическом значении внутреннего кода запроса, который используется внутри страны, так как результат CallbackManager.onActivityResult(requestCode, resultCode, data) подскажет вам, было ли оно обработано или нет. То есть сначала предложите результат CallbackManager. Если он указывает, что он был обработан, вы все закончили. Если это не было обработано, это один из ваших других результатов запроса кода, поэтому просто продолжайте с логикой, которую у вас уже есть.

Из docs на CallbackManager:

/**
 * The method that should be called from the Activity or Fragment onActivityResult method.
 * @param requestCode The request code that received by the Activity or Fragment.
 * @param resultCode  The result code that received by the Activity or Fragment.
 * @param data        The result data that received by the Activity or Fragment.
 * @return true If the result could be handled.
 */
public boolean onActivityResult(int requestCode, int resultCode, Intent data);

Обратите внимание на примечание @return.

Таким образом, ваш код должен быть структурирован следующим образом:

@Override public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    boolean handled = callbackManager.onActivityResult(requestCode, resultCode, data);
    if (handled) { /* all done */ }
    else { /* result wasn't handled by the callback manager, so check for other potential request codes */ }
}

Если вы действительно хотите, вы можете погрузиться в источник SDK Facebook, чтобы проследить происхождение кода запроса. В частности, обратитесь к CallbackManagerImpl, где статические обратные вызовы настроены с предопределенным смещением кода запроса.

Ответ 4

Код запроса - это всего лишь каламбур 0xface в шестнадцатеричном формате (или 64206 в десятичной форме), поскольку его можно увидеть на FacebookSdk.DEFAULT_CALLBACK_REQUEST_CODE_OFFSET