2

我正在尝试在 Android 和 iOS 上使用 Google OAuth2 进行 Google Drive 身份验证。我有一个使用 ChildBrowser 在 Android 上运行的解决方案,但它在 iOS 上不起作用。PhoneGap Build 支持建议我使用 InAppBrowser,因为 ChildBrowser 已折旧。

我可以让 iOS 和 Android 都提示我的用户输入 ID/PW,然后它会在 InAppBrowser 中显示“允许访问”按钮以授予 Googl Drive 访问权限。在 Android 上,点击“允许访问”按钮会在 url 中显示正确代码和 OAuth 令牌的页面不可用错误。使用 childbrowser 时,正是这个更改事件允许您检查代码 4 并获取令牌。InAppBrowser 只有 LoadStart、LoadStop 和 Exit 事件。

如何检查 Google 返回 URL 是否成功/失败以及是否成功获取令牌?

感谢您的任何帮助!

4

1 回答 1

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);

我试图只从我们的结构中提取相关部分,所以希望这样有意义......

于 2013-07-10T19:45:04.477 回答