Facebook的Sharing on Android文档告诉我们使用以下代码段显示ShareDialog:
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);
}
我的问题是为什么我们需要检查ShareDialog.canShow()?在什么情况下这可能会返回错误,我们是否需要处理这种情况?示例代码只会无声地失败而不会告诉用户任何内容。
答案 0 :(得分:25)
昨天我花了很多时间试图调试与此相关的错误。从这个意义上来说,Facebook的文档很差,并且当存在与此canShow()
方法相关的错误时,它只是默默地失败,根本没有记录。
所以,回答你的问题:
我的问题是为什么我们需要检查ShareDialog.canShow()?在什么 场景可能会返回false并且我们需要处理 这个场景?
根据我遇到的情况:当用户未在其设备上安装Facebook应用并且您想要分享照片(SharePhotoContent
)或视频(ShareVideoContent
)时,{ {1}}将返回canShow()
。原因是Facebook SDK的WebView版本不支持共享此类内容。
我发现这是在false
方法上调试他们的FacebookActivity
类。 (未记录)错误消息是:
"无法显示提供的内容。这通常意味着Facebook应用程序未安装或更新。如果通过网络显示,这可能意味着内容具有通过此渠道不支持的属性。"
那么,当handlePassThroughError()
返回canShow()
时我们该怎么做?
这取决于您的情况。可能的解决方案是:
Facebook的可能解决方案是将其包含在他们的文档中或在LogCat上记录此错误。
希望它有所帮助!
答案 1 :(得分:0)
面对同样问题的人的答案。
@leocadiotine很棒。
从facebook sdk sample开始,当ShareDialog.canShow()
返回false时,您应该使用ShareApi.share
函数。
答案 2 :(得分:-1)
// for facebook
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) {
}
@Override
public void onCancel() {
}
@Override
public void onError(FacebookException e) {
}
});