How to add Google Sign-in in Android App in Android Studio

 


In this video, I will tell you how to add Google Sign-in in Android App in Android Studio. The profile information obtained thus can be used to store in a database. The tutorial consists of the following functionalities. 1. Google sign-in 2. Sign-out 3. Checking for the user already signed-in 4. Showing profile info

The link to the source code is below:

Code snippet for dependencies in App level Gradle:: build.gradle

apply plugin: 'com.android.application' android { compileSdkVersion 29 buildToolsVersion "29.0.2" defaultConfig { applicationId "com.allcodingtutorials.googlesignin" minSdkVersion 19 targetSdkVersion 29 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'androidx.constraintlayout:constraintlayout:2.0.4' testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test:runner:1.3.0' androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' implementation 'com.google.android.gms:play-services-auth:19.0.0' implementation 'com.github.bumptech.glide:glide:4.12.0' annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0' }

Code snippet for Manifest:: AndroidManifest.xml


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

Codes snippet for activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout 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:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Click to Sign-in" android:layout_centerInParent="true" android:textSize="24dp" /> <com.google.android.gms.common.SignInButton android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/signin" android:layout_below="@id/text"/> </RelativeLayout>
Codes snippet for activity_profile.xml

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout 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:layout_width="match_parent" android:layout_height="match_parent" tools:context=".ProfileActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="vertical"> <ImageView android:id="@+id/profileimage" android:layout_width="100dp" android:layout_height="100dp"/> <TextView android:id="@+id/name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="30dp"/> <TextView android:id="@+id/firstname" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="30dp"/> <TextView android:id="@+id/secondname" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="30dp"/> <TextView android:id="@+id/email" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="30dp"/> <TextView android:id="@+id/userID" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="30dp"/> <Button android:id="@+id/signout" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Sign-out" android:textSize="24dp" android:layout_marginTop="30dp"/> </LinearLayout> </RelativeLayout>

Code snippet for MainActivity.java


package com.allcodingtutorials.googlesignin; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.ProgressBar; import android.widget.Toast; 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.common.SignInButton; import com.google.android.gms.common.api.ApiException; import com.google.android.gms.tasks.Task; public class MainActivity extends AppCompatActivity { SignInButton signInButton; GoogleSignInClient mGoogleSignInClient; static final int RC_SIGN_IN = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); signInButton = (SignInButton) findViewById(R.id.signin); GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestEmail() .build(); mGoogleSignInClient = GoogleSignIn.getClient(this, gso); signInButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { switch (view.getId()) { case R.id.signin: signIn(); break; }}}); } private void signIn() { Intent signInIntent = mGoogleSignInClient.getSignInIntent(); startActivityForResult(signInIntent, RC_SIGN_IN); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == RC_SIGN_IN) { Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data); handleSignInResult(task); } } private void handleSignInResult(Task<GoogleSignInAccount> completedTask) { try { GoogleSignInAccount account = completedTask.getResult(ApiException.class); Toast.makeText(this, "Sign-in Successful", Toast.LENGTH_SHORT).show(); Intent intent = new Intent(this, ProfileActivity.class); startActivity(intent); } catch (ApiException e) { Log.w("Error", "signInResult:failed code=" + e.getStatusCode()); } } @Override protected void onStart() { super.onStart(); GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this); if(account!=null) { Toast.makeText(this, "User already Signed-in", Toast.LENGTH_SHORT).show(); Intent intent = new Intent(getApplicationContext(),ProfileActivity.class); startActivity(intent); } } }
Code snippet for ProfileActivity.java

package com.allcodingtutorials.googlesignin; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import android.Manifest; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import com.bumptech.glide.Glide; 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.tasks.OnCompleteListener; import com.google.android.gms.tasks.Task; public class ProfileActivity extends AppCompatActivity { Button signout; GoogleSignInClient mGoogleSignInClient; TextView userName, userFirstName, userSecondName, userEmail, userId; ImageView profileImage; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_profile); userName = (TextView) findViewById(R.id.name); userFirstName = (TextView) findViewById(R.id.firstname); userSecondName = (TextView) findViewById(R.id.secondname); userEmail= (TextView) findViewById(R.id.email); userId = (TextView) findViewById(R.id.userID); profileImage = (ImageView) findViewById(R.id.profileimage); signout = (Button) findViewById(R.id.signout); GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestEmail() .build(); mGoogleSignInClient = GoogleSignIn.getClient(this, gso); GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this); if (account != null) { String personName = account.getDisplayName(); String personGivenName = account.getGivenName(); String personFamilyName = account.getFamilyName(); String personEmail = account.getEmail(); String personId = account.getId(); Uri personPhoto = account.getPhotoUrl(); userName.setText(personName); userFirstName.setText(personGivenName); userSecondName.setText(personFamilyName); userEmail.setText(personEmail); userId.setText(personId); Glide.with(this).load(personPhoto).into(profileImage); } signout.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { switch (view.getId()) { case R.id.signout: signOut(); break; } } });} private void signOut() { mGoogleSignInClient.signOut() .addOnCompleteListener(this, new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { Toast.makeText(ProfileActivity.this, "User Signed Out Successfully", Toast.LENGTH_SHORT).show(); Intent intent = new Intent(getApplicationContext(), MainActivity.class); startActivity(intent); } }); }}

That's all...

Comments

  1. هذه مدونة ذكية. أعني ذلك. لديك معرفة ممتازة عن هذا الموضوع. شكرا لتقاسم هذه المدونات الرائعة لنا. الرجاء زيارة موقعنا على الإنترنت موقع مجتمع

    ReplyDelete
  2. Merkur Slots Machines - SEGATIC PLAY - Singapore
    Merkur Slot Machines. 5 star jancasino.com rating. The Merkur Casino game 출장샵 was the bsjeon first to feature video https://septcasino.com/review/merit-casino/ slots in casinosites.one the entire casino,

    ReplyDelete

Post a Comment