2015-04-07 59 views
13

我最近將我的應用程序移至了FB SDK 4.0,並且我在分享時遇到了一些奇怪的麻煩。共享對話框效果很好 - 我可以與Facebook應用程序和WebDialog共享。但是,在成功/失敗後,我的回叫功能根本不起作用 - 因此我甚至無法顯示敬酒或記錄任何內容。 這裏是我該怎麼辦:共享回調並不適用於Facebook SDK 4 Android

shareDialog.registerCallback(fbManager, new FacebookCallback<Sharer.Result>() { 
      @Override 
      public void onSuccess(Sharer.Result result) { 
       // This doesn't work 
       Toast.makeText(f.getActivity(), "You shared this post", Toast.LENGTH_SHORT).show(); 
      } 

      @Override 
      public void onCancel() { 
      } 

      @Override 
      public void onError(FacebookException e) { 
       // This doesn't work 
       e.printStackTrace(); 
      } 
     }); 

我甚至試過調試應用程序 - 沒有影響 - 該代碼甚至沒有被調用。

所以你可以指點我做錯了什麼,或者我錯過了什麼?

更新

由於我使用的是特殊的類與FB SDK的工作,這裏是它的一部分:

private static CallbackManager fbManager; 

public static CallbackManager init(Activity c) { 
    if (!FacebookSdk.isInitialized()) { 
     FacebookSdk.sdkInitialize(c); 
    } 

    return fbManager = CallbackManager.Factory.create(); 
} 

... 

public static void share(final Fragment f, final String title, final String description, final String link) { 
    ShareDialog shareDialog = new ShareDialog(f); 
    shareDialog.registerCallback(fbManager, new FacebookCallback<Sharer.Result>() { 
     @Override 
     public void onSuccess(Sharer.Result result) { 
      Toast.makeText(f.getActivity(), "You shared this post", Toast.LENGTH_SHORT).show(); 
     } 

     @Override 
     public void onCancel() { 
     } 

     @Override 
     public void onError(FacebookException e) { 
      e.printStackTrace(); 
     } 
    }); 
    shareDialog.show(f, composeContent(title, description, link)); 

這裏,它看起來像在片段:

private CallbackManager callbackManager; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    callbackManager = FacebookHelper.init(getActivity()); 
} 

... 

    @Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    callbackManager.onActivityResult(requestCode, resultCode, data); 
} 

private void publishStory() { 
    FacebookHelper.share(this, 
      "Title", 
      getResources().getString(R.string.sharing_text), 
      sharingLink); 
} 
+0

發表您的整個活動/片段請 –

+0

@DavidJhons更新我的問題 –

回答

28

您必須重寫onActivityResult方法, 更新您的方法如下,

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    callbackManager.onActivityResult(requestCode, resultCode, data); 
} 
+1

不,加入超()調用沒有任何修復 - 仍然沒有效果 –

+1

你在哪裏放呢?在片段或活動? –

+0

片段。一切都在我的片段。 –

1

您需要在註冊facebookcallback時指定requestCode。 shareDialog.registerCallback(**, **, requestCode);

1

不要忘了覆蓋:

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    callbackManager.onActivityResult(requestCode, resultCode, data); 
} 

如果使用的片段,然後還必須添加:

loginBtn = (LoginButton) view.findViewById(R.id.fb_login_button); 
loginBtn.setFragment(this); 
0

確保您通過片段(而不是傳遞活動)時你創建ShareDialog:

// From within a fragment 
ShareDialog dialog = new ShareDialog(this); 

然後你可以離開facebookCallbackManager.onActivityResult()裏面你的片段的onActivityResult()方法。

相關問題