共享回调不适用于 Facebook SDK 4 Android

Posted

技术标签:

【中文标题】共享回调不适用于 Facebook SDK 4 Android【英文标题】:Sharing callback doesnt work wiith Facebook SDK 4 Android 【发布时间】:2015-04-07 07:21:16 【问题描述】:

我最近将我的应用程序移至 FB SDK 4.0,但在分享时遇到了一些奇怪的问题。共享对话框效果很好 - 我可以与 Facebook 应用程序和 WebDialog 共享。但是,在成功/失败共享后,我的回调根本不起作用 - 所以我什至无法显示敬酒或记录任何内容。 我是这样做的:

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

【问题讨论】:

请发布您的整个活动/片段 @DavidJhons 更新了我的问题 【参考方案1】:

你必须重写 onActivityResult 方法, 如下更新您的方法,

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

【讨论】:

不,添加 super() 调用没有解决任何问题 - 仍然没有效果 你把那个放在哪里了?关于片段或活动? 片段。一切都在我的 Fragment 中。 把它放在托管活动中 哇,没想到会这样,谢谢!这有点奇怪,因为我在我的另一个 Fragment 上使用了几乎相同的回调并且调用了回调。顺便说一句 - 我还删除了我的 shareDialog.show(f, composeContent(title, description, link)); shareDialog.show(composeContent(title, description, link)) 的方法;因为我似乎使用的是静态方法。【参考方案2】:

不要忘记覆盖:

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

如果在Fragment中使用,那么还必须添加:

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

【讨论】:

【参考方案3】:

您需要在注册 facebookcallback 时指定 A requestCode。 shareDialog.registerCallback(**, **, requestCode);

【讨论】:

【参考方案4】:

确保在创建 ShareDialog 时传递片段(而不是传递活动):

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

然后您可以将facebookCallbackManager.onActivityResult() 留在片段的onActivityResult() 方法中。

【讨论】:

以上是关于共享回调不适用于 Facebook SDK 4 Android的主要内容,如果未能解决你的问题,请参考以下文章

Facebook状态回调不适用于片段

Facebook Messenger 链接共享不适用于消息

Facebook 明确共享的操作不适用于 Cordova 应用程序

共享对话框不适用于 Facebook 应用 [android]

facebook android sdk 4.0,从 LoginManager 注销回调的方法

Facebook与Libxdx共享4.x Facebook SDK