简体   繁体   English

未解决的参考:getIntentSender / 尝试在 Jetpack Compose 中获取电话号码时

[英]Unresolved reference: getIntentSender / While trying to obtain phone number in Jetpack Compose

I am trying to obtain phone number(s) in Jetpack compose following Googles Phone Number Hint Docs .我正在尝试按照Googles Phone Number Hint Docs在 Jetpack compose 中获取电话号码。 But I am stuck in a problem where it says: getIntentSender() is unresolved in request: GetPhoneNumberHintIntentRequest .但是我遇到了一个问题,它说: getIntentSender() is unresolved in request: GetPhoneNumberHintIntentRequest

I am also getting another error on addOnFailureListener我在addOnFailureListener上也遇到了另一个错误

Type mismatch.
Required:
 OnFailureListener
Found:
 Int
@Composable
fun PhoneNumberConsent() {
    val context = LocalContext.current

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

    val phoneNumberHintIntentResultLauncher = rememberLauncherForActivityResult(
        contract = ActivityResultContracts.StartActivityForResult(),
    ) {
        try {
            val phoneNumber =
                Identity.getSignInClient(context)
                    .getPhoneNumberFromIntent(it.data)
        } catch (e: Exception) {
            Log.e(TAG, "Phone Number Hint failed")
        }

    }

    Identity.getSignInClient(context)
        .getPhoneNumberHintIntent(request)
        .addOnSuccessListener(
            try {
                phoneNumberHintIntentResultLauncher.launch(request.getIntentSender())
            } catch (e: Exception) {
                Log.e(TAG, "Launching the PendingIntent failed")
            } as OnSuccessListener<in PendingIntent>
        )
        .addOnFailureListener(
            Log.e(TAG, "Phone Number Hint failed")
        )
}

addOnSuccessListener accepts a listener, which can be passed as trailing closure. addOnSuccessListener接受一个监听器,它可以作为尾随闭包传递。

Result passed to this listener is a pending intent which has intentSender property, and it can be used to create IntentSenderRequest .传递给此侦听器的结果是具有intentSender属性的待处理意图,可用于创建IntentSenderRequest

Here's a working example:这是一个工作示例:

val context = LocalContext.current

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

val phoneNumberHintIntentResultLauncher = rememberLauncherForActivityResult(
    contract = ActivityResultContracts.StartIntentSenderForResult(),
) {
    try {
        val phoneNumber = Identity.getSignInClient(context)
                .getPhoneNumberFromIntent(it.data)
        println("phoneNumber $phoneNumber")
    } catch (e: Exception) {
        println("Phone Number Hint failed")
        e.printStackTrace()
    }

}

Button(onClick = {
    Identity.getSignInClient(context)
        .getPhoneNumberHintIntent(request)
        .addOnSuccessListener { pendingIntent ->
            try {
                phoneNumberHintIntentResultLauncher.launch(
                    IntentSenderRequest.Builder(
                        pendingIntent.intentSender
                    ).build()
                )
            } catch (e: Exception) {
                println("Launching the PendingIntent failed")
                e.printStackTrace()
            }
        }
        .addOnFailureListener {
            println("addOnFailureListener $it")
        }
}) {

}

If you need to run it immediately after the view appears, use LaunchedEffect instead of Button.onClick .如果您需要在视图出现后立即运行它,请使用LaunchedEffect而不是Button.onClick Your current approach contradicts one of the basic rules of Compose, which is that composable functions must be free of side-effects.您当前的方法与 Compose 的基本规则之一相矛盾,即可组合函数必须没有副作用。 Read more in thinking in compose 在 compose中阅读更多内容

According to this docs there is no getIntentSender() method in GetPhoneNumberHintIntentRequest class.根据此文档GetPhoneNumberHintIntentRequest类中没有getIntentSender()方法。 Maybe there is a typo in the tutorial you are following, try to use result instead of request :也许您正在遵循的教程中有错字,请尝试使用result而不是request

Identity.getSignInClient(context)
    .getPhoneNumberHintIntent(request)
    .addOnSuccessListener { result ->
        try {
            phoneNumberHintIntentResultLauncher.launch(result.intentSender.sendIntent)
        } catch (e: Exception) {
            Log.e(TAG, "Launching the PendingIntent failed")
        } as OnSuccessListener<in PendingIntent>
    }
    .addOnFailureListener(
        Log.e(TAG, "Phone Number Hint failed")
    )

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM