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


Uso de google-account para iniciar sesión en la aplicación Android

Estoy desarrollando una aplicación en Android y quiero permitir a los usuarios iniciar sesión con su cuenta de google, ¿alguien me puede ayudar a PLZ?

  • NetBeans + Android: después de la actualización tengo error: build.xml: 77: Android Target no está configurado
  • Atributo de configuración del elemento hijo del diseño incluido
  • Atributo de ángulo en android gradiente
  • Android: ¿Cómo obtener el color de fondo de Actividad en Java?
  • Tipo Advertencia de seguridad con Iterator JSON
  • Cómo crear UUID de cadena en android
  • Guardar mapa de bits en Android como JPEG en almacenamiento externo en una carpeta
  • Las pestañas de menú no responden
  • El bloqueo del sistema al reemplazar shouldInterceptRequest en WebViewClient
  • BottomSheetDialogFragment - ¿Cómo enrollar contenido y mostrarlo completamente?
  • Cómo iniciar la aplicación de calendario de Android con Intent (Froyo)
  • Descargar y guardar imágenes con Picasso
  • 8 Solutions collect form web for “Uso de google-account para iniciar sesión en la aplicación Android”

    Es posible que desee autenticar al usuario utilizando una de las cuentas de google ya configuradas en su dispositivo como algunas de las aplicaciones, para ello siga el siguiente enlace:

    "Autenticación a los servicios de OAuth2" – http://developer.android.com/training/id-auth/authenticate.html

    Descargar muestra de Google – Android SDK Manager / Extras / Servicios de Google Play

    En pasos simples

    1. Muestra una lista de cuentas en tu móvil
    2. Genera token de acceso de cuentas seleccionadas
    3. Obtiene el nombre de la cuenta del token de acceso poniéndose en contacto con los servicios de google (llamada separada) para decir que se ha autenticado.

    Este es otro enlace que es bueno en explicar el proceso – http://android-developers.blogspot.in/2013/01/verifying-back-end-calls-from-android.html

    Puede seguir los siguientes pasos para iniciar sesión en su aplicación

    1. Enviará el token de acceso generado a su servidor de fondo
    2. El servidor de back-end comprueba que el token de acceso es válido o no al ponerse en contacto con los servicios de google por esta url " https://www.googleapis.com/oauth2/v1/userinfo?access_token=ACCESS_TOKEN "
    3. Siguiente El servidor back-end responde a la aplicación si desea que el usuario inicie sesión o no.

    A continuación se muestra el formato de respuesta de la llamada "userinfo" anterior

    { "id": "ID", "name": "NAME", "given_name": "GiVEN NAME", "family_name": "FAMILY_NAME", "link": "https://plus.google.com/ID", "picture": "https://PHOTO.jpg", "gender": "GENDER", "locale": "LOCALE" } 

    Si desea que el ID de correo electrónico junto con esa respuesta que tiene que modificar

    SCOPE = "oauth2: https://www.googleapis.com/auth/userinfo.profile ";

    a

    SCOPE = "oauth2: https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email ";

    En esa muestra

    Echa un vistazo a http://developer.android.com/training/id-auth/index.html Allí encontrarás un tutorial sobre cómo usar el Account Manager. (Más específicamente http://developer.android.com/reference/android/accounts/AccountManager.html )

    Seguro que puede que desee comenzar con esto:

    Los sitios web y las aplicaciones de terceros ahora pueden permitir que los visitantes inicien sesión con sus cuentas de usuario de Google. El inicio de sesión federado, basado en el estándar OpenID, libera a los usuarios de tener que configurar cuentas de inicio de sesión independientes para distintos sitios web y libera a los desarrolladores de sitios web de la tarea de implementar medidas de autenticación de inicio de sesión. OpenID alcanza este objetivo proporcionando un marco en el que los usuarios pueden establecer una cuenta con un proveedor de OpenID, como Google, y utilizar esa cuenta para iniciar sesión en cualquier sitio web que acepte OpenIDs. Esta página describe cómo integrar el inicio de sesión federado de Google para un sitio web o una aplicación.

    https://developers.google.com/accounts/docs/OpenID

    ¡Vuelve cuando te quedas atascado!

    No puedes iniciar sesión en una aplicación de Android con una cuenta de Google. Utiliza una cuenta de Google para iniciar sesión en un sitio web o servicio web como GMail, Calendar, etc., o un sitio web de terceros si utiliza OpenID. Dado que su aplicación no es un sitio web, esto no funcionará. Puede realizar cualquiera de los siguientes procedimientos:

    • Compruebe si el usuario ha registrado una cuenta de Google (utilizando AccountManager ) en su teléfono y solo permite que usen la aplicación si la tiene. Si una cuenta está registrada, puede estar razonablemente seguro de que saben la contraseña (o robaron el teléfono de alguien …)
    • Construye tu propio webservice (por ejemplo, usando AppEngine) que utiliza tu aplicación y usa las cuentas de Google para iniciar sesión

    Primero inserte la línea de abajo en sus dependencias build.gradle

     compile 'com.google.android.gms:play-services:7.5.0' 

    Ahora necesitamos la huella digital SHA-1 que tenemos que dar en Google Developers Console.

    Java keytool se utiliza para generar la huella digital SHA-1. Abra el símbolo del sistema y abra el siguiente comando para generar la huella dactilar SHA-1 y para la contraseña, ingrese android si se le solicita.

     keytool -list -v -keystore "%USERPROFILE%\.android\debug.keystore" -alias androiddebugkey -storepass android -keypass android 

    Para autenticarse y comunicarse con las API de Google+, debe crear un proyecto de la Consola de desarrolladores de Google en el que tenga que habilitar la API de Google+ y crear un ID de cliente de OAuth 2.0.

    1. Ir a la Consola de desarrolladores de Google . Y crear un nuevo proyecto
    2. Una vez que haya terminado con la creación de un proyecto, haga clic en API en la sección API y Auth. Busque la API de Google+ y seleccione la que he mostrado en la imagen de abajo.
    3. Habilite la API de Google+ seleccionando el botón Activar API disponible.
    4. Después de activar, vaya a la sección Credenciales de la API y cree un nuevo ID de cliente.
    5. Seleccione la Aplicación Instalada como el tipo y configure la pantalla de consentimiento
    6. Ahora rellene el nombre del paquete de su proyecto, pegue la huella SHA1, active la opción Deep Linking para activar los mensajes interactivos y todos los demás parámetros como se muestra en la imagen de abajo.

    Ahora es el momento de declarar los permisos a su archivo mainfest. Así es como aparecerá el archivo de manifiesto después de agregar metadatos y todos los permisos.

     <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.androstock.loginwithgoogle" > <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="android.permission.USE_CREDENTIALS" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> 

    Ahora nos dirigimos hacia nuestra clase MainActivity.java donde vamos a hacer todas nuestras cosas para el inicio de sesión de Google+.

     package com.androstock.loginwithgoogle; import android.content.Intent; import android.content.IntentSender.SendIntentException; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.AsyncTask; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.util.Log; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.GooglePlayServicesUtil; import com.google.android.gms.common.SignInButton; import com.google.android.gms.common.api.GoogleApiClient; import com.google.android.gms.common.api.GoogleApiClient.OnConnectionFailedListener; import com.google.android.gms.plus.Plus; import com.google.android.gms.plus.model.people.Person; import java.io.InputStream; // A project by Ferdousur Rahman Shajib // www.androstock.com public class MainActivity extends AppCompatActivity implements OnClickListener, GoogleApiClient.ConnectionCallbacks, OnConnectionFailedListener { // Profile pic image size in pixels private static final int PROFILE_PIC_SIZE = 400; /* Request code used to invoke sign in user interactions. */ private static final int RC_SIGN_IN = 0; /* Client used to interact with Google APIs. */ private GoogleApiClient mGoogleApiClient; /* A flag indicating that a PendingIntent is in progress and prevents * us from starting further intents. */ private boolean mIntentInProgress; private boolean mShouldResolve; private ConnectionResult connectionResult; private SignInButton signInButton; private Button signOutButton; private TextView tvName, tvMail, tvNotSignedIn; private ImageView imgProfilePic; private LinearLayout viewContainer; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imgProfilePic = (ImageView) findViewById(R.id.imgProfilePic); signInButton = (SignInButton) findViewById(R.id.sign_in_button); signOutButton = (Button) findViewById(R.id.sign_out_button); tvName = (TextView) findViewById(R.id.tvName); tvMail = (TextView) findViewById(R.id.tvMail); tvNotSignedIn = (TextView) findViewById(R.id.notSignedIn_tv); viewContainer = (LinearLayout) findViewById(R.id.text_view_container); signInButton.setOnClickListener(this); signOutButton.setOnClickListener(this); mGoogleApiClient = new GoogleApiClient.Builder(this) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .addApi(Plus.API) .addScope(Plus.SCOPE_PLUS_LOGIN) .build(); } protected void onStart() { super.onStart(); mGoogleApiClient.connect(); } protected void onStop() { super.onStop(); if (mGoogleApiClient.isConnected()) { mGoogleApiClient.disconnect(); } } private void resolveSignInError() { if (connectionResult.hasResolution()) { try { mIntentInProgress = true; connectionResult.startResolutionForResult(this, RC_SIGN_IN); } catch (SendIntentException e) { mIntentInProgress = false; mGoogleApiClient.connect(); } } } /* When the GoogleApiClient object is unable to establish a connection onConnectionFailed() is called */ @Override public void onConnectionFailed(ConnectionResult result) { if (!result.hasResolution()) { GooglePlayServicesUtil.getErrorDialog(result.getErrorCode(), this, 0).show(); return; } if (!mIntentInProgress) { connectionResult = result; if (mShouldResolve) { resolveSignInError(); } } } /* onConnectionFailed() was started with startIntentSenderForResult and the code RC_SIGN_IN, we can capture the result inside Activity.onActivityResult. */ @Override protected void onActivityResult(int requestCode, int responseCode, Intent intent) { if (requestCode == RC_SIGN_IN) { if (responseCode != RESULT_OK) { mShouldResolve = false; } mIntentInProgress = false; if (!mGoogleApiClient.isConnecting()) { mGoogleApiClient.connect(); } } } @Override public void onConnected(Bundle arg0) { mShouldResolve = false; try { if (Plus.PeopleApi.getCurrentPerson(mGoogleApiClient) != null) { Person person = Plus.PeopleApi .getCurrentPerson(mGoogleApiClient); String personName = person.getDisplayName(); String personPhotoUrl = person.getImage().getUrl(); String email = Plus.AccountApi.getAccountName(mGoogleApiClient); tvName.setText(personName); tvMail.setText(email); personPhotoUrl = personPhotoUrl.substring(0, personPhotoUrl.length() - 2) + PROFILE_PIC_SIZE; new LoadProfileImage(imgProfilePic).execute(personPhotoUrl); Toast.makeText(getApplicationContext(), "You are Logged In " + personName, Toast.LENGTH_LONG).show(); } else { Toast.makeText(getApplicationContext(), "Couldnt Get the Person Info", Toast.LENGTH_SHORT).show(); } } catch (Exception e) { e.printStackTrace(); } signOutUI(); } private void signOutUI() { signInButton.setVisibility(View.GONE); tvNotSignedIn.setVisibility(View.GONE); signOutButton.setVisibility(View.VISIBLE); viewContainer.setVisibility(View.VISIBLE); } private void signInUI() { signInButton.setVisibility(View.VISIBLE); tvNotSignedIn.setVisibility(View.VISIBLE); signOutButton.setVisibility(View.GONE); viewContainer.setVisibility(View.GONE); } /** * Fetching user's information name, email, profile pic */ private void getProfileInformation() { } @Override public void onConnectionSuspended(int arg0) { mGoogleApiClient.connect(); signInUI(); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.sign_in_button: onSignInClicked(); break; case R.id.sign_out_button: onSignOutClicked(); break; } } private void onSignInClicked() { if (!mGoogleApiClient.isConnecting()) { mShouldResolve = true; resolveSignInError(); } } private void onSignOutClicked() { if (mGoogleApiClient.isConnected()) { Plus.AccountApi.clearDefaultAccount(mGoogleApiClient); mGoogleApiClient.disconnect(); signInUI(); } } /** * Background Async task to load user profile picture from url * */ private class LoadProfileImage extends AsyncTask<String, Void, Bitmap> { ImageView bmImage; public LoadProfileImage(ImageView bmImage) { this.bmImage = bmImage; } protected Bitmap doInBackground(String... urls) { String urldisplay = urls[0]; Bitmap mIcon11 = null; try { InputStream in = new java.net.URL(urldisplay).openStream(); mIcon11 = BitmapFactory.decodeStream(in); } catch (Exception e) { Log.e("Error", e.getMessage()); e.printStackTrace(); } return mIcon11; } protected void onPostExecute(Bitmap result) { bmImage.setImageBitmap(result); } } } 

    Crea activity_main.xml que contendrá nuestro diseño de inicio de sesión y cierre de sesión.

     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:gravity="center"> <LinearLayout android:id="@+id/text_view_container" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" android:paddingLeft="16dp" android:paddingRight="16dp" android:visibility="gone" android:gravity="center"> <ImageView android:id="@+id/imgProfilePic" android:layout_width="80dp" android:layout_height="wrap_content"/> <TextView android:id="@+id/tvName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="5dp" android:textSize="20dp" /> <TextView android:id="@+id/tvMail" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="5dp" android:textSize="18dp" /> </LinearLayout> <Button android:id="@+id/sign_out_button" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginBottom="10dp" android:background="@android:color/holo_red_light" android:layout_marginLeft="19dp" android:layout_marginRight="19dp" android:text="LOGOUT" android:textColor="#fff" android:textStyle="bold" android:visibility="gone" /> <TextView android:id="@+id/notSignedIn_tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginBottom="30dp" android:text="You are not Signed In" android:textSize="20sp" /> <com.google.android.gms.common.SignInButton android:id="@+id/sign_in_button" android:layout_width="220dp" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" /> </LinearLayout> 

    Eso es gente. Ya has terminado con el inicio de sesión de Google+. Para más detalles puede visitar aquí .

    Aquí es cómo integrar google inicio de sesión con la última y más suave manera.

    A partir de esta referencia: google login android studio

    Primero cree la aplicación en la consola del desarrollador de google y descargue el archivo de configuración y copie la carpeta de la aplicación.

    Luego agregue el siguiente en build.gradle(Project: project_name)

     classpath 'com.google.gms:google-services:1.5.0-beta2' maven { url 'https://jitpack.io' } allprojects { repositories { } } 

    Agregar código en build.gradle(Module:app)

     compile 'com.google.android.gms:play-services-auth:9.0.2' compile 'com.google.android.gms:play-services:9.0.2' compile 'com.github.androidquery:androidquery:0.26.9' 

    Agrega el siguiente en activity_main.xml

     <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.exampledemo.parsaniahardik.google_login_demonuts.MainActivity"> <ImageView android:layout_width="200dp" android:layout_height="200dp" android:scaleType="fitXY" android:layout_marginTop="20dp" android:layout_gravity="center_horizontal" android:id="@+id/iv"/> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/text" android:textColor="#000" android:layout_marginTop="20dp" android:textAppearance="?android:attr/textAppearanceMedium"/> <com.google.android.gms.common.SignInButton android:id="@+id/sign_in_button" android:layout_width="200dp" android:layout_marginTop="20dp" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" /> <Button android:layout_width="200dp" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:layout_gravity="center_horizontal" android:text="Logout" android:id="@+id/btn"/> </LinearLayout> 

    Añada a continuación en MainActivity.java

     import android.content.Intent; import android.support.annotation.NonNull; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import com.androidquery.AQuery; import com.google.android.gms.auth.api.Auth; import com.google.android.gms.auth.api.signin.GoogleSignInAccount; import com.google.android.gms.auth.api.signin.GoogleSignInOptions; import com.google.android.gms.auth.api.signin.GoogleSignInResult; import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.SignInButton; import com.google.android.gms.common.api.GoogleApiClient; import com.google.android.gms.common.api.ResultCallback; import com.google.android.gms.common.api.Status; import com.google.android.gms.plus.People; import com.google.android.gms.plus.Plus; import com.google.android.gms.plus.model.people.Person; public class MainActivity extends AppCompatActivity implements GoogleApiClient.OnConnectionFailedListener{ private SignInButton signInButton; private GoogleSignInOptions gso; private GoogleApiClient mGoogleApiClient; private int SIGN_IN = 30; private TextView tv; private ImageView iv; private AQuery aQuery; private Button btn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestEmail() .build(); signInButton = (SignInButton) findViewById(R.id.sign_in_button); mGoogleApiClient = new GoogleApiClient.Builder(this) .enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */) .addApi(Auth.GOOGLE_SIGN_IN_API, gso) .addApi(Plus.API) .build(); signInButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient); startActivityForResult(signInIntent, SIGN_IN); } }); tv = (TextView) findViewById(R.id.text); iv = (ImageView) findViewById(R.id.iv); btn = (Button) findViewById(R.id.btn); aQuery = new AQuery(this); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Auth.GoogleSignInApi.signOut(mGoogleApiClient).setResultCallback( new ResultCallback<Status>() { @Override public void onResult(Status status) { Toast.makeText(MainActivity.this, "Logout Successfully!", Toast.LENGTH_SHORT).show(); } }); } }); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); //If signin if (requestCode == SIGN_IN) { GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); //Calling a new function to handle signin handleSignInResult(result); } } private void handleSignInResult(GoogleSignInResult result) { //If the login succeed if (result.isSuccess()) { //Getting google account final GoogleSignInAccount acct = result.getSignInAccount(); //Displaying name and email String name = acct.getDisplayName(); final String mail = acct.getEmail(); // String photourl = acct.getPhotoUrl().toString(); final String givenname="",familyname="",displayname="",birthday=""; 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); Log.d("GivenName ", person.getName().getGivenName()); Log.d("FamilyName ",person.getName().getFamilyName()); Log.d("DisplayName ",person.getDisplayName()); Log.d("gender ", String.valueOf(person.getGender())); //0 = male 1 = female String gender=""; if(person.getGender() == 0){ gender = "Male"; }else { gender = "Female"; } if(person.hasBirthday()){ tv.setText(person.getName().getGivenName()+" \n"+person.getName().getFamilyName()+" \n"+gender+"\n"+person.getBirthday()); }else { tv.setText(person.getName().getGivenName()+" \n"+person.getName().getFamilyName()+" \n"+gender); } aQuery.id(iv).image(acct.getPhotoUrl().toString()); Log.d("Uriddd",acct.getPhotoUrl().toString()); /* Log.d(TAG,"CurrentLocation "+person.getCurrentLocation()); Log.d(TAG,"AboutMe "+person.getAboutMe());*/ // Log.d("Birthday ",person.getBirthday()); // Log.d(TAG,"Image "+person.getImage()); } }); } else { //If login fails Toast.makeText(this, "Login Failed", Toast.LENGTH_LONG).show(); } } @Override public void onConnectionFailed(ConnectionResult connectionResult) { } } 

    Tutorial oficial paso a paso de Google:

    https://developers.google.com/identity/sign-in/android/start

      **Dependency** **Need Internet Permission** **Working Code see Link on play Store** https://play.google.com/store/search?q=com.codecube.airbucks compile 'com.google.android.gms:play-services:8.3.0' <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <com.google.android.gms.common.SignInButton android:id="@+id/sign_in_button" android:layout_width="200dp" android:layout_marginTop="20dp" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" /> <Button android:layout_width="200dp" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:layout_gravity="center_horizontal" android:text="Logout" android:id="@+id/btn"/> </LinearLayout> package com.keshav.geofencing; import android.Manifest; import android.annotation.TargetApi; import android.app.ProgressDialog; import android.content.BroadcastReceiver; import android.content.Intent; import android.content.pm.PackageManager; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; import android.support.v4.content.LocalBroadcastManager; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.TextView; import com.facebook.CallbackManager; import com.facebook.FacebookCallback; import com.facebook.FacebookException; import com.facebook.FacebookSdk; import com.facebook.GraphRequest; import com.facebook.GraphResponse; import com.facebook.login.LoginManager; import com.facebook.login.LoginResult; import com.google.android.gms.appindexing.Action; import com.google.android.gms.appindexing.AppIndex; import com.google.android.gms.auth.api.Auth; import com.google.android.gms.auth.api.signin.GoogleSignInAccount; import com.google.android.gms.auth.api.signin.GoogleSignInOptions; import com.google.android.gms.auth.api.signin.GoogleSignInResult; import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.GoogleApiAvailability; import com.google.android.gms.common.api.GoogleApiClient; import com.google.android.gms.common.api.OptionalPendingResult; import com.google.android.gms.common.api.ResultCallback; import com.google.android.gms.common.api.Status; import org.json.JSONException; import org.json.JSONObject; import java.util.Arrays; import utilities.CommonMethod; import utilities.LoginPreferences; public class LoginWithGmail extends AppCompatActivity implements GoogleApiClient.OnConnectionFailedListener { private static final int PLAY_SERVICES_RESOLUTION_REQUEST = 9000; private static final String TAG = "LoginActivity"; private static final int RC_SIGN_IN = 9001; Button loginSub; LinearLayout signInButton; String gmailId; String gmailName; String gmailUserEmailId; Uri gmailUserPhoto; String savePassword; LinearLayout btnlogin; TextView btnsigning; ProgressDialog prgDialog; private CallbackManager callbackManager; private BroadcastReceiver mRegistrationBroadcastReceiver; private LinearLayout fbloginButton; // private CallbackManager callbackManager; private ProgressDialog mProgressDialog; private GoogleApiClient mGoogleApiClient; EditText edtEmail; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login1); checkPermission(); 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) .addApi(AppIndex.API).build(); // Google Sign up Button signInButton = (LinearLayout) findViewById(R.id.sign_in_button); signInButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { int permissionCheck = ContextCompat.checkSelfPermission(LoginWithGmail.this, Manifest.permission.CAMERA); if (permissionCheck == PackageManager.PERMISSION_GRANTED) { //showing dialog to select image Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient); signInIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivityForResult(signInIntent, RC_SIGN_IN); Log.e("permission", "granted"); } else { ActivityCompat.requestPermissions(LoginWithGmail.this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA}, 1); } } else { Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient); signInIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivityForResult(signInIntent, RC_SIGN_IN); } } }); } public void checkPermission() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { int permissionCheck = ContextCompat.checkSelfPermission(LoginWithGmail.this, Manifest.permission.CAMERA); if (permissionCheck == PackageManager.PERMISSION_GRANTED) { //showing dialog to select image if (CommonMethod.isNetworkAvailable(LoginWithGmail.this)) { Log.e("keshav", "Permission if part marsh"); } else { CommonMethod.showAlert("Internet Connectivity Failure", LoginWithGmail.this); } Log.e("keshav", "permission granted"); } else { ActivityCompat.requestPermissions(LoginWithGmail.this, new String[]{Manifest.permission.CAMERA, Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, 1); } } } @Override protected void onResume() { super.onResume(); // LocalBroadcastManager.getInstance(this).registerReceiver(mRegistrationBroadcastReceiver, // new IntentFilter(QuickstartPreferences.REGISTRATION_COMPLETE)); } @Override protected void onPause() { LocalBroadcastManager.getInstance(this).unregisterReceiver(mRegistrationBroadcastReceiver); super.onPause(); } @Override public void onBackPressed() { super.onBackPressed(); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == RC_SIGN_IN) { GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); handleSignInResult(result); } } // TODO ADD ME @Override public void onStart() { super.onStart(); OptionalPendingResult<GoogleSignInResult> opr = Auth.GoogleSignInApi.silentSignIn(mGoogleApiClient); if (opr.isDone()) { // If the user's cached credentials are valid, the OptionalPendingResult will be "done" // and the GoogleSignInResult will be available instantly. Log.e(TAG, "Got cached sign-in"); GoogleSignInResult result = opr.get(); handleSignInResult(result); } else { // If the user has not previously signed in on this device or the sign-in has expired, // this asynchronous branch will attempt to sign in the user silently. Cross-device // single sign-on will occur in this branch. showProgressDialog(); opr.setResultCallback(new ResultCallback<GoogleSignInResult>() { @Override public void onResult(GoogleSignInResult googleSignInResult) { hideProgressDialog(); handleSignInResult(googleSignInResult); } }); } } // [START signOut] private void signOut() { Auth.GoogleSignInApi.signOut(mGoogleApiClient).setResultCallback( new ResultCallback<Status>() { @Override public void onResult(Status status) { // [START_EXCLUDE] // updateUI(false); // [END_EXCLUDE] } }); } // [END signOut] // [START revokeAccess] private void revokeAccess() { Auth.GoogleSignInApi.revokeAccess(mGoogleApiClient).setResultCallback( new ResultCallback<Status>() { @Override public void onResult(Status status) { // [START_EXCLUDE] // updateUI(false); // [END_EXCLUDE] } }); } // [END revokeAccess] @Override public void onConnectionFailed(ConnectionResult connectionResult) { // An unresolvable error has occurred and Google APIs (including Sign-In) will not // be available. Log.e(TAG, "onConnectionFailed:" + connectionResult); } private void showProgressDialog() { if (mProgressDialog == null) { mProgressDialog = new ProgressDialog(this); mProgressDialog.setMessage("Loading..."); mProgressDialog.setIndeterminate(true); } if (LoginWithGmail.this != null && mProgressDialog != null && !mProgressDialog.equals("null")) mProgressDialog.show(); } private void hideProgressDialog() { if (mProgressDialog != null && mProgressDialog.isShowing()&& !mProgressDialog.equals("null")) { mProgressDialog.hide(); } } // TODO ADD ME ENd private void handleSignInResult(GoogleSignInResult result) { Log.e("&&&s", "handleSignInResult:" + result.isSuccess()); if (result.isSuccess()) { // Signed in successfully, show authenticated UI. GoogleSignInAccount acct = result.getSignInAccount(); gmailId = acct.getId(); gmailName = acct.getDisplayName(); gmailUserEmailId = acct.getEmail(); gmailUserPhoto = acct.getPhotoUrl(); Log.e("gmailId", "is -->" + gmailId); Log.e("gmailName", "is -->" + gmailName); Log.e("gmailUserEmailId", "is -->" + gmailUserEmailId); Log.e("gmailUserPhoto", "is -->" + gmailUserPhoto); LoginPreferences.getActiveInstance(LoginWithGmail.this).setUserName(gmailName); LoginPreferences.getActiveInstance(LoginWithGmail.this).setProfileImage(""+gmailUserPhoto); Log.e("information", "using Gmail is > " + gmailId + " " + gmailName + "" + gmailUserEmailId + "" + gmailUserPhoto); if (CommonMethod.isNetworkAvailable(LoginWithGmail.this)) { Log.e("SignUp gmail", "Hit API.........................."); Intent i=new Intent(LoginWithGmail.this,DrawerActivity.class); LoginPreferences.getActiveInstance(LoginWithGmail.this).setIsLoggedIn(true); startActivity(i); finish(); // TODO Here Registered User in own Database call Volley Retrofit2 Api .... new SignUpSocialFacebookAsyncTask().execute(); } else { CommonMethod.showAlert("Intenet Connectivity Failure", LoginWithGmail.this); } } else { } // TODO ADD ME KESHAV Google GMail Logout Auth.GoogleSignInApi.signOut(mGoogleApiClient); } @Override public void onStop() { super.onStop(); // ATTENTION: This was auto-generated to implement the App Indexing API. // See https://g.co/AppIndexing/AndroidStudio for more information. Action viewAction = Action.newAction( Action.TYPE_VIEW, // TODO: choose an action type. "Login Page", // TODO: Define a title for the content shown. // TODO: If you have web page content that matches this app activity's content, // make sure this auto-generated web page URL is correct. // Otherwise, set the URL to null. Uri.parse("http://host/path"), // TODO: Make sure this auto-generated app deep link URI is correct. Uri.parse("android-app://com.keshav.geofencing/http/host/path") ); AppIndex.AppIndexApi.end(mGoogleApiClient, viewAction); mGoogleApiClient.disconnect(); } //Todo add new method for permission @TargetApi(Build.VERSION_CODES.M) @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { if (requestCode == RC_SIGN_IN) { Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient); signInIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivityForResult(signInIntent, RC_SIGN_IN); } } } **Dependency** **Need Internet Permission** **Working Code see Link on play Store** https://play.google.com/store/search?q=com.codecube.airbucks 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.