Android Facebook SDK共享对话框:永不返回完成手势

问题描述:

我在我的应用程序中使用facebook android sdk v3.5进行消息共享。对于需要跟踪消息是否成功发布的统计信息。不过,我总是得到空FacebookDialog.getNativeDialogCompletionGestureonActivityResult()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”),除非发生错误。

+1

谢谢!这解释了这个问题。然而,从脸谱来看,这很奇怪。 –

+0

为什么Facebook?我们是否通过默认的Facebook应用程序使用单点登录?为什么我们需要这个? – BQuadra

+1

基本原因归结为,如果用户没有通过FB授权您的应用程序,那么您的应用程序无法知道用户在FB上做了什么。 –