使用 In App 购买时有没有办法添加额外数据
Is there a way to add extra data when purchasing using Inapp purchases
这是一个场景,我们的应用程序上有多个老师。用户可以从老师那里购买 3 种不同的物品,价格为 20 美元、30 美元、40 美元。所以我在 google play console 中创建了 3 个产品。用户购买时
一些物品我怎么知道他从哪个老师那里购买了物品?购买商品时我看不到任何设置额外数据的方法。人们通常如何处理这些案件?
这是我用来启动付款屏幕的方法
fun buyAnItem(activity:Activity,skuDetails: SkuDetails) {
val flowParams = BillingFlowParams.newBuilder()
.setSkuDetails(skuDetails)
.build()
val responseCode =
billingClient.launchBillingFlow(activity, flowParams)
log(responseCode.toString())
}
我没有看到在 SkuDetails
或 BillingFlowParams.newBuilder()
中设置额外数据的任何方法
我怎么看到我们可以设置我们可以为 BillingFlowParams.newBuilder()
.setObfuscatedAccountId()
和 .setObfuscatedProfileId()
设置的这两个参数,我应该使用这些吗?对我来说这看起来像是黑客攻击。
我想取回 Purchase 对象中的额外参数
override fun onPurchasesUpdated(
billingResult: BillingResult?,
purchases: MutableList<Purchase>?
) {
for (purchase in purchases) {
consumePurchase(purchase)
}
}
}
似乎使用 setObfuscatedProfileId
和 setObfuscatedAccountId
是正确的方法。为不同的用户设置一些唯一的值。每个 属性 .
最多允许 64 个字符
val flowParams = BillingFlowParams.newBuilder()
.setSkuDetails(skuDetails)
.setObfuscatedProfileId(profileId) //Some data you want to send
.setObfuscatedAccountId(id) //Some data you want to send
.build()
val responseCode =
billingClient?.launchBillingFlow(activity, flowParams)
检索:- 您可以使用 purchase.accountIdentifiers?.obfuscatedAccountId
和 purchase.accountIdentifiers?.obfuscatedProfileId
检索数据
override fun onPurchasesUpdated(
billingResult: BillingResult?,
purchases: MutableList<Purchase>?
) {
if (billingResult?.responseCode == BillingClient.BillingResponseCode.OK && purchases != null) {
for (purchase in purchases) {
CoroutineScope(Dispatchers.Main).launch {
log(purchase.accountIdentifiers?.obfuscatedAccountId)
log(purchase.accountIdentifiers?.obfuscatedProfileId)
consumePurchase(purchase)
}
}
}
}
官方文档:- https://developer.android.com/google/play/billing/developer-payload#attribute
这是一个场景,我们的应用程序上有多个老师。用户可以从老师那里购买 3 种不同的物品,价格为 20 美元、30 美元、40 美元。所以我在 google play console 中创建了 3 个产品。用户购买时 一些物品我怎么知道他从哪个老师那里购买了物品?购买商品时我看不到任何设置额外数据的方法。人们通常如何处理这些案件?
这是我用来启动付款屏幕的方法
fun buyAnItem(activity:Activity,skuDetails: SkuDetails) {
val flowParams = BillingFlowParams.newBuilder()
.setSkuDetails(skuDetails)
.build()
val responseCode =
billingClient.launchBillingFlow(activity, flowParams)
log(responseCode.toString())
}
我没有看到在 SkuDetails
或 BillingFlowParams.newBuilder()
我怎么看到我们可以设置我们可以为 BillingFlowParams.newBuilder()
.setObfuscatedAccountId()
和 .setObfuscatedProfileId()
设置的这两个参数,我应该使用这些吗?对我来说这看起来像是黑客攻击。
我想取回 Purchase 对象中的额外参数
override fun onPurchasesUpdated(
billingResult: BillingResult?,
purchases: MutableList<Purchase>?
) {
for (purchase in purchases) {
consumePurchase(purchase)
}
}
}
似乎使用 setObfuscatedProfileId
和 setObfuscatedAccountId
是正确的方法。为不同的用户设置一些唯一的值。每个 属性 .
val flowParams = BillingFlowParams.newBuilder()
.setSkuDetails(skuDetails)
.setObfuscatedProfileId(profileId) //Some data you want to send
.setObfuscatedAccountId(id) //Some data you want to send
.build()
val responseCode =
billingClient?.launchBillingFlow(activity, flowParams)
检索:- 您可以使用 purchase.accountIdentifiers?.obfuscatedAccountId
和 purchase.accountIdentifiers?.obfuscatedProfileId
override fun onPurchasesUpdated(
billingResult: BillingResult?,
purchases: MutableList<Purchase>?
) {
if (billingResult?.responseCode == BillingClient.BillingResponseCode.OK && purchases != null) {
for (purchase in purchases) {
CoroutineScope(Dispatchers.Main).launch {
log(purchase.accountIdentifiers?.obfuscatedAccountId)
log(purchase.accountIdentifiers?.obfuscatedProfileId)
consumePurchase(purchase)
}
}
}
}
官方文档:- https://developer.android.com/google/play/billing/developer-payload#attribute