Android Facebook SDK检查分享是否成功

3
我正在开发一款Android应用程序,该应用程序允许用户在Facebook上分享帖子。为了统计数据,我想知道用户是否成功分享了帖子或者决定取消分享。
问题:在没有publish_action权限的情况下,是否有办法检查使用Facebook SDK 4.5的ShareDialog是否已经成功分享了帖子?
ShareDialog打开Facebook App共享对话框,如果共享成功,则会调用回调函数中的onSuccess方法(或者如果用户取消共享对话框,则会调用onCancel)。问题在于,当用户在设备上没有安装Facebook应用程序时,ShareDialog将回退到默认浏览器进行共享,但在这种情况下,回调函数中的onSuccess方法总是被执行,即使用户点击了取消按钮!
我的当前代码如下:
FacebookCallback<Sharer.Result> shareCallback = new FacebookCallback<Sharer.Result>() {
    @Override
    public void onCancel() {
        Log.d(LOG_TAG, "fb SHARE canceled");
    }

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

    @Override
    public void onSuccess(Sharer.Result result) {

        String postId = result.getPostId();
        if (postId != null)
        {
            // record successful FB share
            Log.d(LOG_TAG, "fb SHARE success");
        }
    }
}

FacebookSdk.sdkInitialize(getApplicationContext());
callbackManager = CallbackManager.Factory.create();
shareDialog = new ShareDialog(this);
shareDialog.registerCallback(callbackManager, shareCallback);

这段代码运行良好,但需要publish_actions权限来检查postId。有没有其他方法可以检查共享是否成功,而不需要从Facebook获取额外的(publish_actions)权限(因为这太痛苦了)?

2
我认为这是不可能的,因为这样很容易被滥用来激励行为 - 而这是不允许的。 - andyrandy
请告诉我们是否找到了更新。 - Nilabja
很遗憾,似乎浏览器共享对话框总是返回到“onSuccess”不是一个错误,而是一个特性。我将不得不编写我的代码来使用“publish_actions”(我仍然不确定如何触发“publish_actions”)。 - cakan
当你成功时,请在这里留下评论 @cakan - Nilabja
这个有更新了吗? - Vivek Sinha
我已经按照@John Binary在答案中建议的方式,通过强制使用FB网页提要来解决了这个问题。 - cakan
1个回答

2

有一种方法可以解决这个问题。 问题在于,当你使用Facebook的应用程序分享时,postId始终为null。但是,当你不使用FB应用程序分享时,postId会在成功回调中传递。 解决方案是强制你的应用程序使用网页提要而不是FB应用程序进行分享:

shareDialog.show(linkContent, ShareDialog.Mode.FEED);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接