Phone Number Hint API 是採用 Google Play 服務的程式庫,能夠以流暢的方式顯示使用者 (SIM 卡) 的電話號碼做為提示。
使用電話號碼提示的好處包括:
- 無需額外權限要求
- 讓使用者不必手動輸入電話號碼
- 不需要 Google 帳戶
- 與登入/註冊工作流程沒有直接關聯
- 與自動填入功能相比,針對 Android 版本提供更多支援
事前準備
如要讓應用程式做好準備,請完成下列各節的步驟。
設定應用程式
將 Phone Number Hint API 的 Google Play 服務依附元件,新增至模組的 Gradle 版本檔案,通常為 app/build.gradle
:
apply plugin: 'com.android.application'
...
dependencies {
implementation 'com.google.android.gms:play-services-auth:21.0.0'
}
運作方式
Phone Number Hint API 會使用 PendingIntent
啟動資料流。啟動 PendingIntent 後,使用者就能透過 UI 顯示,並列出所有 (以 SIM 卡為基礎的) 電話號碼。使用者可以選擇要用的電話號碼或取消流程。所選電話號碼將提供給開發人員,方便開發人員從 Intent
擷取。
建立 GetPhoneNumbeHintIntentRequest 物件
首先,使用提供的 GetPhoneNumberHintIntentRequest.Builder()
方法建立 GetPhoneNumberHintIntentRequest
物件。之後,這個要求物件就能用來取得 Intent
,以啟動電話號碼提示流程。
Kotlin
val request: GetPhoneNumberHintIntentRequest = GetPhoneNumberHintIntentRequest.builder().build()
Java
GetPhoneNumberHintIntentRequest request = GetPhoneNumberHintIntentRequest.builder().build();
要求電話號碼提示
呼叫 SignInClient.getPhoneNumberHintIntent()
並傳遞先前的 GetPhoneNumberHintIntentRequest
物件,擷取 PendingIntent
以啟動電話號碼提示流程。
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
ActivityResultLauncherphoneNumberHintIntentResultLauncher = ... 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); });
擷取電話號碼
將 Intent
傳入 SignInClient.getPhoneNumberFromIntent
以擷取電話號碼。
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
ActivityResultLauncherphoneNumberHintIntentResultLauncher = 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); } } });