如何在Android上处理Facebook ShareDialog.canShow()== false

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()?在什么情况下这可能会返回错误,我们是否需要处理这种情况?示例代码只是静失败而不告诉用户任何东西.

解决方法

我昨天花了很多时间试图调试与此相关的错误. Facebook的文档在这个意义上很差,并且当存在与此canShow()方法相关的错误时,它只是地失败,根本没有记录.

那么,回答你的问题:

My question is why do we need to check ShareDialog.canShow()? In what
scenarios would this possibly return false and do we need to handle
this scenario?

根据我面临的情况:当用户没有在他们的设备上安装Facebook应用程序并且您想要共享照片(SharePhotoContent)或视频(ShareVideoContent)时,canShow()将返回false.原因是Facebook SDK的WebView版本不支持共享此类内容.

我发现这是在handlePassthroughError()方法上调试他们的FacebookActivity类. (未记录)错误消息是:

“无法显示提供的内容.这通常意味着Facebook应用程序未安装或更新.如果通过Web显示,这可能意味着内容具有通过此渠道不支持属性.”

那么,当canShow()返回false时我们该怎么办?

这取决于您的情况.可能的解决方案是:

>显示一个对话框(或SnackBar)告诉用户他们需要安装Facebook应用程序才能共享此类内容;
>请求身份验证令牌,使用Facebook SDK记录用户,并使用您自己的对话框共享内容并直接调用Facebook API.

Facebook的可能解决方案是将其包含在他们的文档中或在LogCat上记录此错误.

希望能帮助到你!

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...