How to use Google Login API with Cordova/Phonegap

前端 未结 5 1417
后悔当初
后悔当初 2020-11-29 01:16

I want to use \"Login with Google\" in my Phonegap App. I have read many articles but couldn\'t find out how it is done. Thanks in Advance. I tried using oAuth2 for \"instal

相关标签:
5条回答
  • 2020-11-29 01:33

    Another implementation that works well here: https://github.com/valenzia10/PhonegapGoogleLogin

    0 讨论(0)
  • 2020-11-29 01:43

    It's 2019: and Google+ API is shut down.

    Google has an article about how to authenticate using the firebase API.

    0 讨论(0)
  • 2020-11-29 01:48

    Google has dropped support for the accepted answer above! After April 20th 2017 use of the In-App browser as described by @Deep Mehta will no longer be supported. If you use the accepted answer then it is going to start failing very soon.

    Here's Google's post about the change: https://developers.googleblog.com/2016/08/modernizing-oauth-interactions-in-native-apps.html

    Luckily there's a new plugin that wraps up all the funcitonality that you need to do this:

    https://github.com/EddyVerbruggen/cordova-plugin-googleplus and on NPM https://www.npmjs.com/package/cordova-plugin-googleplus

    Here's an article on how to use it in Ionic 1 and 2 also: http://blog.ionic.io/google-oauth-changes

    Again - DO NOT USE THE ACCEPTED ANSWER! It will fail after April 20 2017.

    0 讨论(0)
  • 2020-11-29 01:50

    I recommend this cordova plugin: https://www.npmjs.com/package/cordova-plugin-googleplus It's pretty recent but I just added it to my app and it seems to do the trick!

    0 讨论(0)
  • 2020-11-29 01:59

    add this code in one js file and include in your project. when you want to access google login api on button click call function callGoogle() rest will be done by this code. Dont forget to add your client id and Client_Secret keys. Its working fine for me. You need inappbrowser cordova plugin.

    var googleapi = {
        authorize: function(options) {
            var deferred = $.Deferred();
             //Build the OAuth consent page URL
            var authUrl = 'https://accounts.google.com/o/oauth2/auth?' + $.param({
                client_id: options.client_id,
                redirect_uri: options.redirect_uri,
                response_type: 'code',
                scope: options.scope
            });
    
            //Open the OAuth consent page in the InAppBrowser
            var authWindow = window.open(authUrl, '_blank', 'location=no,toolbar=no');
    
            //The recommendation is to use the redirect_uri "urn:ietf:wg:oauth:2.0:oob"
            //which sets the authorization code in the browser's title. However, we can't
            //access the title of the InAppBrowser.
            //
            //Instead, we pass a bogus redirect_uri of "http://localhost", which means the
            //authorization code will get set in the url. We can access the url in the
            //loadstart and loadstop events. So if we bind the loadstart event, we can
            //find the authorization code and close the InAppBrowser after the user
            //has granted us access to their data.
            $(authWindow).on('loadstart', function(e) {
                var url = e.originalEvent.url;
                var code = /\?code=(.+)$/.exec(url);
                var error = /\?error=(.+)$/.exec(url);
    
                if (code || error) {
                    //Always close the browser when match is found
                    authWindow.close();
                }
    
                if (code) {
                    //Exchange the authorization code for an access token
                    $.post('https://accounts.google.com/o/oauth2/token', {
                        code: code[1],
                        client_id: options.client_id,
                        client_secret: options.client_secret,
                        redirect_uri: options.redirect_uri,
                        grant_type: 'authorization_code'
                    }).done(function(data) {
                        deferred.resolve(data);
    
                        $("#loginStatus").html('Name: ' + data.given_name);
                    }).fail(function(response) {
                        deferred.reject(response.responseJSON);
                    });
                } else if (error) {
                    //The user denied access to the app
                    deferred.reject({
                        error: error[1]
                    });
                }
            });
    
            return deferred.promise();
        }
    };
    var accessToken;
    var UserData = null;
    
    function callGoogle() {
    
        //  alert('starting');
        googleapi.authorize({
            client_id: 'client_id',
            client_secret: 'Client_Secret',
            redirect_uri: 'http://localhost',
            scope: 'https://www.googleapis.com/auth/plus.login https://www.googleapis.com/auth/userinfo.email'
        }).done(function(data) {
            accessToken = data.access_token;
            // alert(accessToken);
            // $loginStatus.html('Access Token: ' + data.access_token);
            console.log(data.access_token);
            console.log(JSON.stringify(data));
            getDataProfile();
    
        });
    
    }
    
    // This function gets data of user.
    function getDataProfile() {
        var term = null;
        //  alert("getting user data="+accessToken);
        $.ajax({
            url: 'https://www.googleapis.com/oauth2/v1/userinfo?alt=json&access_token=' + accessToken,
            type: 'GET',
            data: term,
            dataType: 'json',
            error: function(jqXHR, text_status, strError) {},
            success: function(data) {
                var item;
    
                console.log(JSON.stringify(data));
                // Save the userprofile data in your localStorage.
                localStorage.gmailLogin = "true";
                localStorage.gmailID = data.id;
                localStorage.gmailEmail = data.email;
                localStorage.gmailFirstName = data.given_name;
                localStorage.gmailLastName = data.family_name;
                localStorage.gmailProfilePicture = data.picture;
                localStorage.gmailGender = data.gender;
            }
        });
        disconnectUser();
    }
    
    function disconnectUser() {
        var revokeUrl = 'https://accounts.google.com/o/oauth2/revoke?token=' + accessToken;
    
        // Perform an asynchronous GET request.
        $.ajax({
            type: 'GET',
            url: revokeUrl,
            async: false,
            contentType: "application/json",
            dataType: 'jsonp',
            success: function(nullResponse) {
                // Do something now that user is disconnected
                // The response is always undefined.
                accessToken = null;
                console.log(JSON.stringify(nullResponse));
                console.log("-----signed out..!!----" + accessToken);
            },
            error: function(e) {
                // Handle the error
                // console.log(e);
                // You could point users to manually disconnect if unsuccessful
                // https://plus.google.com/apps
            }
        });
    }
    
    0 讨论(0)
提交回复
热议问题