September 7, 2021
Google Sign In – Android – Java Code
package com.zakasoft.ilovebangladeshquiz; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.TextView; import android.widget.Toast; import com.google.android.gms.auth.api.Auth; import com.google.android.gms.auth.api.signin.GoogleSignIn; import com.google.android.gms.auth.api.signin.GoogleSignInAccount; import com.google.android.gms.auth.api.signin.GoogleSignInClient; 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.ApiException; import com.google.android.gms.common.api.GoogleApiClient; import com.google.android.gms.tasks.Task; import com.zakasoft.ilovebangladeshquiz.databinding.ActivityMainBinding; import androidx.activity.result.ActivityResult; import androidx.activity.result.ActivityResultCallback; import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.contract.ActivityResultContract; import androidx.activity.result.contract.ActivityResultContracts; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import static android.content.ContentValues.TAG; public class GoogleLoginActivity extends AppCompatActivity { GoogleSignInClient mGoogleSignInClient; SignInButton signInButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //binding = ActivityMainBinding.inflate(getLayoutInflater()); setContentView(R.layout.googlelogin_activity); signInButton = (SignInButton)findViewById(R.id.sign_in_button); // Configure sign-in to request the user's ID, email address, and basic // profile. ID and basic profile are included in DEFAULT_SIGN_IN. GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestEmail() .build(); // Build a GoogleSignInClient with the options specified by gso. mGoogleSignInClient = GoogleSignIn.getClient(this, gso); // Check for existing Google Sign In account, if the user is already signed in // the GoogleSignInAccount will be non-null. GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this); signInButton.setSize(SignInButton.SIZE_STANDARD); //findViewById(R.id.sign_in_button).setOnClickListener((View.OnClickListener) this); signInButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { signIn(); } }); //updateUI(account); } private void signIn() { Intent signInIntent = mGoogleSignInClient.getSignInIntent(); startActivityForResult.launch(signInIntent); } ActivityResultLauncher<Intent> startActivityForResult = registerForActivityResult( new ActivityResultContracts.StartActivityForResult(), result -> { if(result.getResultCode() == Activity.RESULT_OK){ Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(result.getData()); handleSignInResult(task); } } ); private void handleSignInResult(Task<GoogleSignInAccount> completedTask) { try { GoogleSignInAccount acct = completedTask.getResult(ApiException.class); if (acct != null) { String personName = acct.getDisplayName(); String personGivenName = acct.getGivenName(); String personFamilyName = acct.getFamilyName(); String personEmail = acct.getEmail(); String personId = acct.getId(); //Uri personPhoto = acct.getPhotoUrl(); Toast.makeText(getApplicationContext(),personName + personGivenName + personFamilyName + personEmail + personId,Toast.LENGTH_LONG ).show(); } // Signed in successfully, show authenticated UI. //updateUI(account); } catch (ApiException e) { // The ApiException status code indicates the detailed failure reason. // Please refer to the GoogleSignInStatusCodes class reference for more information. Log.w(TAG, "signInResult:failed code=" + e.getStatusCode()); //updateUI(null); } } }
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/relativeLayout" android:layout_width="match_parent" android:layout_height="match_parent" > <com.google.android.gms.common.SignInButton android:id="@+id/sign_in_button" android:layout_width="0dp" android:layout_height="wrap_content" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>
implementation 'com.google.android.gms:play-services-auth:19.0.0'
Generate Sha-1 using keytook --- test using the signed apk