Android Facebook SDK共享对话框:永不返回完成手势
问题描述:
我在我的应用程序中使用facebook android sdk v3.5进行消息共享。对于需要跟踪消息是否成功发布的统计信息。不过,我总是得到空FacebookDialog.getNativeDialogCompletionGesture
onActivityResult()
Android Facebook SDK共享对话框:永不返回完成手势
我使用的代码是非常标准的。
代码调用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登录到您的应用程序并确实完成时才可用。值是“发布”或“取消”。
但我不明白这句话究竟是什么意思。
答
这意味着如果用户已经“认证”你的应用(即他们点击了某种形式的通过Facebook上的登录按钮在你的应用中,并给予你的应用至少基本的权限),那么你只能得到completionGesture。
如果他们没有,那么所有你得到的是getNativeDialogDidComplete,它总是返回true(无论用户点击“Share”还是“Cancel”),除非发生错误。
谢谢!这解释了这个问题。然而,从脸谱来看,这很奇怪。 –
为什么Facebook?我们是否通过默认的Facebook应用程序使用单点登录?为什么我们需要这个? – BQuadra
基本原因归结为,如果用户没有通过FB授权您的应用程序,那么您的应用程序无法知道用户在FB上做了什么。 –