Facebook ShareDialog 没有回调的问题

facebook 分享中一不小心掉进去的坑

完成 facebook 分享功能之后,如果手机安装了Facebook,分享之后会有成功或者失败的 反馈

但是如果没有安装,就会使用 WEB 版本的 进行分享,这个时候,分享完了就是完了,不知道是成功还是失败。

去看了下文档,Facebook提供这个回调。

叫做 CallbakManager ,既然找到了,就上手吧

ShareDialog shareDialog = new ShareDialog(act);

CallbackManager callbackManager = CallbackManager.Factory.create();
shareDialog.registerCallback(callbackManager, new FacebookCallback<Sharer.Result>() {
    @Override
    public void onSuccess(Sharer.Result result) {
        Log.d("tag", "OnSuccess");
    }

    @Override
    public void onCancel() {
        Log.d("tag", "onCancel");
    }

    @Override
    public void onError(FacebookException error) {
        Log.d("tag", "onError");
    }
});

ShareLinkContent content = new ShareLinkContent.Builder()
        .setContentUrl(Uri.parse("http://url.com"))
        .setImageUrl(Uri.parse("http://url.com"))
        .setContentTitle("Title")
        .setContentDescription("description")
        .build();

shareDialog.show(content, ShareDialog.Mode.AUTOMATIC);

看上去就是这样的,可是每次都没有回调 最后去Facebook 文档又看了一遍,找到解决办法了,原来之前没有看清楚

Facebook share封装起来之后是用 Activity 做回调的 所以 纯粹的使用 CallbackManager 肯定不会生效啦。

每个Activity需要对应的 CallbackManager 然后需要 override onActivityResult 进行callbackManager 的调用

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    callbackManager.onActivityResult(requestCode, resultCode, data);//这个callbackmanager要是之前 create 的那一个,不能是 新 create的
}

所以写了一个 辅助类 FacebookHelper

public class FacebookHelper {

    private static final String TAG = FacebookHelper.class.getSimpleName();

    private static CallbackManager mCallbackManager;

    public static CallbackManager initCallbackManager(Activity activity) {
        if (!FacebookSdk.isInitialized()) {
            FacebookSdk.sdkInitialize(activity);
        }

        return mCallbackManager = CallbackManager.Factory.create();
    }

    /**
    * url 需要分享的 url
    * des 需要分享的 description
    **/
    public static void showLink2Facebook(Activity act, String url, String des) {
        if(TextUtils.isEmpty(url)) {
            return ;
        }
        ShareDialog shareDialog = new ShareDialog(act);

        shareDialog.registerCallback(mCallbackManager, new FacebookCallback<Sharer.Result>() {
            @Override
            public void onSuccess(Sharer.Result result) {
                Utils.showToast("share successful");
            }

            @Override
            public void onCancel() {
                Utils.showToast("cancel the share operation");
            }

            @Override
            public void onError(FacebookException error) {
                Utils.showToast("share failed. you can try again later");
            }
        });

        ShareLinkContent content = new ShareLinkContent.Builder()
                .setContentUrl(Uri.parse(url))
                .setImageUrl(Uri.parse(url))
                .setContentTitle("Title)
                .setContentDescription(des)
                .build();

        shareDialog.show(content, ShareDialog.Mode.AUTOMATIC);
    }
}

只要在每个需要分享的 Activity OnCreate 时 获取一个 CallbackManager 成员变量

mCallbackManager = FacebookHelper.initCallbackManager(this);

然后 重载 onActivityResult 方法中调用 就可以了

mCallbackManager.onActivityResult(requestCode, resultCode, data);

为了这事捣鼓了半天,都怪自己文档没看仔细。 看到CallbackManager 就 立马动手写代码了。 以后文档看完再动手,切记。 不然,掉坑。

 
comments powered by Disqus