- Get link
- X
- Other Apps
- Get link
- X
- Other Apps
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
هذه مدونة ذكية. أعني ذلك. لديك معرفة ممتازة عن هذا الموضوع. شكرا لتقاسم هذه المدونات الرائعة لنا. الرجاء زيارة موقعنا على الإنترنت موقع مجتمع
ReplyDeleteThanks man
ReplyDeleteMerkur Slots Machines - SEGATIC PLAY - Singapore
ReplyDeleteMerkur 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,