如何判断Facebook分享操作是否成功?
如何判断Facebook分享操作是否成功?
我来帮你分析一下问题所在,然后给出具体的解决方案:
首先,你的核心问题出在对Facebook Share Dialog回调的判断逻辑上,再加上Facebook因为隐私政策更新,已经调整了Share Dialog的回调返回规则,原来的error_code这类标识已经不再使用了。
问题根源
Facebook为了保护用户隐私,不会向开发者返回用户是否真正成功发布了帖子的明确信息。现在Share Dialog的回调行为是:
- 如果用户在弹窗里点击了「分享」按钮,完成弹窗流程后关闭,回调会返回一个对象(可能是空对象,也可能带有
post_id,但这个post_id现在也不一定会稳定返回); - 如果用户直接关闭弹窗(没有点击分享按钮),回调的
response参数是undefined或者null。
你原来的判断逻辑if(response && !response.error_code)已经完全不适用了,因为现在根本不会返回error_code,而且当用户关闭弹窗时response是undefined,会直接进入错误分支,这就是你遇到的问题。
修正后的代码逻辑
你需要调整回调的判断逻辑,改成基于response是否存在来区分用户的操作:
FB.ui({ method: 'share', href: lnk }, function(response){ if (typeof response !== 'undefined') { // 说明用户点击了分享按钮,完成了弹窗的分享流程 // 注意:这里无法100%确认帖子是否成功发布到用户的Timeline(隐私政策限制) $('#nextSection').show(); $('#noThanksSection').hide(); alert("感谢您的分享!"); $('#status').hide(); } else { // 用户直接关闭了弹窗,没有触发分享操作 alert('您取消了分享,若需要继续可以再次尝试!'); $('#fooBar').show(); $('#noThanksSection').show(); $('#status').hide(); } });
额外需要注意的问题
- jQuery依赖:你的代码里用了
$('#fooBar').hide()这类jQuery方法,但我没看到你引入jQuery库,记得在页面中添加jQuery的引用,否则这些DOM操作会报错。 - HTML语法错误:你的代码最后把闭合的
</body>写成了<body>,虽然浏览器可能会自动修复,但还是建议修正这个语法错误,避免潜在问题。 - 隐私限制说明:再次强调,现在你无法通过前端代码100%确认用户是否真的成功发布了帖子,这是Facebook的隐私政策限制——即使你收到了
response,也只能说明用户完成了分享弹窗的操作流程,无法知道用户后续是否删除了帖子,或者是否因为其他原因发布失败。
备注:内容来源于stack exchange,提问作者kofhearts
相关产品推荐
相关产品推荐

