2012-04-23 96 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