Где константа запроса (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