BÀI 37 - XÁC THỰC ĐĂNG NHẬP GOOGLE ACCOUNT TRONG LẬP TRÌNH ANDROID

Link hướng dẫn của Firebase

  • Bước 1: Tạo project Firebase

Sau khi tạo xong, vào Project settings thiết lập các khóa của ứng dụng như hình dưới. Có thể chỉ cần khóa SHA_1 thôi nhưng thôi cho chắc ăn mình nạp cả 2 khóa SHA_1SHA_256

Hai khóa này do Android Studio build ra trong project ứng dụng của bạn. Để lấy nó bạn là như sau:

Bấm vào Gradle ở góc phải màn hình >> Run Configurations >> signingReport

Chờ một chút để ứng dụng build là xong.

Sẽ có trường hợp Run Configurations không xuất hiện trong hộp thoại Gradle. Để giải quyết bạn bấm vào biểu tượng được gạch chân màu vàng bên dưới và search signingreport là được nhé!

  • Bước 2: Download file json

Ở chỗ bước 1 bạn chọn vào biểu tượng download google-services.json

Paste vào Android Studio bằng cách vào Project >> app >> paste

  • Bước 3: Add thư viện vào project

add classpath 'com.google.gms:google-services:4.3.8'

vào dependencies { } như dưới.

Lưu ý là build.gradle (project) nhé!

add

implementation platform('com.google.firebase:firebase-bom:28.1.0')

implementation 'com.google.firebase:firebase-auth'

implementation 'com.google.android.gms:play-services-auth:19.0.0'

vào dependencies { } như dưới.

Lần này là build.gradle (app) nhé!

Mấy cái thư viện thay đổi liên tục nên nếu nó có yêu cầu nâng cấp phiên bản thì nên ok hết nhé!

Thêm id 'com.google.gms.google-services' vào plugins { }

Ngoài ra, đôi khi nó sẽ có lỗi này nọ kiểu "bug mẹ đẻ bug con" ấy. Nếu bạn không gặp lỗi gì khác thì bỏ qua chỗ này. Còn nếu gặp lỗi gì gì đó thì có thể thử cách này:

  • Thêm signingConfigs { }buildFeatures { } như 2 hình dưới:

signingConfigs {

debug {

storeFile file("D:\\Local\\name_key.jks")

storePassword "password"

keyAlias "name_key"

keyPassword "password"

}

} // Các thông tin này key mật khẩu để build file apk cho app á!



buildFeatures{

viewBinding true

}

  • Bước 4: Chuẩn bị này nọ đã xong. Giờ chuyển qua code nhé!

Khai báo các biến sau:

private FirebaseAuth mAuth;

private GoogleSignInClient mGoogleSignInClient;

private final static int RC_SIGN_IN = 123;

Code trong OnCreate()

mAuth = FirebaseAuth.getInstance();

GoogleSignInOptions gso = new GoogleSignInOptions

.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)

.requestIdToken(getString(R.string.default_web_client_id))

.requestEmail()

.build();

mGoogleSignInClient = GoogleSignIn.getClient(this, gso);


button.setOnClickListener(v -> {

Intent signInGoogle = mGoogleSignInClient.getSignInIntent();

startActivityForResult(signInGoogle, RC_SIGN_IN);

});


Chương trình con

@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);

try {

GoogleSignInAccount account = task.getResult(ApiException.class);

assert account != null;

firebaseAuthWithGoogle(account.getIdToken());

} catch (ApiException e) {

Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show();

}

}

}


private void firebaseAuthWithGoogle(String idToken) {

AuthCredential credential = GoogleAuthProvider.getCredential(idToken, null);

mAuth.signInWithCredential(credential)

.addOnCompleteListener(this, task -> {

if (task.isSuccessful()) {

// Sign in success, update UI with the signed-in user's information

FirebaseUser user = mAuth.getCurrentUser();

Intent intent = new Intent(getApplicationContext(), SecondActivity.class);

finish();

startActivity(intent);

} else {

// If sign in fails, display a message to the user.

Toast.makeText(FirstActivity.this, "Account failed", Toast.LENGTH_SHORT).show();

}

});

}

Vậy là xong, bây giờ build app và bấm vào cái ảnh/cái nút hay gì đó... Như mình là "sign in with Google"

Và bạn chuyển qua tab Authentication sẽ thấy Firebase đã cập nhật tài khoản google vừa đăng nhập.

Cách này đơn giản, không phải xác thực OTP, nhanh chóng cho người dùng và bảo mật cho ứng dụng

Bình thường thì sau khi đăng nhập thành công, ứng dụng sẽ lưu tài khoản đăng nhập này ở các lần mở ứng dụng sau. Bạn có thể lợi dụng điều này để bỏ qua bước đăng nhập và chuyển thẳng vào màn hình chính. Giống như lưu đăng nhập trên facebook... đó

Để đăng suất tài khoản này, bạn thêm dòng code sau:


FirebaseAuth.getInstance().signOut();

mGoogleSignInClient.signOut();


nó sẽ nằm trong sự kiện bấm vào nút nhé!

Kiểm tra trạng thái đăng nhập ở các lần mở ứng dụng sau:

GoogleSignInAccount signInAccount = GoogleSignIn.getLastSignedInAccount(this);

if (signInAccount!=null) {

signInAccount.getDisplayName() //Lấy tên của tài khoản

signInAccount.getEmail(); // Lấy địa chỉ email của tài khoản

Glide.with(this).load(signInAccount.getPhotoUrl()).into(imageView); // Lấy hình ảnh của tài khoản

}

Để lấy hình ảnh từ tài khoản Google bạn phải thêm thư viện sau và dependencies { } của Gradle

//Gilde

implementation 'com.github.bumptech.glide:glide:4.12.0'