Gợi ý số điện thoại

Phone Number Hint API (một thư viện do Dịch vụ Google Play cung cấp) cung cấp một cách dễ dàng để hiển thị số điện thoại (dựa trên SIM) của người dùng dưới dạng gợi ý.

Sau đây là những lợi ích của việc sử dụng tính năng Gợi ý số điện thoại:

  • Không cần yêu cầu cấp thêm quyền
  • Người dùng không cần phải tự nhập số điện thoại
  • Không cần Tài khoản Google
  • Không liên quan trực tiếp đến quy trình đăng nhập/đăng ký
  • Hỗ trợ nhiều phiên bản Android hơn so với tính năng Tự động điền

Trước khi bắt đầu

Để chuẩn bị cho ứng dụng của bạn, hãy hoàn tất các bước trong những phần sau.

Định cấu hình ứng dụng

Thêm phần phụ thuộc Dịch vụ Google Play dành cho API Gợi ý số điện thoại vào tệp bản dựng Gradle của mô-đun, thường là app/build.gradle:

  apply plugin: 'com.android.application'

  ...

  dependencies {
    implementation 'com.google.android.gms:play-services-auth:21.3.0'
  }

Cách hoạt động

API Gợi ý số điện thoại sử dụng PendingIntent để bắt đầu quy trình. Sau khi PendingIntent được khởi chạy, người dùng sẽ thấy một giao diện người dùng liệt kê tất cả số điện thoại (dựa trên SIM). Sau đó, người dùng có thể chọn một số điện thoại mà họ muốn sử dụng hoặc huỷ quy trình. Sau đó, nhà phát triển sẽ có thể truy xuất số điện thoại đã chọn từ Intent.

Giao diện người dùng và phần Cài đặt của tính năng Gợi ý số điện thoại.
Hình 1. Giao diện người dùng và chế độ cài đặt của tính năng Gợi ý số điện thoại

Tạo đối tượng GetPhoneNumbeHintIntentRequest

Bắt đầu bằng cách tạo đối tượng GetPhoneNumberHintIntentRequest bằng phương thức GetPhoneNumberHintIntentRequest.Builder() được cung cấp. Sau đó, bạn có thể dùng đối tượng yêu cầu này để lấy Intent nhằm bắt đầu quy trình Gợi ý số điện thoại.

KotlinJava
val request: GetPhoneNumberHintIntentRequest = GetPhoneNumberHintIntentRequest.builder().build()
GetPhoneNumberHintIntentRequest request = GetPhoneNumberHintIntentRequest.builder().build();

Yêu cầu gợi ý số điện thoại

Gọi SignInClient.getPhoneNumberHintIntent(), truyền vào đối tượng GetPhoneNumberHintIntentRequest trước đó để truy xuất PendingIntent nhằm bắt đầu luồng Gợi ý số điện thoại.

KotlinJava
val phoneNumberHintIntentResultLauncher = ...

Identity.getSignInClient(activity)
.getPhoneNumberHintIntent(request)
.addOnSuccessListener { result: PendingIntent ->
  try {
    phoneNumberHintIntentResultLauncher.launch(
      IntentSenderRequest.Builder(result).build()
    )
  } catch (e: Exception) {
      Log.e(TAG, "Launching the PendingIntent failed")
  }
}
.addOnFailureListener {
    Log.e(TAG, "Phone Number Hint failed")
}
ActivityResultLauncher phoneNumberHintIntentResultLauncher = ...

Identity.getSignInClient(activity)
  .getPhoneNumberHintIntent(request)
  .addOnSuccessListener( result -> {
      try {
          phoneNumberHintIntentResultLauncher.launch(result.getIntentSender());
      } catch(Exception e) {
          Log.e(TAG, "Launching the PendingIntent failed", e);
      }
  })
  .addOnFailureListener(e -> {
      Log.e(TAG, "Phone Number Hint failed", e);
  });

Truy xuất số điện thoại

Truyền Intent vào SignInClient.getPhoneNumberFromIntent để truy xuất số điện thoại.

KotlinJava
val phoneNumberHintIntentResultLauncher =
registerForActivityResult(ActivityResultContracts.StartIntentSenderForResult()) { result ->
      try {
          val phoneNumber = Identity.getSignInClient(activity).getPhoneNumberFromIntent(result.data)
      } catch(e: Exception) {
          Log.e(TAG, "Phone Number Hint failed")
      }
  }
ActivityResultLauncher phoneNumberHintIntentResultLauncher =
  registerForActivityResult(
      new ActivityResultContracts.StartActivityForResult(),
      new ActivityResultCallback() {
          @Override
          public void onActivityResult(ActivityResult result) {
              try {
                  String phoneNumber = Identity.getSignInClient(activity).getPhoneNumberFromIntent(result.getData());
              } catch {
                  Log.e(TAG, "Phone Number Hint failed", e);
              }
          }
  });