Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


¿Cómo obtener un perfil como género de google signin en Android?

Quiero integrar el inicio de sesión de Google a mi aplicación, cuando el usuario primero se conecte Crearé un enlace de cuenta a esto, así que necesito algunos perfiles como el género, la localización, etc. y probé como el google-sign-in doc y rápido Muestra la muestra de inicio:

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestEmail() .build(); mGoogleApiClient = new GoogleApiClient.Builder(this) .enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */) .addApi(Auth.GOOGLE_SIGN_IN_API, gso) .build(); 

Cuando haga clic para iniciar sesión Voy a llamar:

  Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient); startActivityForResult(signInIntent, RC_SIGN_IN); 

Entrar con éxito, puedo obtener una estructura de datos GoogleSignInResult en onActivityResult, de GoogleSignInResult puedo obtener un GoogleSignInAccount, que sólo contiene DisplayName, correo electrónico e id. Pero cuando en https://developers.google.com/apis-explorer/#p/ , puedo obtener perfiles como género, idioma. ¿Hay algo que me perdí?

Y he intentado google más api, parece que puedo conseguir lo que quiero. Pero no saben cómo usar, el doc dice crear cliente como este:

 mGoogleApiClient = new GoogleApiClient.Builder(this) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .addApi(Plus.API) .addScope(new Scope(Scopes.PLUS_LOGIN)) .addScope(new Scope(Scopes.PLUS_ME)) .build(); 

Pero cuando uso esto, el botón de inicio de sesión de clic causará un fallo de la aplicación.

