2015-09-17 69 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

這不是工作分享圖片 –