Facebook要求代码

时间:2013-07-21 13:26:58

标签: android facebook android-activity

我有一个Activity应该处理来自Facebook SDK和其他自定义活动的结果。

我在哪里可以找到Facebook SDK使用的requestCodes,以便不在我的活动中使用它?

我应该能够使用他们的requestCode在onActivityResult中区分它们,因此它们必须是唯一的。

7 个答案:

答案 0 :(得分:29)

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

来自the docs

  

isFacebookRequestCode(int)的

     

如果请求代码在Facebook SDK请求使用的范围内,则返回true。这不包括您在对话框,按钮或LoginManager上明确设置的请求代码。 SDK使用的请求代码范围从callbackRequestCodeOffset开始,并继续接下来的100个值。

     

sdkInitialize(Context,int)

     

此功能初始化Facebook SDK,如果未调用此功能,则不确定Facebook SDK功能的行为。它应该尽早调用。

     

<强> public static synchronized void sdkInitialize(Context applicationContext, int callbackRequestCodeOffset)
   applicationContext 应用程序上下文
   callbackRequestCodeOffset 将调用Facebook活动的请求代码偏移量。请不要在您的其他请求中使用您设置的值与其后的其他100个条目之间的范围。

答案 1 :(得分:25)

转到CallbackManagerImpl.RequestCodeOffset。我个人使用这样的代码来防止不必要的行为。

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

答案 2 :(得分:13)

试试这个:

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

答案 3 :(得分:3)

您可以设置自己的请求代码以消除歧义。所有OpenRequest和NewPermissionsRequest类都采用requestCode参数:

setRequestCode

答案 4 :(得分:2)

如果您通过LoginButton

使用FB登录,请提供替代方案
  1. 设置登录按钮的请求代码
  2. 使用请求代码区分活动
  3. 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);
        }
    }
    

答案 5 :(得分:1)

除了Apetroaei Andrei的回答,Facebook SDK的CallbackManagerImpl课程还有其他选择:

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

这些可以通过foll访问。代码:

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

答案 6 :(得分:0)

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