Подтвердить что ты не робот

Запросы Facebook

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

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

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

4b9b3361

Ответ 1

Передайте код запроса в вызове 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 login or Share etc by using 
      //CallbackManagerImpl as explained by rajath 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 (Контекст, int)

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

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

Ответ 2

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

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

Ответ 3

Попробуйте следующее:

@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;
    }
}

Ответ 4

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

setRequestCode

Ответ 5

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

  • Установить код запроса для входа в систему
  • Используйте код запроса для различения активности.

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);
    }
}

Ответ 6

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

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);
}

Ответ 7

в lates 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
            ...
            }
    );
}