2

Android と iOS の両方で Google ドライブ認証に Google OAuth2 を使用しようとしています。ChildBrowser を使用して Android で動作するソリューションがありましたが、iOS では動作しませんでした。ChildBrowser が減価償却されているため、PhoneGap Build サポートは InAppBrowser を使用することを提案しました。

iOS と Android の両方を取得して、ユーザーに ID/PW の入力を促すことができます。その後、InAppBrowser にすべて [アクセスを許可] ボタンを表示して、Google ドライブへのアクセスを許可します。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 に答える