Android Facebook CallbackManager无法调用registeredCallback
我正在尝试集成FB Graph API,使用户能够在他们的FB墙上共享内容 在应用程序启动时,用户可以使用facebook按钮(LoginButton)登录,该按钮仅使用读取权限(获取用户名和图片) 下一步,当用户想要使用我的应用程序在墙上张贴图片时;我创建了LoginButton的另一个实例和CallbackManager接口的一个实例,然后将一些代码附加到该CallbackManager(下面给出的代码) 我的问题是,当我试图使用具有发布权限的即时登录按钮时;facebook sdk无法找到我设置的回调,即使它正在返回成功Android Facebook CallbackManager无法调用registeredCallback,android,facebook-sdk-4.0,Android,Facebook Sdk 4.0,我正在尝试集成FB Graph API,使用户能够在他们的FB墙上共享内容 在应用程序启动时,用户可以使用facebook按钮(LoginButton)登录,该按钮仅使用读取权限(获取用户名和图片) 下一步,当用户想要使用我的应用程序在墙上张贴图片时;我创建了LoginButton的另一个实例和CallbackManager接口的一个实例,然后将一些代码附加到该CallbackManager(下面给出的代码) 我的问题是,当我试图使用具有发布权限的即时登录按钮时;facebook sdk无法找到
08-10 02:27:58.972: D/FacebookSDK.Response(4992): Response (raw)
08-10 02:27:58.972: D/FacebookSDK.Response(4992): Size: 16
08-10 02:27:58.972: D/FacebookSDK.Response(4992): Response:
08-10 02:27:58.972: D/FacebookSDK.Response(4992): {"success":true}
因此,我尝试跟踪问题,并在FB SDK中发现此问题-
(里面onActivityResult@com.facebook.internal.CallbackManagerImpl)
这里的回调是一个hashmap,facebook可能使用它来存储回调实例(V)和请求代码(K)。但是我在检查回调hashmap时得到的requestCode是64207,我可以看到确实有一个键值为64206的实例。因此,将回调返回为null
任何指示或提示都将不胜感激,请提前感谢。您应该使用相同的变量调用并注册callbackManger 另外,在ActivityResult中调用它 例如:
public class Scene extends Activity {
CallbackManager callbackManager;
ShareDialog shareDialog;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
FacebookSdk.sdkInitialize(getApplicationContext());
lms = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
callbackManager = CallbackManager.Factory.create();
shareDialog = new ShareDialog(this);
// this part is optional
shareDialog.registerCallback(callbackManager, new FacebookCallback<Sharer.Result>() {
@Override
public void onSuccess(Sharer.Result result) { print("onSuccess"); }
@Override
public void onCancel() { print("onCancel"); }
@Override
public void onError(FacebookException error) { print("onError"); }
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
}
private void share() {
if (ShareDialog.canShow(ShareLinkContent.class)) {
ShareLinkContent linkContent = new ShareLinkContent.Builder()
.setContentTitle("Hello Facebook")
.setContentDescription(
"The 'Hello Facebook' sample showcases simple Facebook integration")
.setContentUrl(Uri.parse("http://developers.facebook.com/android"))
.build();
shareDialog.show(linkContent);
}
}
}
公共类场景扩展活动{
CallbackManager CallbackManager;
共享对话框共享对话框;
@凌驾
创建时受保护的void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
sdkinInitialize(getApplicationContext());
lms=(LocationManager)getSystemService(Context.LOCATION\u服务);
callbackManager=callbackManager.Factory.create();
shareDialog=新建shareDialog(此);
//这部分是可选的
registerCallback(callbackManager,newfacebookcallback()){
@凌驾
public void onSuccess(sharr.Result结果){print(“onSuccess”);}
@凌驾
public void onCancel(){print(“onCancel”);}
@凌驾
public void onError(facebook异常错误){print(“onError”);}
});
}
@凌驾
受保护的void onActivityResult(int请求代码、int结果代码、意图数据)
{
super.onActivityResult(请求代码、结果代码、数据);
callbackManager.onActivityResult(请求代码、结果代码、数据);
}
私人无效股份(){
if(ShareDialog.canShow(ShareLinkContent.class)){
ShareLinkContent=新的ShareLinkContent.Builder()
.setContentTitle(“你好,Facebook”)
.setContentDescription(
“Hello Facebook”示例展示了简单的Facebook集成)
.setContentUrl(Uri.parse(“http://developers.facebook.com/android"))
.build();
显示(链接内容);
}
}
}
如果我做了同样的操作,但登录是在一个片段中,我会遇到同样的问题。FB代码示例在回调上失败,因为它为null,但是如果我将requestcode硬编码为64206,它就会工作
08-10 02:27:58.972: D/FacebookSDK.Response(4992): Response (raw)
08-10 02:27:58.972: D/FacebookSDK.Response(4992): Size: 16
08-10 02:27:58.972: D/FacebookSDK.Response(4992): Response:
08-10 02:27:58.972: D/FacebookSDK.Response(4992): {"success":true}
public boolean onActivityResult(int requestCode, int resultCode, Intent data) {
Callback callback = callbacks.get(requestCode);
if (callback != null) {
return callback.onActivityResult(resultCode, data);
}
return runStaticCallback(requestCode, resultCode, data);
}
public class Scene extends Activity {
CallbackManager callbackManager;
ShareDialog shareDialog;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
FacebookSdk.sdkInitialize(getApplicationContext());
lms = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
callbackManager = CallbackManager.Factory.create();
shareDialog = new ShareDialog(this);
// this part is optional
shareDialog.registerCallback(callbackManager, new FacebookCallback<Sharer.Result>() {
@Override
public void onSuccess(Sharer.Result result) { print("onSuccess"); }
@Override
public void onCancel() { print("onCancel"); }
@Override
public void onError(FacebookException error) { print("onError"); }
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
}
private void share() {
if (ShareDialog.canShow(ShareLinkContent.class)) {
ShareLinkContent linkContent = new ShareLinkContent.Builder()
.setContentTitle("Hello Facebook")
.setContentDescription(
"The 'Hello Facebook' sample showcases simple Facebook integration")
.setContentUrl(Uri.parse("http://developers.facebook.com/android"))
.build();
shareDialog.show(linkContent);
}
}
}