Запросы Facebook

У меня есть Activity, который должен обрабатывать результаты как из SDK, так и из других пользовательских действий.

Где я могу найти коды запросов, используемые в SDK для Facebook, чтобы не использовать то же самое для моей деятельности?

Я должен был бы рассказать им обособленно в onActivityResult используя их onActivityResult чтобы они были уникальными.

Передайте код запроса в вызове sdkInitialize

 FacebookSdk.sdkInitialize(context, 1200); 

затем

 public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (FacebookSdk.isFacebookRequestCode(requestCode)) { //Facebook activity result //Do your stuff here //Further you can also check if it's login or Share etc by using //CallbackManagerImpl as explained by rajath's answer here if (requestCode == CallbackManagerImpl.RequestCodeOffset.Login.toRequestCode()) { //login } else if (requestCode == CallbackManagerImpl.RequestCodeOffset.Share.toRequestCode()){ //share } } 

Из документов

isFacebookRequestCode (целое)

Возвращает true, если код запроса находится в пределах диапазона, используемого в запросах SDK для Facebook. Это не включает коды запросов, которые вы явно задаете в диалогах, кнопках или LoginManager. Диапазон кодов запросов, которые использует SDK, запускается в callbackRequestCodeOffset и продолжается для следующих 100 значений.

SdkInitialize (Context, int)

Эта функция инициализирует SDK для Facebook, поведение функций SDK в Facebook не определено, если эта функция не вызывается. Его следует называть как можно раньше.

public static synchronized void sdkInitialize(Context applicationContext, int callbackRequestCodeOffset)
ApplicationContext Контекст приложения
callbackRequestCodeOffset Сброс кода запроса, с которым будут вызваны действия Facebook. Пожалуйста, не используйте диапазон между установленным вами значением и еще 100 записями после него в других ваших запросах.

Перейдите в CallbackManagerImpl.RequestCodeOffset. Я лично использовал такой код, чтобы предотвратить нежелательное поведение.

 if (requestCode == CallbackManagerImpl.RequestCodeOffset.Login.toRequestCode()) { callbackManager.onActivityResult(requestCode, resultCode, data); } 

Попробуй это:

 @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); //Log.iClassMethod(); switch(requestCode) { case 1: if (resultCode == Activity.RESULT_OK) { // do something ... } break; case ...: if (resultCode == Activity.RESULT_OK) { // do something ... } break; case Session.DEFAULT_AUTHORIZE_ACTIVITY_CODE: { Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data); Log.i("Facebook"); } break; } } 

Вы можете установить свои собственные коды запросов для устранения неоднозначности. Все классы OpenRequest и NewPermissionsRequest принимают параметр requestCode:

setRequestCode

Предлагая альтернативу, если вы используете логин FB через LoginButton

  1. Установить код запроса для входа в систему
  2. Используйте код запроса для дифференциации активности

 private LoginButton mFacebookLoginButton; private static int RC_FB_SIGN_IN; @Override protected void onCreate(Bundle savedInstanceState) { ... mFacebookLoginButton = (LoginButton) findByViewId(R.id.fb_login_button); mFacebookLoginButton.registerCallback(...) RC_FB_SIGN_IN = mFacebookLoginButton.getRequestCode(); ... } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == RC_GP_SIGN_IN) { ... } else if (requestCode == RC_FB_SIGN_IN) { Log.i(TAG, "Doing my facebook usual things"); mFacebookCallbackManager.onActivityResult(requestCode, resultCode, data); } } 

Добавляя к ответу Аптероэя Андрея, есть другие варианты, доступные в классе CallbackManagerImpl от Facebook SDK:

 public enum RequestCodeOffset { Login(0), Share(1), Message(2), Like(3), GameRequest(4), AppGroupCreate(5), AppGroupJoin(6), AppInvite(7), ; 

К ним можно обратиться по запросу. код:

 if (requestCode == CallbackManagerImpl.RequestCodeOffset.Share.toRequestCode()) { callbackManager.onActivityResult(requestCode, resultCode, data); } 

В конце sdk (4.4.1) вы можете вручную установить код запроса, изменив два файла в библиотеке facebook: 1) LoginClient.java

  public static int getLoginRequestCode() { //return CallbackManagerImpl.RequestCodeOffset.Login.toRequestCode(); return [your request code here]; } 

2) LoginManager.java

  public void registerCallback( ... ((CallbackManagerImpl) callbackManager).registerCallback([your request code here], new CallbackManagerImpl.Callback() { @Override ... } ); } 
Intereting Posts