una servidor para moviles hacer funciona end como app aplicaciones android parse.com google-login google-plus-signin

android - servidor - hosting para aplicaciones moviles



¿Cómo vincular a los usuarios que iniciaron sesión en Google+en el back-end de Parse en Android? (5)

Esto parece ser similar a Cómo crear una cuenta _User de análisis de un token de Google Android?

A continuación está mi respuesta en ese hilo:

1. Nuevo usuario

El flujo es el siguiente:

  1. El usuario autoriza y se adquiere un token
  2. Creamos un nuevo usuario con una contraseña aleatoria

Puede crear un ParseUser usando el siguiente código dentro del método newChooseAccountIntent() que devuelve el correo electrónico.

ParseUser user = new ParseUser(); user.setUsername(mEmail); user.setPassword(randomPassword); user.setEmail(mEmail); user.signUpInBackground(new SignUpCallback() { public void done(ParseException e) { if (e == null) { // Hooray! Let them use the app now. } else { // Sign up didn''t succeed. Look at the ParseException // to figure out what went wrong } } });

2. Usuario recurrente

Aquí es donde la mayoría de las personas se estancó, ya que investigué a través de Internet. El flujo es el siguiente:

  1. El usuario autoriza y la aplicación recibe un token
  2. Pasamos este token a Cloud Code para validarlo. Necesitamos comprobar si este token está firmado por Google y si es para nosotros ( android-developers (2013)).
  3. Después de que pueda verificar que el token sea válido, puede consultar al usuario en Cloud Code utilizando el método Parse.Cloud.useMasterKey() y devolver la clave de sesión utilizando el método getSessionToken() en el resultado de la consulta.
  4. Use la clave de sesión para guardar el estado de inicio de sesión en el disco llamando becomeInBackground método becomeInBackground

Para validar el token , puede enviar Parse.Cloud.httprequest a este punto final: https://www.googleapis.com/oauth2/v3/tokeninfo?access_token= . Esto se instruye en la Documentación de identidad de Google . Recibirás datos de la siguiente manera:

{ "iss": "https://accounts.google.com", "sub": "110169484474386276334", "azp": "1008719970978-hb24n2dstb40o45d4feuo2ukqmcc6381.apps.googleusercontent.com", "email": "[email protected]", "at_hash": "X_B3Z3Fi4udZ2mf75RWo3w", "email_verified": "true", "aud": "1008719970978-hb24n2dstb40o45d4feuo2ukqmcc6381.apps.googleusercontent.com", "iat": "1433978353", "exp": "1433981953" }

Las cosas que se deben comparar son "aud", "azp" y "email", que se traducen como audiencia, parte autorizada y correo electrónico.

Para consultar al usuario actual en Cloud Code :

var query = new Parse.Query(Parse.User); query.equalTo("email",mEmail); query.first({ success: function(user) { // Use user..getSessionToken() to get a session token }, error: function(user, error) { // }, useMasterKey: true });

Nota: asegúrese de tener el alcance siguiente para que el correo electrónico se muestre cuando revise el código de la nube: https://www.googleapis.com/auth/plus.profile.emails.read

He estado usando Parse durante 3 meses en mi aplicación de Android. Ahora quiero agregar el inicio de sesión de correo electrónico y los inicios de sesión sociales (Facebook y Google+) en la aplicación. He agregado con éxito el correo electrónico y el inicio de sesión de fb y el usuario puede conectar ambos o uno de correo electrónico o de Facebook y la aplicación reconocerá al usuario.

Por ejemplo, si inicio sesión por correo electrónico, conecto Facebook, uso la aplicación en otro dispositivo, inicio de sesión a través de Facebook, la aplicación sabría que es el mismo usuario y se personalizaría para mí y mostraría mis datos. Y el correo electrónico también funciona.

Agregué el inicio de sesión de Google+ para Android, pero no puedo conectar las credenciales de Google+ del usuario con el usuario que inició sesión.

La tabla Parse Users tiene un campo authData que obtiene los datos de autenticación de Facebook y recibe Twitter, así como ambos inicios de sesión se integran en los SDK de Parse.

¿Qué debería ser lo mejor para hacer en Google+? ¿Estoy confundido acerca del diseño de db y cómo conectar al usuario que inició sesión con Google+?

¿Qué pasa si el usuario simplemente inicia sesión a través de Google+? ¿Cómo hago un usuario de Parse y autentico al usuario en Parse?

Me siento cómodo con el código de la nube y Android, y realmente apreciaría algún tipo de ayuda / instrucciones simplemente empujándome en la dirección correcta. Nunca he usado OAuth2 y con el inicio de sesión de Parse para el correo electrónico y los inicios de sesión sociales, no creo que deba entrar en ello. Pero avísame si me equivoco.

¡Gracias!

Actualización : He leído muchas preguntas sobre Parse Questions y he comprobado el método become muchas veces (porque seguí pensando que me estaba perdiendo algo después de leer eso). Verifique esta pregunta: actualmente estoy en la misma situación .

Yo tengo:
1. Implementé el inicio de sesión de Google+.
2. Obtuvo token de acceso usando GoogltAuthUtil.

Atorado con:
3. ¿Cómo vincular al usuario de Parse que está actualmente registrado después de que el usuario inicia sesión en Google+?
4. ¿Cómo crear un nuevo usuario de Parse si Google+ fue la primera (y única) opción de inicio de sesión del usuario?


Hay una pregunta sobre esto en las preguntas de Parse. Está justo aquí y estoy bastante seguro de que responde tus preguntas.

https://parse.com/questions/google-plus

Se vincula al blog de análisis, que tiene algunas soluciones para esto.

Dice que puede agregar cualquier inicio de sesión en ParseUser. Estarías haciendo algo como esto:

Parse.User.become("session-token-here").then(function (user) { // The current user is now set to user. }, function (error) { // The token could not be validated. });

Otro sitio donde debe echar un vistazo: https://parse.com/tutorials/adding-third-party-authentication-to-your-web-app

Este último es oficial y tiene un código de ejemplo


Para hacerlo, he usado el siguiente código

ParseUser.becomeInBackground(ParseUser.getCurrentUser().getSessionToken(), new LogInCallback() { @Override public void done(ParseUser parseUser, ParseException e) { if (parseUser != null) { parseUser.setUsername(userEmail); //firstName and lastName I am getting from Person class of google plus api parseUser.put("FirstName", firstName); parseUser.put("LastName", lastName); parseUser.saveInBackground(); ParseUtils.verifyParseConfiguration(context); ParseUtils.subscribeWithUsername(strEmail); Intent successIntent = new Intent(context, OurServicesActivity.class); startActivity(successIntent); overridePendingTransition(R.animator.fade_in, R.animator.fade_out); finish(); } else { Log.e(TAG, e.getMessage()); Utilities.showToast(context, "Something occurred"); } } });

Avísame si te sirve o si has usado algo más.


Prueba esto

ParseUser.becomeInBackground("session-token-here", new LogInCallback() { public void done(ParseUser user, ParseException e) { if (user != null) { // The current user is now set to user. } else { // The token could not be validated. } }

})


void createNewGPlusUser(final String email, String name) { final ParseUser user = new ParseUser(); user.setUsername(email); user.setPassword("my pass"); user.put("any other variable in User class", "value"); user.setEmail(email); user.put("name", name); signInParseUser(user, email); } void signInParseUser(final ParseUser user, final String email) { user.signUpInBackground(new SignUpCallback() { public void done(ParseException e) { if (e == null) { Log.d("TAG", "Created user"); // Hooray! Let them use the app now. login(email); } else { Log.d("TAG", "Failed Creating user"); e.printStackTrace(); // Sign up didn''t succeed. Look at the ParseException // to figure out what went wrong } } }); } void login(final String email) { ParseUser.logInInBackground(email, "my pass", new LogInCallback() { public void done(ParseUser user, ParseException e) { if (user != null) { // Hooray! The user is logged in. Log.d("TAG", "Login successful"); } else { // Signup failed. Look at the ParseException to see what happened. } } }); }