Android 应用内购买(购买时不显示面板)

Android 应用内购买(购买时不显示面板),android,kotlin,in-app-purchase,android-billing,Android,Kotlin,In App Purchase,Android Billing,当您申请developer.android网站中描述的应用内购买时,这是解释链接 一切都很完美,我可以得到产品的价格、说明和地址 问题是“购买”对话框没有出现 我用的是真手机 这是应用内购买代码 class AppBilling : AppCompatActivity(), PurchasesUpdatedListener { private lateinit var billingClient: BillingClient private val skuList = ArrayList<

当您申请developer.android网站中描述的应用内购买时,这是解释链接

一切都很完美,我可以得到产品的价格、说明和地址 问题是“购买”对话框没有出现 我用的是真手机

这是应用内购买代码

class AppBilling : AppCompatActivity(), PurchasesUpdatedListener {
private lateinit var billingClient: BillingClient
private val skuList = ArrayList<String>()

override fun onPurchasesUpdated(billingResult: BillingResult?, purchases: List<Purchase>?) {

    Log.i("TAG", "$billingResult :::: $purchases")

    if (billingResult != null) {
        if (billingResult.responseCode == BillingClient.BillingResponseCode.OK && purchases != null) {
            for (purchase in purchases) {
                Log.i("TAG", "$purchase if")
                handlePurchase(purchase)
            }
        } else if (billingResult.responseCode == BillingClient.BillingResponseCode.USER_CANCELED) {
            Log.i("TAG", "else if")
        } else {
            Log.i("TAG", "else")
        }
    }
}
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_app_billing)
    billingClient = BillingClient.newBuilder(this@AppBilling).setListener(this).enablePendingPurchases().build()

    val params = SkuDetailsParams.newBuilder()
    skuList.add("rm_admob")
    params.setSkusList(skuList).setType(BillingClient.SkuType.INAPP)

    billingClient.startConnection(object : BillingClientStateListener {
        override fun onBillingSetupFinished(billingResult: BillingResult?) {
            billingClient.querySkuDetailsAsync(params.build()) { billingResult, skuDetailsList ->
                if (billingResult.responseCode == BillingClient.BillingResponseCode.OK && skuDetailsList != null) {
                    for (skuDetails in skuDetailsList) {
                        val sku = skuDetails.sku
                        val price = skuDetails.originalPrice
                        val title = skuDetails.title
                        val desc = skuDetails.description
                        val flowParams = BillingFlowParams.newBuilder().setSkuDetails(skuDetails).build()
                        if ("rm_admob" == sku) {
                            id_price.text = price
                            id_title.text = title
                            id_desc.text = desc

                            id_rm_admob.setOnClickListener {
                                val responseCode = billingClient.launchBillingFlow(this@AppBilling, flowParams)
                            }

                        }
                    }
                }
            }
        }

        override fun onBillingServiceDisconnected() {

        }

    })
}

private fun handlePurchase(purchase: Purchase) {
    if (purchase.sku == "rm_admob") {
        Log.i("TAG", "handlePurchase()")
    }
}
}
class AppBilling:AppCompatActivity(),PurchasesUpdatedListener{
私有lateinit var billingClient:billingClient
private val skuList=ArrayList()
覆盖已过期的采购(billingResult:billingResult?,采购:列表?){
Log.i(“标记”,“$billingResult::$purchases”)
如果(billingResult!=null){
if(billingResult.responseCode==BillingClient.BillingResponseCode.OK&&purchases!=null){
用于(采购中的采购){
Log.i(“标签”,“如果购买$if”)
手工采购(采购)
}
}else if(billingResult.responseCode==BillingClient.BillingResponseCode.USER\u已取消){
Log.i(“标记”、“如果其他”)
}否则{
Log.i(“标记”、“其他”)
}
}
}
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity\u app\u计费)
billingClient=billingClient.newBuilder(this@AppBilling).setListener(this).enablePendingPurchases().build()
val params=skutailsparams.newBuilder()
skuList.add(“rm_admob”)
参数setSkusList(skuList).setType(BillingClient.SkuType.INAPP)
billingClient.startConnection(对象:BillingClientStateListener{
覆盖已完成的BillingSetupFinished(billingResult:billingResult?){
billingClient.querySkuDetailsAsync(params.build()){billingResult,skuDetailsList->
if(billingResult.responseCode==BillingClient.BillingResponseCode.OK&&skuDetailsList!=null){
用于(skuDetailsList中的skuDetails){
val sku=skuDetails.sku
val价格=skuDetails.originalPrice
val title=skuDetails.title
val desc=skuDetails.description
val flowParams=BillingFlowParams.newBuilder().setSkuDetails(skuDetails).build()
如果(“rm_admob”==sku){
id\u price.text=价格
id\u title.text=标题
id_desc.text=desc
id\u rm\u admob.setOnClickListener{
val responseCode=billingClient.launchBillingFlow(this@AppBilling,flowParams)
}
}
}
}
}
}
覆盖onBillingServiceDisconnected(){
}
})
}
私人娱乐手购(购买:购买){
如果(purchase.sku==“rm_admob”){
Log.i(“TAG”,“handlePurchase()”)
}
}
}

谢谢

请将您的电子邮件id用作谷歌应用程序控制台中的测试仪。

请确认测试仪电子邮件与电话电子邮件相同?。我能看看你把电子邮件放在游戏控制台的什么地方吗?谢谢,这是一张帐户的图片是的,很好,但请在游戏控制台上添加“管理测试仪”选项中的电子邮件,请记住,请使用release apk,1小时后弹出窗口将显示。什么是id\u rm\u admob?点击了吗?