Как использовать Google OAuth2 в приложении Sencha Touch2?

Я создаю веб-приложение, используя Sencha Touch2. На iPhone приложение можно использовать в полноэкранном режиме.

У меня уже есть веб-приложение для браузера ПК, и я использую API календаря Google для подключения к OAuth2.

На этапе авторизации необходимо открыть новое окно для входа в учетную запись пользователя Google.

Возможно, я смогу создать приложение Sencha Touch, используя ту же архитектуру ПК, но открытие нового окна закроет полноэкранное приложение.

Знаете ли вы, как использовать Google OAuth2 в приложении Sencha Touch2?

-- Добавить 2013/2/6

Приложение My Sencha Touch2 — это веб-приложение. Я хочу знать, что можно предоставить разрешение в полноэкранном веб-приложении, а не в браузере.

-- Добавить 2013/2/7

Я использую наконечник. http://miketheindian.com/2012/02/22/оставаясьвполноэкранномрежиме-на-iphone-от-страницы-к-странице/

Этот способ не требует открытия браузера. Это лучше, чем открывать новое окно, но лучше авторизоваться в iframe...

-- Добавлено 2013/2/13 Наконец-то я беру путь;

Google AOuth — это три шаблона для пользователя.

1.Учетная запись пользователя google вышла из системы, пользователь должен ввести идентификатор пользователя и пароль.

2. Аккаунт пользователя google является логином, но приложение не разрешено, пользователь должен нажать кнопку «разрешить».

3. Аккаунт пользователя google является логином, пользователю не нужно ничего делать.

Когда время 3., мы можем авторизоваться в iframe. И, когда время 1 или 2, мы не можем авторизоваться во фрейме, поэтому используйте метод изменения location.href (подробности в http://miketheindian.com/2012/02/22/staying-вполноэкранномрежименаiPhoneсостраницынастраницу/ ).

Подробности

make view имеет контейнер { xtype: 'container', html: '<iframe src="" id="googleLogin" style="border:0;">' },

изменить src в контроллере

var iframe =  Ext.get(Ext.query('#googleLogin'));
iframe.set(
  {
    src: responseInformation.googleOAuthUrl
  });

Когда время 3., пользователь входит в учетную запись google, это нормально.

Когда время 1. или 2., мы меняем location.href. Мы хотим обработать событие iframe «onerror», но этого события нет.

Я использую settimer и проверяю, не изменяется ли src iframe первым src (из-за ошибки перенаправления на страницу входа в Google).

3000 мс не так важно. Когда время 3., перенаправление успешно, и страница изменилась.

me.timerId = setInterval(function(){
 if (iframe.el.dom.src.indexOf( /* first url */'') !== -1){
  location.href = iframe.el.dom.src;
  clearInterval(me.timerId);
 }
}, 3000);

person taiji    schedule 05.02.2013    source источник


Ответы (2)


На Android лучше использовать локальную базу данных контактов на устройстве, а не работать по сети. Да, пользователь должен предоставить разрешение, но он все равно будет для доступа к сети. Таким образом, вам не нужно запускать какие-либо дополнительные браузеры или что-то еще.

person Tim Bray    schedule 05.02.2013
comment
Спасибо. Я не знаю базу данных контактов на устройстве. Но моего объяснения недостаточно. Мое приложение - веб-приложение. В iPhone, чтобы добавить кнопку «Домой» ссылки на приложение, используйте веб-приложение, такое как собственное приложение. - person taiji; 06.02.2013

Есть еще один способ справиться с проблемой:

Используйте плагин inAppBrowser от Cordova или Sencha, чтобы запустить приглашение аутентификации, затем с помощью eventListener дождитесь загрузки страницы, и если URL-адрес соответствует URL-адресу обратного вызова, вы можете проанализировать URL-адрес и получить аутентификацию/код или аутентификацию/токен. Пример использования Кордовы:

window.authmodal = window.open(authorizationUrl, '_blank', 'location=yes');
window.authmodal.addEventListener('loadstart', function(event){
  var code = getParam(event.url,"code");
    if(code != null){
      //here we got the code, now make a last request to get the TOKEN
      OAuth2Helper.finish(function(token){
        window.authmodal.close();
        window.localStorage.setItem("token",token)
        //do somethink else with your logic
      },code)   
    }else{
      //no code found in this page start.
    }

});

ПРИМЕЧАНИЕ. OAuth2Helper.finish делает запрос к URL-адресу токена, используя код, чтобы получить действительный и пригодный для использования токен.

person Iván Guillén    schedule 23.04.2014