Mengintegrasikan Login Google di Aplikasi Android
Untuk mengintegrasikan API Google Signin di aplikasi kita, kita perlu mengonfigurasi aplikasi kami ke akun developer Google dan mendownload file 'google-service.json' untuk aplikasi Android.
Langkah-langkah untuk mengonfigurasi Aplikasi Android di Akun Developer Google
1. Buat akun developer Google di https://developers.google.com/identity/sign-in/android/start-integrating">https://developers.google.com/identity/sign-in/android/start-integrating dan klik 'GET A CONFIGURATION FILE'.2. Isi semua detail aplikasi dan pilih negara/wilayah Anda dan klik 'Pilih dan konfigurasikan layanan'.
3. Setelah berhasil membuat konfigurasi dukungan Google app, konfigurasi tersebut akan dialihkan ke jendela berikutnya untuk memilih layanan Google. Kita akan memilih layanan Login Google.
4. Sekarang, kita perlu memberikan sertifikasi penandatanganan SHA-1 kunci aplikasi kita.
5. Ada dua cara yang berbeda untuk menghasilkan kunci sertifikasi SHA-1.
- Dengan menggunakan prompt perintah.
Windows :
keytool -exportcert -list -v \ -alias androiddebugkey -keystore %USERPROFILE%\.android\debug.keystore
Mac/Linux :
keytool -exportcert -list -v \ -alias androiddebugkey -keystore ~/.android/debug.keystore
- Buka proyek Android.
- Buka tab Gradle dari panel sisi kanan.
- Klik dua kali pada 'signingReport'.
- Kita akan menemukan kunci APLIKASI SHA-1 kami di "Konsol Gradle".
6. Tempelkan kunci SHA-1 yang dihasilkan ke layanan Login Google dan klik "AKTIFKAN LOGIN GOOGLE" dan "Buat file sertifikasi".
7. Sekarang unduh file 'google-services.json' untuk mengintegrasikannya ke dalam aplikasi Android.
Contoh Integrasikan Login Google di aplikasi Android
Dalam contoh ini, kita akan mengintegrasikan Google Sign-In di aplikasi Android. Setelah pengguna berhasil login melalui Google Sign-In, kita akan mengarahkan ke aktivitas berikutnya (ProfileActivity) dan mengambil detail pengguna.Kita perlu menempelkan file 'google-services.json' yang diunduh di direktori aplikasi proyek Android kita.
Izin yang Diperlukan
Tambahkan izin Internet dalam file AndroidMenifest.xml.
<uses-permission android:name="android.permission.INTERNET" />
Tambahkan dependensi berikut dalam file build.gradle.
File : build.gradle (Project)
dependencies{ classpath 'com.google.gms:google-services:3.1.0' }
File : build.gradle(Module)
dependencies { implementation 'com.google.android.gms:play-services-auth:11.6.0' implementation 'com.github.bumptech.glide:glide:3.7.0' } apply plugin: 'com.google.gms.google-services'
Tambahkan TextView dan Google SignInButton di activity_main.xml.
File : 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="gloginexample.example.com.MainActivity"> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:layout_marginRight="20dp" android:textSize="20dp" android:text="This is main activity, sign in to move next activity." /> <com.google.android.gms.common.SignInButton android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/sign_in_button" android:layout_marginLeft="20dp" android:layout_marginRight="20dp" android:layout_alignParentBottom="true" android:layout_marginBottom="20dp"> </com.google.android.gms.common.SignInButton> </RelativeLayout>
Di kelas MainActivity.java, kita memanggil metode Auth.GoogleSignInApi.getSignInIntent() untuk login melalui Google Sign-In API.
Antarmuka GoogleApiClient.OnConnectionFailedListener Google API menggantikan metode yang tidak terimplementasi, onConnectionFailed(ConnectionResult) yang mengembalikan hasil kegagalan koneksi. Kelas GoogleApiClient digunakan untuk mengelola koneksi antara aplikasi Android dan Google Sign-In API.
File : MainActivity.java
package gloginexample.example.com; import android.content.Intent; import android.support.annotation.NonNull; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; 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.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; public class MainActivity extends AppCompatActivity implements GoogleApiClient.OnConnectionFailedListener { SignInButton signInButton; private GoogleApiClient googleApiClient; TextView textView; private static final int RC_SIGN_IN = 1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestEmail() .build(); googleApiClient=new GoogleApiClient.Builder(this) .enableAutoManage(this,this) .addApi(Auth.GOOGLE_SIGN_IN_API,gso) .build(); signInButton=(SignInButton)findViewById(R.id.sign_in_button); signInButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = Auth.GoogleSignInApi.getSignInIntent(googleApiClient); startActivityForResult(intent,RC_SIGN_IN); } }); } @Override public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(requestCode==RC_SIGN_IN){ GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); handleSignInResult(result); } } private void handleSignInResult(GoogleSignInResult result){ if(result.isSuccess()){ gotoProfile(); }else{ Toast.makeText(getApplicationContext(),"Sign in cancel",Toast.LENGTH_LONG).show(); } } private void gotoProfile(){ Intent intent=new Intent(MainActivity.this,ProfileActivity.class); startActivity(intent); } }
Tambahkan komponen berikut dalam activity_profile.xml.
File : 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="gloginexample.example.com.ProfileActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="vertical"> <ImageView android:layout_width="80dp" android:layout_height="80dp" android:id="@+id/profileImage" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/name" android:text="name" android:textSize="20dp" android:layout_marginTop="20dp"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/email" android:textSize="20dp" android:text="email" android:layout_marginTop="20dp"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/userId" android:textSize="20dp" android:text="id" android:layout_marginTop="20dp"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/logoutBtn" android:text="Logout" android:layout_marginTop="30dp"/> </LinearLayout> </RelativeLayout>
Buat kelas ProfileActivity.java di mana kita akan menampilkan detail pengguna setelah login berhasil.
ProfileActivity.java Di kelas ini, kita akan mengambil detail pengguna jika pengguna berhasil login. Kelas GoogleSignInResult mengimplementasikan antarmuka Result yang mewakili hasil akhir dari penerapan metode API Google Play Services.
Kelas GoogleSignInAccount menyimpan informasi dasar pengguna.
File : ProfileActivity.java
package gloginexample.example.com; import android.content.Intent; import android.support.annotation.NonNull; import android.support.v7.app.AppCompatActivity; 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.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.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; public class ProfileActivity extends AppCompatActivity implements GoogleApiClient.OnConnectionFailedListener { Button logoutBtn; TextView userName,userEmail,userId; ImageView profileImage; private GoogleApiClient googleApiClient; private GoogleSignInOptions gso; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_profile); logoutBtn=(Button)findViewById(R.id.logoutBtn); userName=(TextView)findViewById(R.id.name); userEmail=(TextView)findViewById(R.id.email); userId=(TextView)findViewById(R.id.userId); profileImage=(ImageView)findViewById(R.id.profileImage); gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestEmail() .build(); googleApiClient=new GoogleApiClient.Builder(this) .enableAutoManage(this,this) .addApi(Auth.GOOGLE_SIGN_IN_API,gso) .build(); logoutBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Auth.GoogleSignInApi.signOut(googleApiClient).setResultCallback( new ResultCallback<Status>() { @Override public void onResult(Status status) { if (status.isSuccess()){ gotoMainActivity(); }else{ Toast.makeText(getApplicationContext(),"Session not close",Toast.LENGTH_LONG).show(); } } }); } }); } @Override protected void onStart() { super.onStart(); OptionalPendingResult<GoogleSignInResult> opr= Auth.GoogleSignInApi.silentSignIn(googleApiClient); if(opr.isDone()){ GoogleSignInResult result=opr.get(); handleSignInResult(result); }else{ opr.setResultCallback(new ResultCallback<GoogleSignInResult>() { @Override public void onResult(@NonNull GoogleSignInResult googleSignInResult) { handleSignInResult(googleSignInResult); } }); } } private void handleSignInResult(GoogleSignInResult result){ if(result.isSuccess()){ GoogleSignInAccount account=result.getSignInAccount(); userName.setText(account.getDisplayName()); userEmail.setText(account.getEmail()); userId.setText(account.getId()); try{ Glide.with(this).load(account.getPhotoUrl()).into(profileImage); }catch (NullPointerException e){ Toast.makeText(getApplicationContext(),"image not found",Toast.LENGTH_LONG).show(); } }else{ gotoMainActivity(); } } private void gotoMainActivity(){ Intent intent=new Intent(this,MainActivity.class); startActivity(intent); } @Override public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { } }
Output :
0 Response to "Mengintegrasikan Login Google di Aplikasi Android"
Posting Komentar