2012-04-23 79 views
3

当使用facebook android sdk打开对话框时,它一切正常。Facebook对话框和后退按钮

但是,如果用户单击后退按钮,则对话框确实会关闭,但不会调用对话监听器(或任何其他方法)的方法。

我搜索了这个问题,发现这个从fb android sdk在github上的请求:Calls Cancel on DialogListener when Dialog is Cancelled

我拿了一部分,并修改了它一点得到这样的:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) { 
     mWebView.stopLoading(); 
     dismiss(); 
     mListener.onCancel(); 
     return true; 
    } 

    return true; 
} 

,我把它添加到FbDialog类,实际上这似乎这样的伎俩。

我想知道的是为什么这不是sdk的一部分? 拉请求已超过一年,最后一次回复约为11个月。 为什么不把它添加到SDK源?

由于此解决方案工作并不紧急,但我不想修改facebook sdk的源代码,因为稍后可能会有问题(如果/当它们更新时)。

任何想法?

回答

0

当后退按钮不会导致在DialogListener上触发取消方法时,您可能会遇到带有bug的SDK。

点击此处查看了修复:https://github.com/facebook/facebook-android-sdk/pull/189

应用它后,你可以实现它在你的类是这样的:


//call for Fb login dialog 
facebook.authorize(this, Constants.FACEBOOK_PERMISSIONS, Facebook.FORCE_DIALOG_AUTH, (DialogListener) new LoginDialogListener()); 

class LoginDialogListener implements DialogListener{ 
     public void onComplete(Bundle values) { 
      saveCredentials(facebook); 
      postToWall(); 
     } 
     public void onFacebookError(FacebookError error) { 
      showToast("Authentication with Facebook failed!"); 
      finish(); 
     } 
     public void onError(DialogError error) { 
      showToast("Authentication with Facebook failed!"); 
      finish(); 
     } 
     public void onCancel() { 
      //back button pressed or dialog cancel pressed 
      showToast("Authentication with Facebook cancelled!"); 
      finish(); 
     } 

    } 
+1

感谢您的回答。老实说,我没有检查过这个问题,但为什么你会建议我使用'Facebook.FORCE_DIALOG_AUTH'?为了更好的用户体验,使用'SSO'是首选。 – 2012-06-19 22:14:15

+0

如果我没有记错的话,主要原因是非SSO使用更好的弹出对话框来显示身份验证面板,而SSO面板从右侧滑入(并在用户完成后返回到右侧)。似乎没有办法改变这个用户界面,至少在不直接破解SDK代码的情况下。 – repto 2012-06-25 16:55:01

+0

其他原因是应用程序要求之一是不使用已安装的Facebook客户端。 – repto 2012-06-25 17:08:45

6

您应该修改FbDialog class。 加入这行来设置对话框,返回键不取消:

setCancelable(false); 

或者添加这些行来处理BACK键点击:

@Override 
public void onBackPressed() { 
    mWebView.stopLoading(); 
    dismiss(); 
    mListener.onCancel(); 
} 
+0

感谢您的回复,我无法真正测试它,因为此代码不再使用.. 此外,这仍然需要修改fb源代码。 – 2012-09-01 10:52:00

+0

@NitzanTomer显然Facebook已经放弃了这个项目,因为目前有33个开放请求,甚至是同一个bug的重复。我删除了fb代码中的cancelable,它效果很好! – Draiken 2012-09-14 15:35:33

相关问题