2015-09-17 34 views
6

Facebook的Sharing on Android文件告诉我们用下面的代码片段,显示ShareDialog:如何处理Facebook的ShareDialog.canShow()==假Android上

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

回答

19

昨天我花了很多时间试图调试与此相关的错误。在这个意义上,Facebook的文档很差,当这个方法出现错误时,它只是失败,根本就没有记录。

因此,要回答你的问题:

我的问题是为什么我们需要检查ShareDialog.canShow()?在 的情况下,这可能会返回false,我们是否需要处理 这种情况?

基于我所面临的场景:当用户没有在他们的设备上安装Facebook应用程序,你想分享照片(SharePhotoContent)或视频(ShareVideoContent),canShow()将返回false。原因是Facebook SDK的WebView版本不支持共享这种内容。

我发现在handlePassThroughError()方法中调试了它们的FacebookActivity类。 (未记录)的错误信息是:

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

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

这取决于你的情况。可能的解决方案是:

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

Facebook的可能解决方案将包括在他们的文档上或在LogCat上记录此错误。

希望它有帮助!

+0

感谢您挖掘Facebook的工作。顺便说一句,他们现在在他们的sdk中有'ShareApi.share(linkContent,shareCallback);'。 –

-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) { 

     } 
    }); 
+0

这与我的问题完全无关。我特别想知道为什么我们应该在显示对话框之前调用ShareDialog.canShow()。 –

+0

ShareDialog.canShow()正在检查您的Facebook sdk应用程序标识和您的内容类型检查...等。 –

0

对于面临同样问题的人来说这个答案。

@leocadiotine很棒。

facebook sdk sample,当ShareDialog.canShow()返回false时,应该使用ShareApi.share函数。

+0

这不是工作分享图片 –