Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 找不到订阅。应用内购买_Android_Kotlin_Billing_In App - Fatal编程技术网

Android 找不到订阅。应用内购买

Android 找不到订阅。应用内购买,android,kotlin,billing,in-app,Android,Kotlin,Billing,In App,我在项目中实施应用内购买时遇到了一个问题 当我测试我的应用程序时,它总是无法启动订阅。但游戏控制台中有订阅。我有一个真实ID的订阅 这是我的密码: private var billingClient: BillingClient? = null onPurchaseUpdate: override fun onPurchasesUpdated(billingResult: BillingResult, purchases: MutableList<Purchase>?) {

我在项目中实施应用内购买时遇到了一个问题

当我测试我的应用程序时,它总是无法启动订阅。但游戏控制台中有订阅。我有一个真实ID的订阅

这是我的密码:

private var billingClient: BillingClient? = null
onPurchaseUpdate:

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

    if (billingResult.responseCode == BillingClient.BillingResponseCode.OK && purchases != null){

        handlePurchase(purchases[0])
    }
    else if (billingResult.responseCode == BillingClient.BillingResponseCode.ITEM_ALREADY_OWNED){

        val queryAlreadyPurchasesResult = billingClient!!.queryPurchases(SUBS)
        val alreadyPurchases = queryAlreadyPurchasesResult.purchasesList

        if (alreadyPurchases != null){

            handlePurchase(alreadyPurchases[0])
        }
    }
    else if (billingResult.responseCode == BillingClient.BillingResponseCode.USER_CANCELED){

        Toast.makeText(this@MainActivity, "Purchase Canceled!", Toast.LENGTH_SHORT).show()
    }
    else{

        Toast.makeText(this@MainActivity, "Error: ${billingResult.debugMessage}", Toast.LENGTH_SHORT).show()
    }
}
private fun handlePurchase(purchases: Purchase){

   if (purchases.purchaseState == Purchase.PurchaseState.PURCHASED){

        val consumeParams = ConsumeParams.newBuilder()
            .setPurchaseToken(purchases.purchaseToken)
            .build()

       billingClient!!.consumeAsync(consumeParams) { billingResult, outToken ->

           if (billingResult.responseCode == BillingClient.BillingResponseCode.OK){

                Toast.makeText(this@MainActivity, "Purchase Success!", Toast.LENGTH_SHORT).show()
           }
       }
   }
}
private fun subscribe(){

    if (billingClient!!.isReady){

        initiatePurchase()
    }
    else{

        billingClient = BillingClient.newBuilder(this)
            .enablePendingPurchases()
            .setListener(this)
            .build()

        billingClient!!.startConnection(object: BillingClientStateListener{

            override fun onBillingServiceDisconnected() {

                Toast.makeText(this@MainActivity, "Service Disconnected", Toast.LENGTH_SHORT).show()
            }

            override fun onBillingSetupFinished(billingResult: BillingResult) {

                if (billingResult.responseCode == BillingClient.BillingResponseCode.OK){

                    initiatePurchase()
                }
                else{

                    Toast.makeText(this@MainActivity, "Error: ${billingResult.debugMessage}", Toast.LENGTH_SHORT).show()
                }
            }
        })
    }
}
private fun initiatePurchase(){

    val skuList: MutableList<String> = ArrayList()
    skuList.add(Constans.SUBS_ID)

    val params = SkuDetailsParams.newBuilder()
    params.setSkusList(skuList).setType(SUBS)

    val billingResult = billingClient!!.isFeatureSupported(BillingClient.FeatureType.SUBSCRIPTIONS)
    if (billingResult.responseCode == BillingClient.BillingResponseCode.OK){

        billingClient!!.querySkuDetailsAsync(params.build(), object: SkuDetailsResponseListener{

            override fun onSkuDetailsResponse(billingResult: BillingResult, skuDetailsList: MutableList<SkuDetails>?) {

                if (billingResult.responseCode == BillingClient.BillingResponseCode.OK){

                    if (skuDetailsList != null && skuDetailsList.isNotEmpty()){

                        val flowParams = BillingFlowParams.newBuilder()
                            .setSkuDetails(skuDetailsList[0])
                            .build()

                        billingClient!!.launchBillingFlow(this@MainActivity, flowParams)
                    }
                    else{

                        Toast.makeText(this@MainActivity, "Item not Found!", Toast.LENGTH_SHORT).show()
                    }
                }
                else{

                    Toast.makeText(this@MainActivity, "Error: ${billingResult.debugMessage}", Toast.LENGTH_SHORT).show()
                }
            }
        })
    }
    else{

        Toast.makeText(this@MainActivity, "Sorry Subscription not Supported. Please Update Play Store", Toast.LENGTH_SHORT).show()
    }
}
订阅乐趣:

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

    if (billingResult.responseCode == BillingClient.BillingResponseCode.OK && purchases != null){

        handlePurchase(purchases[0])
    }
    else if (billingResult.responseCode == BillingClient.BillingResponseCode.ITEM_ALREADY_OWNED){

        val queryAlreadyPurchasesResult = billingClient!!.queryPurchases(SUBS)
        val alreadyPurchases = queryAlreadyPurchasesResult.purchasesList

        if (alreadyPurchases != null){

            handlePurchase(alreadyPurchases[0])
        }
    }
    else if (billingResult.responseCode == BillingClient.BillingResponseCode.USER_CANCELED){

        Toast.makeText(this@MainActivity, "Purchase Canceled!", Toast.LENGTH_SHORT).show()
    }
    else{

        Toast.makeText(this@MainActivity, "Error: ${billingResult.debugMessage}", Toast.LENGTH_SHORT).show()
    }
}
private fun handlePurchase(purchases: Purchase){

   if (purchases.purchaseState == Purchase.PurchaseState.PURCHASED){

        val consumeParams = ConsumeParams.newBuilder()
            .setPurchaseToken(purchases.purchaseToken)
            .build()

       billingClient!!.consumeAsync(consumeParams) { billingResult, outToken ->

           if (billingResult.responseCode == BillingClient.BillingResponseCode.OK){

                Toast.makeText(this@MainActivity, "Purchase Success!", Toast.LENGTH_SHORT).show()
           }
       }
   }
}
private fun subscribe(){

    if (billingClient!!.isReady){

        initiatePurchase()
    }
    else{

        billingClient = BillingClient.newBuilder(this)
            .enablePendingPurchases()
            .setListener(this)
            .build()

        billingClient!!.startConnection(object: BillingClientStateListener{

            override fun onBillingServiceDisconnected() {

                Toast.makeText(this@MainActivity, "Service Disconnected", Toast.LENGTH_SHORT).show()
            }

            override fun onBillingSetupFinished(billingResult: BillingResult) {

                if (billingResult.responseCode == BillingClient.BillingResponseCode.OK){

                    initiatePurchase()
                }
                else{

                    Toast.makeText(this@MainActivity, "Error: ${billingResult.debugMessage}", Toast.LENGTH_SHORT).show()
                }
            }
        })
    }
}
private fun initiatePurchase(){

    val skuList: MutableList<String> = ArrayList()
    skuList.add(Constans.SUBS_ID)

    val params = SkuDetailsParams.newBuilder()
    params.setSkusList(skuList).setType(SUBS)

    val billingResult = billingClient!!.isFeatureSupported(BillingClient.FeatureType.SUBSCRIPTIONS)
    if (billingResult.responseCode == BillingClient.BillingResponseCode.OK){

        billingClient!!.querySkuDetailsAsync(params.build(), object: SkuDetailsResponseListener{

            override fun onSkuDetailsResponse(billingResult: BillingResult, skuDetailsList: MutableList<SkuDetails>?) {

                if (billingResult.responseCode == BillingClient.BillingResponseCode.OK){

                    if (skuDetailsList != null && skuDetailsList.isNotEmpty()){

                        val flowParams = BillingFlowParams.newBuilder()
                            .setSkuDetails(skuDetailsList[0])
                            .build()

                        billingClient!!.launchBillingFlow(this@MainActivity, flowParams)
                    }
                    else{

                        Toast.makeText(this@MainActivity, "Item not Found!", Toast.LENGTH_SHORT).show()
                    }
                }
                else{

                    Toast.makeText(this@MainActivity, "Error: ${billingResult.debugMessage}", Toast.LENGTH_SHORT).show()
                }
            }
        })
    }
    else{

        Toast.makeText(this@MainActivity, "Sorry Subscription not Supported. Please Update Play Store", Toast.LENGTH_SHORT).show()
    }
}
启动采购乐趣:

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

    if (billingResult.responseCode == BillingClient.BillingResponseCode.OK && purchases != null){

        handlePurchase(purchases[0])
    }
    else if (billingResult.responseCode == BillingClient.BillingResponseCode.ITEM_ALREADY_OWNED){

        val queryAlreadyPurchasesResult = billingClient!!.queryPurchases(SUBS)
        val alreadyPurchases = queryAlreadyPurchasesResult.purchasesList

        if (alreadyPurchases != null){

            handlePurchase(alreadyPurchases[0])
        }
    }
    else if (billingResult.responseCode == BillingClient.BillingResponseCode.USER_CANCELED){

        Toast.makeText(this@MainActivity, "Purchase Canceled!", Toast.LENGTH_SHORT).show()
    }
    else{

        Toast.makeText(this@MainActivity, "Error: ${billingResult.debugMessage}", Toast.LENGTH_SHORT).show()
    }
}
private fun handlePurchase(purchases: Purchase){

   if (purchases.purchaseState == Purchase.PurchaseState.PURCHASED){

        val consumeParams = ConsumeParams.newBuilder()
            .setPurchaseToken(purchases.purchaseToken)
            .build()

       billingClient!!.consumeAsync(consumeParams) { billingResult, outToken ->

           if (billingResult.responseCode == BillingClient.BillingResponseCode.OK){

                Toast.makeText(this@MainActivity, "Purchase Success!", Toast.LENGTH_SHORT).show()
           }
       }
   }
}
private fun subscribe(){

    if (billingClient!!.isReady){

        initiatePurchase()
    }
    else{

        billingClient = BillingClient.newBuilder(this)
            .enablePendingPurchases()
            .setListener(this)
            .build()

        billingClient!!.startConnection(object: BillingClientStateListener{

            override fun onBillingServiceDisconnected() {

                Toast.makeText(this@MainActivity, "Service Disconnected", Toast.LENGTH_SHORT).show()
            }

            override fun onBillingSetupFinished(billingResult: BillingResult) {

                if (billingResult.responseCode == BillingClient.BillingResponseCode.OK){

                    initiatePurchase()
                }
                else{

                    Toast.makeText(this@MainActivity, "Error: ${billingResult.debugMessage}", Toast.LENGTH_SHORT).show()
                }
            }
        })
    }
}
private fun initiatePurchase(){

    val skuList: MutableList<String> = ArrayList()
    skuList.add(Constans.SUBS_ID)

    val params = SkuDetailsParams.newBuilder()
    params.setSkusList(skuList).setType(SUBS)

    val billingResult = billingClient!!.isFeatureSupported(BillingClient.FeatureType.SUBSCRIPTIONS)
    if (billingResult.responseCode == BillingClient.BillingResponseCode.OK){

        billingClient!!.querySkuDetailsAsync(params.build(), object: SkuDetailsResponseListener{

            override fun onSkuDetailsResponse(billingResult: BillingResult, skuDetailsList: MutableList<SkuDetails>?) {

                if (billingResult.responseCode == BillingClient.BillingResponseCode.OK){

                    if (skuDetailsList != null && skuDetailsList.isNotEmpty()){

                        val flowParams = BillingFlowParams.newBuilder()
                            .setSkuDetails(skuDetailsList[0])
                            .build()

                        billingClient!!.launchBillingFlow(this@MainActivity, flowParams)
                    }
                    else{

                        Toast.makeText(this@MainActivity, "Item not Found!", Toast.LENGTH_SHORT).show()
                    }
                }
                else{

                    Toast.makeText(this@MainActivity, "Error: ${billingResult.debugMessage}", Toast.LENGTH_SHORT).show()
                }
            }
        })
    }
    else{

        Toast.makeText(this@MainActivity, "Sorry Subscription not Supported. Please Update Play Store", Toast.LENGTH_SHORT).show()
    }
}
private fun initiatePurchase(){
val skuList:MutableList=ArrayList()
skuList.add(Constans.SUBS_ID)
val params=skutailsparams.newBuilder()
参数设置列表(skuList).setType(SUB)
val billingResult=billingClient!!.isFeatureSupported(billingClient.FeatureType.SUBSCRIPTIONS)
if(billingResult.responseCode==BillingClient.BillingResponseCode.OK){
billingClient!!.querySkuDetailsAsync(params.build(),对象:SkuDetailsResponseListener{
覆盖fun onSkuDetailsResponse(billingResult:billingResult,skuDetailsList:MutableList?){
if(billingResult.responseCode==BillingClient.BillingResponseCode.OK){
if(skuDetailsList!=null&&skuDetailsList.isNotEmpty()){
val flowParams=BillingFlowParams.newBuilder()
.setsku详细信息(skuDetailsList[0])
.build()
billingClient!!.launchBillingFlow(this@MainActivity,flowParams)
}
否则{
Toast.makeText(this@MainActivity,“找不到项目!”,Toast.LENGTH\u SHORT.show()
}
}
否则{
Toast.makeText(this@MainActivity,“Error:${billingResult.debugMessage}”,Toast.LENGTH_SHORT.show()
}
}
})
}
否则{
Toast.makeText(this@MainActivity,“抱歉,不支持订阅。请更新Play Store”,Toast.LENGTH\u SHORT.show()
}
}
我总是看到消息“未找到项目”

有什么不对劲?提前谢谢