2013-05-31 2 views
2

Я пытаюсь использовать Google OAuth2 для аутентификации Google Диска на Android и iOS. У меня было решение, работающее на Android с помощью ChildBrowser, но оно не работало на iOS. Поддержка PhoneGap Build предложила использовать InAppBrowser, потому что ChildBrowser обесценивается.Есть ли locationChange equlivent для PhoneGap InAppBrowser, как в ChildBrowser

Я могу получить iOS и Android, чтобы спросить моего пользователя о ID/PW, затем он показывает кнопку «Разрешить доступ» все в InAppBrowser, чтобы предоставить доступ к Google Goodl. При нажатии на кнопку «Разрешить доступ» нажатие кнопки «Разрешить доступ» дает сообщение об ошибке страницы с неправильным кодом и токеном OAuth в URL-адресе. При использовании childbrowser это событие изменения позволило вам проверить код 4 и получить токен. InAppBrowser имеет только события LoadStart, LoadStop и Exit.

Как проверить URL-адрес возврата Google для успеха/неудачи, и если успех захватит токен?

Спасибо за любую помощь!

ответ

0

Вот как я использую InAppBrowser для работы с Facebook. Так как вы просто пытаетесь захватить значение из URL-адрес, он должен работать точно так же:

var fb = { 
    id: '...' 
    ,secret: '...' 
    ,namespace: '...' 
    ,redirect: '...' 
    ,display: 'touch' 
    ,scope: ['publish_actions'] 

    ,windowRef: null 
    ,code: null 
    ,onLoadEvent: function(event){ 
     var url = event.url; 
     console.log(url); 

     //once we've been redirected to this domain, fb's job is done 
     if (/my.domain.com/.test(url)){ 

      if (/code=/.test(url)){ 
       //auth done 
       var code = url.match(/code=([^\&]+)/) 
       if (code) code = code[1]; 
       window.fb.code = code; 
       window.fb.windowRef.close(); 
      }else if (/error_description=/.test(url)){ 
       //login unsuccessful 
       var error = url.match(/error_description=([^\&]+)/); 
       if (error) error = error[1].replace(/[^A-Z0-9 ]/gi, " "); 
       console.error("facebook login failed: " + error); 
       window.fb.code = null; 
       window.fb.windowRef.close(); 
      } 

     } 
    } 
}; 

var authUrl = "https://graph.facebook.com/oauth/authorize?" 
      + "client_id=" + fb.id 
      + "&redirect_uri=" + encodeURI(fb.redirect) 
      + "&display=" + fb.display 
      + "&scope=" + fb.scope.join('%2C'); 

fb.windowRef = window.open(authUrl, '_blank', loginPopupOptions); 

//no reason we can't use the same function twice... 
fb.windowRef.addEventListener('loadstart', fb.onLoadEvent); 
fb.windowRef.addEventListener('loadstop', fb.onLoadEvent); 

Я пытался вытащить только соответствующие биты из нашей структуры, так, мы надеемся, это имеет смысл, таким образом .. .

Смежные вопросы