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

API Gợi ý số điện thoại (một thư viện sử dụng Dịch vụ Google Play) mang đến một cách thức suôn sẻ để hiển thị số điện thoại của người dùng (dựa trên SIM) dưới dạng gợi ý.

Lợi ích của việc sử dụng Gợi ý số điện thoại bao gồm:

  • Không cần yêu cầu cấp quyền nào khác
  • Người dùng không cần nhập số điện thoại theo cách thủ công
  • Không cần có 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 hơn cho các phiên bản Android 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.2.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 chạy, người dùng sẽ thấy một giao diện người dùng, trong đó liệt kê tất cả cá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 họ muốn sử dụng hoặc huỷ quy trình. Sau đó, số điện thoại đã chọn sẽ được cung cấp cho nhà phát triển để truy xuất từ Intent.

Cài đặt và giao diện người dùng Gợi ý số điện thoại.
Hình 1. Giao diện người dùng và chế độ cài đặt 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 đó, đối tượng yêu cầu này có thể được dùng để lấy Intent nhằm bắt đầu Luồng gợi ý số điện thoại.

Kotlin

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

Java

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.

Kotlin

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")
}

Java

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.

Kotlin

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")
      }
  }

Java

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