确定用户是否为高级用户 - Qonversion API

Determine the user is premium - Qonversion API

提问人:burhanyaprak 提问时间:2/8/2023 更新时间:5/8/2023 访问量:197

问:

通过 Qonversion API,我为用户添加了购买订阅的功能。当用户在购买订阅后返回时,我想检查订阅状态,但我从 checkEntitlements 获得“null”值作为回报。同时,虽然购买功能中购买是正的,但根本不进入onSuccess。如何查看用户的订阅状态?(当我在购买后再次尝试订阅时,谷歌说我已经订阅了,所以订阅过程是成功的。

片段:

class PurchaseFragment : Fragment() {
    private var _binding: FragmentPurchaseBinding? = null
    private val binding get() = _binding!!

    private var product: QProduct? = null

展示产品:

 private fun displayProducts() {
            Qonversion.shared.offerings(object : QonversionOfferingsCallback {
                override fun onSuccess(offerings: QOfferings) {
                    val mainOffering = offerings.main
                    if (mainOffering != null && mainOffering.products.isNotEmpty()) {   
                        binding.monthlyPrice.text = mainOffering.products[0].prettyPrice
                        product = mainOffering.products[0]
                    }
                }
    
                override fun onError(error: QonversionError) {
                    Log.d(TAG, "Error: $error")
                }
            })
        }

购买:

 private fun makePurchase(product: QProduct) {
            Qonversion.shared.purchase(
                requireActivity(),
                product,
                callback = object : QonversionEntitlementsCallback {
                    override fun onSuccess(entitlements: Map<String, QEntitlement>) {
                        val premiumEntitlement = entitlements["premium_permisson"]
                        if (premiumEntitlement != null && premiumEntitlement.isActive) {
                            Log.d(TAG, "Entitlements: $premiumEntitlement")
                        } else {
                            Log.d(TAG, "Entitlements else: $premiumEntitlement")
                        }
                    }
    
                    override fun onError(error: QonversionError) {
                        // Handle error here
                        if (error.code === QonversionErrorCode.CanceledPurchase) {
                            Log.d(TAG, "Canceled")
                        }
                    }
                })
        }

检查用户状态:

private fun isItPremiumUser() {
    Qonversion.shared.checkEntitlements(object : QonversionEntitlementsCallback {
        override fun onSuccess(entitlements: Map<String, QEntitlement>) {
            val premiumEntitlement = entitlements["premium_permisson"]

            Log.d(TAG, "isItPremiumUser $premiumEntitlement") // it returns null
            if (premiumEntitlement != null && premiumEntitlement.isActive) {
                Log.d(TAG, "isItPremiumUser Entitlements: $premiumEntitlement")
                // handle active entitlement here

                // also you can check renew state if needed
                // for example to check if user has canceled subscription and offer him a discount
                when (premiumEntitlement.renewState) {
                    QEntitlementRenewState.NonRenewable -> {
                        Log.d(TAG, "NonRenewable Entitlements: $premiumEntitlement")
                        // NonRenewable is the state of a consumable or non-consumable in-app purchase
                    }
                    QEntitlementRenewState.WillRenew -> {
                        Log.d(TAG, "WillRenew Entitlements: $premiumEntitlement")
                        // WillRenew is the state of an auto-renewable subscription
                    }
                    QEntitlementRenewState.BillingIssue -> {
                        Log.d(TAG, "BillingIssue Entitlements: $premiumEntitlement")
                        // Prompt the user to update the payment method.
                    }
                    QEntitlementRenewState.Canceled -> {
                        Log.d(TAG, "Canceled Entitlements: $premiumEntitlement")
                        // The user has turned off auto-renewal for the subscription, but the subscription has not expired yet.
                        // Prompt the user to resubscribe with a special offer.
                    }
                    else -> {
                        Log.d(TAG, "else Entitlements: $premiumEntitlement")
                    }
                }
            }
        }

        override fun onError(error: QonversionError) {
            // handle error here
           Log.d(TAG, "onError: $error")
        }
    })
}
Android Kotlin In-app-Purchase-In-app-Billing 订阅

评论


答:

1赞 Kamo Spertsian 5/8/2023 #1

如果未在通话中调用,请检查方法。在 Qonversion 端处理您的购买时似乎出了点问题,提供给相应回调的错误信息将解释原因。此外,设备日志会很有帮助 - Qonversion SDK 在处理购买时会记录有用的信息。onSuccesspurchaseonError

如果Google端购买成功,则可能是Qonversion设置中的Qonversion产品中心配置或Google Play配置有问题。

您可以在官方文档中阅读更多相关信息 此处此处.如果您遇到任何其他问题,请考虑通过网站小部件联系 Qonversion 支持,以获得更快的帮助。