将 Braintree dropin UI 集成到 Kotlin Jetpack Compose 中

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

我正在尝试将 android/java dropin UI 代码从这里 https://developer.paypal.com/braintree/docs/guides/drop-in/setup-and-integration#starting-drop-in 转换为Jetpack 撰写应用程序。到目前为止我已经

@Composable
fun Account(user: FinUser) {
    val context = LocalContext.current
    val customerToken = user.userData["customerToken"] as String
    val dropInRequest = DropInRequest()
        .clientToken(customerToken)
    val dropInHintLauncher = rememberLauncherForActivityResult(
        contract = ActivityResultContracts.StartIntentSenderForResult()
    ) {
        print("pause here")
    }
    val dropInIntent = dropInRequest.getIntent(context)
    val dropInPendingIntent = PendingIntent.getBroadcast(
        context, 200, dropInIntent,
        PendingIntent.FLAG_UPDATE_CURRENT
    )
    Column(){
        Column(
            Modifier
                .padding(top = 0.dp)
                .clickable { launchDropInUi(
                    dropInHintLauncher=dropInHintLauncher,
                    dropInPendingIntent=dropInPendingIntent) }) {
            Divider(color = Color.LightGray, thickness = 1.dp)
            Row(
                modifier = Modifier
                    .fillMaxWidth()
                    .padding(20.dp, 10.dp)
            ) {
                Column() {
                    Text("Payment", color = Color.Gray)
                    Text("*********9999", color = Color.Black)
                }
                Spacer(modifier = Modifier.fillMaxWidth())
            }
            Divider(color = Color.LightGray, thickness = 1.dp)
        }
    }
}

fun launchDropInUi(dropInHintLauncher: ManagedActivityResultLauncher<IntentSenderRequest, ActivityResult>, dropInPendingIntent: PendingIntent){
    dropInHintLauncher.launch(
        IntentSenderRequest.Builder(dropInPendingIntent).build()
    )
}

当我单击我的行时,没有 dropin UI 弹出窗口,但它确实注册了单击并运行了 launchDropInUi 函数。

kotlin braintree android-jetpack-compose
2个回答
0
投票

我发现了问题。我需要使用

    val dropInHintLauncher = rememberLauncherForActivityResult(
        contract = ActivityResultContracts.StartActivityForResult()
    )

给予

@Composable
fun Account(user: FinUser) {
    val context = LocalContext.current
    val customerToken = user.userData["customerToken"] as String
    val dropInRequest = DropInRequest()
        .clientToken(customerToken)
    val dropInHintLauncher = rememberLauncherForActivityResult(
        contract = ActivityResultContracts.StartActivityForResult()
    ){ result: ActivityResult ->
        if (result.resultCode == Activity.RESULT_OK) {
            //  you will get result here in result.data
            val data: DropInResult? = result.data?.getParcelableExtra(DropInResult.EXTRA_DROP_IN_RESULT)
        }else{
            print("throw error popup")
        }
    }
    val dropInIntent = dropInRequest.getIntent(context)
    Column(){
        Column(
            Modifier
                .padding(top = 0.dp)
                .clickable { launchDropInUi(
                    dropInHintLauncher =dropInHintLauncher,
                    dropInIntent =dropInIntent) }) {
            Divider(color = Color.LightGray, thickness = 1.dp)
            Row(
                modifier = Modifier
                    .fillMaxWidth()
                    .padding(20.dp, 10.dp)
            ) {
                Column() {
                    Text("Payment", color = Color.Gray)
                    Text("*********9999", color = Color.Black)
                }
                Spacer(modifier = Modifier.fillMaxWidth())
            }
            Divider(color = Color.LightGray, thickness = 1.dp)
        }
    }
}
fun launchDropInUi(dropInHintLauncher: ManagedActivityResultLauncher<Intent, ActivityResult>, dropInIntent: Intent){
    dropInHintLauncher.launch(dropInIntent)
}

0
投票

我发现了这个错误并修复了它,

我已经改变了 并仍然访问撰写,就像这样。

class MainActivity : FragmentActivity(), DropInListener {
val clientToken: String = "sandbox_8hych3nm_cmbsqrt3wy6rfrvx"
var dropInClient: DropInClient? = null
var dropInRequest: DropInRequest? = null
var REQUEST_CODE = 6969
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContent {
        Payment_integrationTheme {
            // A surface container using the 'background' color from the theme
            Surface(
                modifier = Modifier.fillMaxSize(),
                color = MaterialTheme.colorScheme.background
            ) {
                BraintreeButton()
            }
        }
    }
    dropInRequest = DropInRequest()
    dropInClient = DropInClient(this@MainActivity, clientToken)
    dropInClient!!.setListener(this)
}

override fun onDropInSuccess(dropInResult: DropInResult) {
    Toast.makeText(this, "Payment Success", Toast.LENGTH_SHORT).show()
}

override fun onDropInFailure(error: Exception) {
    Toast.makeText(this, "Payment Failed", Toast.LENGTH_SHORT).show()
}

@Composable
fun BraintreeButton() {
    Column(
        verticalArrangement = Arrangement.Center,
        horizontalAlignment = Alignment.CenterHorizontally
    ) {
        Button(onClick = {
            dropInClient!!.launchDropIn(dropInRequest)
        }) {
            Text(text = "Buy Now")
        }
    }
}

}

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