2012-04-23 6 views
3

При использовании флеш-памяти Android sdk для открытия диалоговых окон все работает хорошо.Диалоговое окно Facebook и кнопка «Назад»

Однако, если пользователь нажимает кнопку «Назад», диалоговое окно действительно закрывается, но метод вызывающего диалога (или любого другого метода) не вызывает метод onCancel.

Я искал об этом вопросе и нашел этот запрос на тягу от sbk 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

Возможно, у вас есть SDK с ошибкой, когда кнопка «Назад» не вызывает способ отмены для DialogListener.

здесь проверить его для починки: 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» является предпочтительным для лучшего удобства пользователей. –

+0

Если я правильно помню, основной причиной этого было то, что Non-SSO использует более приятное диалоговое окно для всплывания, чтобы отобразить панель проверки подлинности, когда панель SSO слайд справа (и обратно вправо после завершения пользователем). Кажется, что нет возможности изменить этот интерфейс, по крайней мере, без взлома кода SDK. – repto

+0

Другая причина заключалась в том, что одним из требований приложения является не использование установленных клиентов Facebook. – repto

6

Вы должны модифицировать FbDialog класс. Добавить эту строку, чтобы установить диалог не отменяемый с ключом НАЗАД:

setCancelable(false); 

Или добавить эти строки для обработки клавиши возврата нажмите:

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

Спасибо за ответ, я не могу проверить его, так как этот код больше не используется. Кроме того, это все еще требует модификации исходного кода fb. –

+0

@NitzanTomer Видимо, facebook вроде отказался от этого проекта, так как в настоящее время существует 33 открытых запроса на растяжение, даже дубликатов этой же ошибки. Я удалил отмену кода fb, и он отлично работает! – Draiken