единый вход facebook Android завершен, но действие закрывается без вызова onActivityResult()

#android #facebook #single-sign-on

#Android #Facebook #единый вход

Вопрос:

Проблема, с которой я столкнулся, заключается в том, что следует из названия. Я выполняю вызов authorize (), но никогда не могу вызвать authorizeCallback (), потому что onActivityResult () никогда не вызывается. Единый вход завершается, потому что он показывает экран разрешений (с надписью «Не разрешать» / «Разрешить»), а утверждение приложения отображается на моей странице Facebook settings. страница настроек. Есть идеи? Я думал, что это может быть как-то связано с режимом запуска действия, но удалил «singleInstance», и это ничего не изменило.

Как я упоминал выше, я могу подтвердить, что действие с разрешениями запущено в Facebook.java.

  try {
        Log.e("@@@", "Starting activity");
        activity.startActivityForResult(intent, activityCode);
    } catch (ActivityNotFoundException e) {
        didSucceed = false;
    }
  

Как бы то ни было, я могу подтвердить приведенный ниже код.

Я внедрил метод authorizeCallback() в onActivityResult():

 @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    mStateHolder.getFacebook().authorizeCallback(requestCode, resultCode, data);
}
  

.. но он никогда не вызывается. Метод авторизации, который я использовал, заключается в следующем:

 facebook.authorize(this, new String[]{ "user_birthday" }, new DialogListener() {
        public void onComplete(Bundle values) {
            Log.e(TAG, "onComplete()");
            // I make a request here..
        }
        // ...with the other methods as well
}
  

Другая потенциально полезная информация:

  • Я запускаю Nexus One, 2.3.4
  • Приложение Facebook установлено
  • Это работает нормально, если я принудительно использую метод Dialog, но я пытаюсь заставить единый вход работать.
  • РЕДАКТИРОВАТЬ: Ух ты! После долгих поисков я нашел проблему. Имело место мошенническое намерение.ФЛАГ_АКТИВНОСТИ_НО_ИСТОРИИ в intent (который не сохраняет действие в стеке). Спасибо всем за попытку ответить на этот вопрос.

    ПРАВКА2: удаление launchMode=singleInstance тоже имеет значение, кстати.. Я начал получать сообщение об ошибке «Не удалось прочитать подпись вызывающего пакета».

    Комментарии:

    1. Каково значение activityCode ? Пару раз я случайно использовал 0 , и согласно документации это не приведет к вызову onActivityResult() , даже если Activity запуск с startActivityForResult() .

    Ответ №1:

    Как вы завершаете свою аутентификацию? Вы должны установить тип результата и, возможно, отправить значение обратно. например:

     Intent data = new Intent();
    data.putExtra(ApplicationConstants.EXTRA_IS_DONE, true);
    setResult(RESULT_OK, data);
    finish();