在ChildBrowser中是否有针对PhoneGap InAppBrowser的locationChange equlivent

时间:2013-05-31 22:29:34

标签: android ios cordova childbrowser inappbrowser

我正在尝试在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返回网址的成功/失败以及成功是否获取令牌?

感谢您的帮助!

1 个答案:

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

我试图只从我们的结构中拉出相关的位,所以希望这样有意义......