我正在尝试在Android和iOS上使用Google OAuth2进行Google云端硬盘身份验证。我有一个使用ChildBrowser在Android上工作的解决方案,但它在iOS上不起作用。 PhoneGap Build支持建议我使用InAppBrowser,因为ChildBrowser已被折旧。
我可以让iOS和Android都提示我的用户输入ID / PW,然后在InAppBrowser中显示“允许访问”按钮,以便为Googl Drive提供访问权限。在Android上点击“允许访问”按钮会在网址中显示错误,并且网址中包含正确的代码和OAuth令牌。当使用childbrowser时,正是这个更改事件允许您检查代码4并获取令牌。 InAppBrowser只有LoadStart,LoadStop和Exit事件。
如何查看Google返回网址的成功/失败以及成功是否获取令牌?
感谢您的帮助!
答案 0 :(得分:0)
以下是我使用InAppBrowser进行Facebook身份验证的方法。由于您只是想从网址中获取值,因此它的工作方式应该相同:
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);
我试图只从我们的结构中拉出相关的位,所以希望这样有意义......