Android Facebook CallbackManager无法调用registeredCallback

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无法找到

我正在尝试集成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);
            }
        }
    }