Facebook SDK中定义的登录请求代码常量(64206)在哪里

Ogn*_*yan 12 android facebook

我在Android上使用Facebook SDK(4.*).刚刚使用LoginManager's以编程方式登录(不使用"LoginButton")logInWithReadPermissions().为了使回调起作用,我需要调用FacebookCallbackManager.onActivityResult(requestCode, resultCode, data);我在activity的onActivityResult方法中执行的操作.

但是,我的onActivityResult句柄结果形成了几个返回活动,并检查requestCode以查看返回的活动.我看到facebook登录返回64206但我无法找到定义该常量的位置.我不想硬编码64206,我想知道:有人知道Facebook SDK中定义的结果代码在哪里(并且是公开的)?

Ogn*_*yan 27

毕竟我决定深入研究调试器,然后在调试器中找到它Facebook SDK.请求代码在CallbackManagerImpl.RequestCodeOffset.中定义.

您可以使用以下命令获取登录请求代码: CallbackManagerImpl.RequestCodeOffset.Login.toRequestCode().

在那里,你也能找到的代码Share,Message,Like,GameRequest,AppGroupCreate,AppGroupJoin,AppInvite.


and*_*i g 6

更好的方法是调用 FacebookSdk.getCallbackRequestCodeOffset()

  • 检查FacebookSdk后,我发现有一个方法boolean isFacebookRequestCode(int requestCode)。 (7认同)

MH.*_*MH. 5

你不应该真正关心Facebook内部使用的请求代码的实际价值,因为CallbackManager.onActivityResult(requestCode, resultCode, data)它会告诉你它是否被处理.也就是说,首先将结果提供给CallbackManager.如果它表明它已被处理,你就完成了.如果没有处理,这是您的其他请求代码的结果之一,所以继续使用您已有的逻辑.

来自以下文档CallbackManager:

/**
 * The method that should be called from the Activity's or Fragment's onActivityResult method.
 * @param requestCode The request code that's received by the Activity or Fragment.
 * @param resultCode  The result code that's received by the Activity or Fragment.
 * @param data        The result data that's received by the Activity or Fragment.
 * @return true If the result could be handled.
 */
public boolean onActivityResult(int requestCode, int resultCode, Intent data);
Run Code Online (Sandbox Code Playgroud)

请注意这@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 */ }
}
Run Code Online (Sandbox Code Playgroud)

如果您真的想要,可以深入了解Facebook SDK源代码来跟踪请求代码的来源.特别是,请参考CallbackManagerImpl静态回调设置的预定义请求代码偏移量.

  • 这种方法存在两个问题:1.更大的问题:我不想使用结果"Intent data"调用外部代码,其中(可能)包含敏感信息.2.较小的问题:效率不高(而且很麻烦).如果我每次都需要调用几个外部onActivityResult处理程序,例如,如果我使用多个外部库,那该怎么办... (2认同)