2015-09-17 6 views
6

FacebookのSharing on Androidドキュメントは、次のコードスニペットでShareDialogを表示するように教えてくれるの上に偽:私たちは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); 
} 

私の質問です。 canShow()?どのようなシナリオでこれはおそらくfalseを返し、このシナリオを処理する必要がありますか?このコード例は、ユーザーに何も伝えないで静かに失敗するだけです。

答えて

19

私は昨日、これに関連したエラーをデバッグしようと多くの時間を費やしました。 Facebookのドキュメントはこの意味では貧弱で、このcanShow()メソッドに関連するエラーが発生した場合、それはまったく失敗し、ロギングはまったく失敗します。

だから、あなたの質問に答えるために:

なぜ我々はShareDialog.canShowを(チェックする必要がありますされて私の質問)? のシナリオでは、これはおそらくfalseを返し、 このシナリオを処理する必要がありますか?私が直面したシナリオに基づいて

:ユーザーがFacebookアプリが自分のデバイスにインストールされていない、あなたは写真(SharePhotoContent)やビデオ(ShareVideoContent)を共有したい場合、canShow()falseを返します。その理由は、Facebook SDKのWebViewバージョンでは、この種のコンテンツの共有がサポートされていないからです。

handlePassThroughError()メソッドで、FacebookActivityクラスのデバッグが見つかりました。

"提供されたコンテンツを表示できません。これは、通常、Facebookアプリケーションがインストールされていないか、最新ではないことを意味します。このチャンネルでサポートされていないプロパティ

canShow()falseを返します。

ご使用のシナリオによって異なります。可能な解決策は次のようになります:

  1. この種のコンテンツを共有できるようにFacebookアプリケーションをインストールする必要があることをユーザーに伝えるダイアログ(またはSnackBar)を表示します。
  2. 認証トークンをリクエストし、Facebook SDKを使用してユーザーをログオンし、独自のダイアログを使用してコンテンツを共有し、Facebook APIを直接呼び出します。

Facebookの可能な解決方法は、ドキュメントにこれを含めるか、このエラーをLogCatに記録することです。

希望すると助かります!

+0

facebookの仕事を掘り下げてくれてありがとう。 BTWは現在、彼らの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アプリケーションIDとあなたのコンテンツタイプチェック...などをチェックしています。 –

0

同じ問題に直面している人のこの回答。 @30%

facebook sdk sampleからShareDialog.canShow()が返されたときは、ShareApi.share機能を使用する必要があります。

+0

これは写真を共有していません –

関連する問題