Actualización: problemas al actualizar la nueva versión de google Iniciar sesión Falta api_key / clave actual con Google Services 3.0.0

  • Signin de Google Firebase dando estado 12501 (no funciona), en la versión de creación de la versión y jks SHA
  • Recuperar Token de Google Access después de autenticado mediante la autenticación de Firebase
  • No se puede resolver el símbolo 'Auth' para la integración de Google en android studio
  • Comenzando google-services.json a GitHub
  • Se requiere la autenticación de Google con un servidor de back-end
  • Ocurrió un INTERNAL_ERROR cuando requestEmail de GoogleSignInOptions Android
  • Cómo resolver el problema de "com.google.android.gms.auth.api.signin.internal.SignInHubActivity" ActivityNotFoundException in google signin integration
  • Obtención de 'E / TokenRequestor: Tiene configuraciones relacionadas con OAuth2 erróneas. Error detallado: INVALID_AUDIENCE 'incluso después de proporcionar identificaciones de cliente precisas
  • 4 Solutions collect form web for “¿Cómo obtener un perfil como género de google signin en Android?”

    ACTUALIZAR:

    Dado que Plus.PeopleApi ha quedado obsoleto en Google Play Services 9.4 como se indica en las notas de la declaración de Google , consulte las siguientes soluciones utilizando Google People API en su lugar:

    Consigue los detalles de la persona en la nueva conexión de Google Play Services 8.3 (la respuesta de Isabella Chen);

    No se puede obtener un cumpleaños privado de la cuenta de Google Plus aunque se solicita explícitamente

    FIN DE LA ACTUALIZACIÓN


    En primer lugar, asegúrate de haber creado un perfil de Google+ para tu cuenta de Google. A continuación, puede consultar el siguiente código:

     GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestScopes(new Scope(Scopes.PLUS_LOGIN)) .requestEmail() .build(); 

    y

     mGoogleApiClient = new GoogleApiClient.Builder(this) .enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */) .addApi(Auth.GOOGLE_SIGN_IN_API, gso) .addApi(Plus.API) .build(); 

    Entonces

      @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...); if (requestCode == RC_SIGN_IN) { GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); handleSignInResult(result); // G+ Person person = Plus.PeopleApi.getCurrentPerson(mGoogleApiClient); Log.i(TAG, "--------------------------------"); Log.i(TAG, "Display Name: " + person.getDisplayName()); Log.i(TAG, "Gender: " + person.getGender()); Log.i(TAG, "AboutMe: " + person.getAboutMe()); Log.i(TAG, "Birthday: " + person.getBirthday()); Log.i(TAG, "Current Location: " + person.getCurrentLocation()); Log.i(TAG, "Language: " + person.getLanguage()); } } 

    Dentro del archivo build.gradle

     // Dependency for Google Sign-In compile 'com.google.android.gms:play-services-auth:8.3.0' compile 'com.google.android.gms:play-services-plus:8.3.0' 

    Puedes echar un vistazo al proyecto de ejemplo My GitHub . ¡Espero que esto ayude!

    La gente de Plus people está obsoleta, no la utilice más. La forma de hacerlo es con la API de personas de Google. Active esta API en su proyecto. Si no lo hace, la excepción lanzada en Studio incluye un enlace directo a su proyecto para habilitarlo (agradable).

    Incluya las siguientes dependencias en build.gradle de su aplicación:

     compile 'com.google.api-client:google-api-client:1.22.0' compile 'com.google.api-client:google-api-client-android:1.22.0' compile 'com.google.apis:google-api-services-people:v1-rev4-1.22.0' 

    Hacer un GoogleSignIn autorizado como normal. No necesita ningún Escopo o Api que no sea el de cuentas básicas, por ejemplo

     GoogleSignInOptions.DEFAULT_SIGN_IN .addApi(Auth.GOOGLE_SIGN_IN_API, gso) 

    Y las solicitudes de correo electrónico y perfil es todo lo que necesita.

    Ahora, una vez que tenga un resultado de inicio de sesión exitoso, puede obtener la cuenta, incluido el correo electrónico (podría hacerlo también con el ID).

     final GoogleSignInAccount acct = googleSignInResult.getSignInAccount(); 

    Ahora la nueva parte: Cree y ejecute un AsyncTask para llamar a la API de Google People después de recibir el correo electrónico acct.

     // get Cover Photo Asynchronously new GetCoverPhotoAsyncTask().execute(Prefs.getPersonEmail()); 

    Aquí está la AsyncTask:

     // Retrieve and save the url to the users Cover photo if they have one private class GetCoverPhotoAsyncTask extends AsyncTask<String, Void, Void> { HttpTransport httpTransport = new NetHttpTransport(); JacksonFactory jsonFactory = new JacksonFactory(); // Retrieved from the sigin result of an authorized GoogleSignIn String personEmail; @Override protected Void doInBackground(String... params) { personEmail = params[0]; Person userProfile = null; Collection<String> scopes = new ArrayList<>(Collections.singletonList(Scopes.PROFILE)); GoogleAccountCredential credential = GoogleAccountCredential.usingOAuth2(SignInActivity.this, scopes); credential.setSelectedAccount(new Account(personEmail, "com.google")); People service = new People.Builder(httpTransport, jsonFactory, credential) .setApplicationName(getString(R.string.app_name)) // your app name .build(); // Get info. on user try { userProfile = service.people().get("people/me").execute(); } catch (IOException e) { Log.e(TAG, e.getMessage(), e); } // Get whatever you want if (userProfile != null) { List<CoverPhoto> covers = userProfile.getCoverPhotos(); if (covers != null && covers.size() > 0) { CoverPhoto cover = covers.get(0); if (cover != null) { // save url to cover photo here, load at will //Prefs.setPersonCoverPhoto(cover.getUrl()); } } } return null; } } 

    Aquí está la materia que está disponible de la persona

    Si pega el código en su proyecto, asegúrese de que las importaciones se resuelvan correctamente. Hay nombres de clases superpuestos con algunas de las API más antiguas.

    Cree las opciones de inicio de sesión de Google, como a continuación. Esto funciona perfecto para mí

     GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestEmail() .requestProfile() .requestScopes(new Scope(Scopes.PLUS_ME)) .requestScopes(new Scope(Scopes.PLUS_LOGIN)) .build(); 

    Después de iniciar sesión, haga:

      Plus.PeopleApi.load(mGoogleApiClient, acct.getId()).setResultCallback(new ResultCallback<People.LoadPeopleResult>() { @Override public void onResult(@NonNull People.LoadPeopleResult loadPeopleResult) { Person person = loadPeopleResult.getPersonBuffer().get(0); LogUtil.d("googleuser: getGivenName " + (person.getName().getGivenName())); LogUtil.d("googleuser: getFamilyName " + (person.getName().getFamilyName())); LogUtil.d("googleuser: getDisplayName " + (person.getDisplayName())); LogUtil.d("googleuser: getGender " + (person.getGender() + "")); LogUtil.d("googleuser: getBirthday " + (person.getBirthday() + "")); } }); 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.