安卓Facebook SDK分享对话框:永远不会返回完成手势

6
我正在我的应用程序中使用Facebook Android SDK v3.5进行消息分享。为了统计目的,我需要跟踪消息是否已成功发布。然而,当我在onActivityResult()中获取FacebookDialog.getNativeDialogCompletionGesture时,我总是得到null。
我使用的代码非常标准。
调用Facebook共享对话框的代码:
    private void sendToFacebook()
    {
        if (!FacebookDialog.canPresentShareDialog(getActivity().getApplicationContext(),        FacebookDialog.ShareDialogFeature.SHARE_DIALOG))
        {
         return;
        }

        FacebookDialog shareDialog = new FacebookDialog.ShareDialogBuilder(getActivity())
                .setName(getString(R.string.refer_friend_facebook_name))
                .setDescription(getString(R.string.refer_friend_facebook_description))
                .setCaption(getString(R.string.facebook_app_name))
                .setLink(getString(R.string.web_endpoint))
                .setPicture(getString(R.string.facebook_picture_90))
                .build();

        activity.getFacebookUiHelper().trackPendingDialogCall(shareDialog.present());

    }

我用来处理调用结果的代码:

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data)
    {
            facebookUiHelper.onActivityResult(requestCode, resultCode, data, new FacebookDialog.Callback()
            {
                @Override
                public void onError(FacebookDialog.PendingCall pendingCall, Exception error, Bundle data)
                {
                 // track on error                                                   
                }

                @Override
                public void onComplete(FacebookDialog.PendingCall pendingCall, Bundle data)
                {
                    if (FacebookDialog.getNativeDialogDidComplete(data))
                    {
                        if (FacebookDialog.getNativeDialogCompletionGesture(data) == null 
                              || FacebookDialog.COMPLETION_GESTURE_CANCEL.equals(FacebookDialog.getNativeDialogCompletionGesture(data)))
                        {
                            // track cancel                                                   
                        }
                        else
                        {
                            // track post
                        }
                    }
                    else
                    {
                        // track cancel              
                    }
                }
            });
}

在Facebook SDK文档中指出:

FacebookDialog.getNativeDialogCompletionGesture - 仅在用户使用 Facebook 登录您的应用程序且 did complete 设置为 true 时可用。值为 "post" 或 "cancel"。

但我无法理解这个短语的确切含义。
1个回答

3
这意味着只有在用户通过你的应用程序进行了“认证”(即,他们通过你的应用程序中的某种形式的Facebook登录按钮,并至少授予了基本权限)后,你才能获得completionGesture。
如果他们没有这样做,那么你只会得到getNativeDialogDidComplete,它总是返回true(无论用户单击“共享”还是“取消”),除非发生错误。

1
谢谢!这解释了问题。不过从 Facebook 的角度来看,这还是相当奇怪的。 - Alexey A.
为什么要使用Facebook?我们是否通过默认的Facebook应用程序使用单点登录?我们为什么需要这个? - BQuadra
1
基本的推理是,如果用户没有通过 Facebook 授权你的应用程序,那么你的应用程序就无法知道该用户在 Facebook 上正在做什么。 - Ming Li

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接