Saltar al contenido

Cómo utilizar la API de inicio de sesión de Google con Cordova/Phonegap

Esta es la contestación más válida que te podemos dar, pero estúdiala pausadamente y valora si se puede adaptar a tu trabajo.

Solución:

¡Google ha dejado de admitir la respuesta aceptada anterior! Después del 20 de abril de 2017, ya no se admitirá el uso del navegador integrado en la aplicación descrito por @Deep Mehta. Si usa la respuesta aceptada, comenzará a fallar muy pronto.

Aquí está la publicación de Google sobre el cambio: https://developers.googleblog.com/2016/08/modernizing-oauth-interactions-in-native-apps.html

Afortunadamente, hay un nuevo complemento que envuelve toda la funcionalidad que necesita para hacer esto:

https://github.com/EddyVerbruggen/cordova-plugin-googleplus y en NPM https://www.npmjs.com/package/cordova-plugin-googleplus

Aquí hay un artículo sobre cómo usarlo en Ionic 1 y 2 también: http://blog.ionic.io/google-oauth-changes

Nuevamente, ¡NO UTILICE LA RESPUESTA ACEPTA! Fallará después del 20 de abril de 2017.

agregue este código en un archivo js e inclúyalo en su proyecto. cuando desee acceder a la API de inicio de sesión de Google en el botón, haga clic en llamar function callGoogle() el resto lo hará este código. No olvide agregar su ID de cliente y Client_Secret keys. esta trabajando bien para mi. Necesita el complemento cordova inappbrowser.

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

Recomiendo este complemento de cordova: https://www.npmjs.com/package/cordova-plugin-googleplus Es bastante reciente, pero lo acabo de agregar a mi aplicación y parece funcionar.

Sección de Reseñas y Valoraciones

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *