为什么我无法让新的电话选择器正常工作?

问题描述 投票:0回答:1

背景

过去,可以使用以下方法获得电话选择器:

implementation "com.google.android.gms:play-services-auth:20.7.0"

代码:

private val requestFillPhoneNumber: ActivityResultLauncher<IntentSenderRequest> =
    registerForActivityResult(
        ActivityResultContracts.StartIntentSenderForResult()) { result: ActivityResult ->
        if (result.resultCode != Activity.RESULT_OK)
            return@registerForActivityResult
        val cred: Credential = result.data?.getParcelableExtraCompat(Credential.EXTRA_KEY)
            ?: return@registerForActivityResult
        val phoneNumber = cred.id
        Log.d("AppLog", "phone:$phoneNumber")
    }

private fun showPhonePickerDialog() {
    val hintRequest = HintRequest.Builder().setPhoneNumberIdentifierSupported(true).build()
    val intent = Credentials.getClient(this).getHintPickerIntent(hintRequest)
    try {
        requestFillPhoneNumber.launch(IntentSenderRequest.Builder(intent.intentSender).build())
    } catch (e: Exception) {
        Log.d("AppLog", "failed to show phone picker using old method:$e")
    }
}

问题

最近出现了一个新版本,删除了这些类,所以我可以使用的是:

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

代码:

private val phoneNumberHintIntentResultLauncher: ActivityResultLauncher<IntentSenderRequest> =
    registerForActivityResult(
        ActivityResultContracts.StartIntentSenderForResult()
    ) { result ->
        try {
            val phoneNumber =
                Identity.getSignInClient(this).getPhoneNumberFromIntent(result.data)
            Log.d("AppLog", "phone:$phoneNumber")
        } catch (e: Exception) {
            Log.d("AppLog", "failed to get phone number from picker:$e")
        }
    }

private fun showNewPhonePickerDialog() {
    val request: GetPhoneNumberHintIntentRequest =
        GetPhoneNumberHintIntentRequest.builder().build()
    Identity.getSignInClient(this)
        .getPhoneNumberHintIntent(request)
        .addOnSuccessListener {
            phoneNumberHintIntentResultLauncher.launch(
                IntentSenderRequest.Builder(it.intentSender).build()
            )
        }
        .addOnFailureListener { e ->
            Log.d("AppLog", "failed to show phone picker using new method:$e")
        }
}

事实是,这是非常不一致的,有时也是错误的:

  1. 在具有 API 34 的模拟器上,它似乎工作正常。
  2. 在运行 Android 14 的 Pixel 6 设备和运行 Android 13 的 Samsung A32 设备上,它会失败并出现异常
    com.google.android.gms.common.api.ApiException: 16: No phone number is found on this device.
    。未显示该对话框。
  3. 在具有 API 33 的 Honor Magic4 pro 上,它返回我的电话号码(多 SIM 卡),但国家/地区前缀不正确(“+1”而不是“+972”)。根据该网站,它甚至无效:

https://libphonenumber.appspot.com/

我尝试过的事情

虽然有这些的替代方案(

subscriptionManager.activeSubscriptionInfoList
subscriptionManager.getPhoneNumber
,以及旧的
telephonyManager.line1Number
),但使用电话权限,这应该是官方方式,让用户选择。

过去我曾尝试报告该问题,但至今仍未解决:

https://issuetracker.google.com/issues/266967506

问题

  1. 我这样做正确吗?
  2. 如果这实际上是正确的方法,我应该在哪里报告这个问题? 3. 为什么有些设备返回给我不正确的电话号码国家前缀。
android google-play-services phone-number
1个回答
0
投票

无法实例化中介适配器类。 您好,我之前看到您反馈过Facebook广告中介适配器问题,请问您这个问题是否已经解决了?打扰一下。我期待您的回复。

© www.soinside.com 2019 - 2024. All rights reserved.