Запросы Facebook
У меня есть Activity, который должен обрабатывать результаты как из SDK, так и из других пользовательских действий.
Где я могу найти код запроса, используемый в SDK для Facebook, чтобы не использовать его для моих действий?
Я мог бы рассказать им обособленно в onActivityResult
, используя их requestCode, чтобы они были уникальными.
Ответы
Ответ 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
...
}
);
}