我在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.
更好的方法是调用 FacebookSdk.getCallbackRequestCodeOffset()
你不应该真正关心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静态回调设置的预定义请求代码偏移量.
| 归档时间: |
|
| 查看次数: |
5021 次 |
| 最近记录: |