0.3.10
安卓系统
由于我只是在测试,因此应该能够根据我的需要重新购买物品多次
退货
Error: You already own this item.
at createErrorFromErrorData (59522b9c-ca17-4e00-9e00-05cc989b1199:2016)
at 59522b9c-ca17-4e00-9e00-05cc989b1199:1968
at MessageQueue.__invokeCallback (59522b9c-ca17-4e00-9e00-05cc989b1199:2410)
at 59522b9c-ca17-4e00-9e00-05cc989b1199:2155
at MessageQueue.__guardSafe (59522b9c-ca17-4e00-9e00-05cc989b1199:2323)
at MessageQueue.invokeCallbackAndReturnFlushedQueue (59522b9c-ca17-4e00-9e00-05cc989b1199:2154)
at t (RNDebuggerWorker.js:1)
使用测试帐户多次购买商品
@ilyakar这是消耗品吗? 您应该消耗Item来重新购买它。 请阅读一些有关IAP如何在Android中工作的指南。
@dooboolab ,您好,这不是消耗品。 用户永远拥有它。 有一种方法可以还原产品,因此最好在生产中告知用户,由于他们已经购买了产品,因此无法再次购买该产品。 但是出于测试目的,每次购买所有商品时都必须使用不同的帐户感到非常不舒服。
我认为我在0.2.17中没有这个问题
@ilyakar Ah ..对不起,我很困惑。 实际上,如果它是non-consumable
产品,则实际上无法重新购买。 如果在0.2.17
中可能出现这种情况,那么它必须笨拙地工作。.只有可消费的产品才能重新购买它。 在两个平台(ios和android)上都是相同的。 如果用户想要恢复该项目,则必须选择执行该操作,但是如LINK所示,它不会再次向用户收费。 因此,如果您正在设计要通过重新购买向用户收费的应用内商品,我认为您应该创建consumable
产品。
@ilyakar我从我的朋友开发人员那里得到了反馈,他也面临着同样的问题。 因此,我想出了使用refreshItems
方法的解决方案,该方法仅在android
。 您可以在[email protected]
。 在prepare
方法之后尝试使用它。 我的朋友面临此问题,因为他找不到要消费的购买产品的令牌。 因此,如果您不关心依赖playstore
的购买历史,则此method
只是为了您的方便。 当您自己的后端收集购买历史记录时,这将帮助您解决问题。 我必须进一步看待这一难题。 另外,遵循readme
也可以为您提供帮助。 感谢您的报告!
附言:我认为上述方法也适用于non-consumable
产品。 此外,本文还将帮助您了解refeshItems
将解决您的问题。
我认为此问题已经解决,因为我认为IAP无法与测试帐户配合使用
@dooboolab的refreshItems
解决方案是必经之路
一个菜鸟问题
我们可以购买产品而不花费$ 0❓吗?
是@ deadcoder0904 ,这就是Android测试帐户的整个概念(https://developer.android.com/google/play/billing/billing_testing.html)。 哪种插件可以正常工作,但是正如我所指出的,您不能两次进行相同的购买。
@ilyakar您是说它仍然无法正常工作。 购买产品后,您是否尝试致电refreshItems
? 作为描述在这里,它可能会导致在Play商店中的一些延迟。 但是,您可以强制消费该产品以重新购买。 我也很好奇为什么这行得通..还请注意,如果您依赖Google Play历史记录上的购买并将其不收集在您的后端中。
嗨@dooboolab ,我只是用我以前的知识来回复@ deadcoder0904 。 恐怕我还没有尝试过您的解决方案,而且可能不是一段时间,因为这不是紧急解决方案。 但是以后我会告诉你的。
@ilyakar请谨慎使用refreshItems
因为它将消耗用户购买的所有产品。 仅当您不关心存储在playstore中的那些信息时才可以使用它,因为您拥有赢取的服务器。 另外,这种问题的发生方式就像我在13天前从这里发布的一样,如果用户退还了该商品,则用户可能无法在24小时内再次购买同一商品。
我遇到了与@ilyakar相同的问题,并且使用下面的代码,我可以清除非消耗性的购买并再次进行测试。
async componentDidMount() {
const { itemSkus } = this.props;
try {
const result = await RNIap.initConnection()
console.log('initiated connection?', result)
const consumed = await RNIap.consumeAllItems();
console.log('consumed all items?', consumed)
let products = await RNIap.getProducts(itemSkus);
console.log('loaded products', products)
} catch (err) {
console.warn(err);
}
};
@TylerNoblett此解决方案目前无法使用。
consumeAllItemsAndroid
而不是consumeAllItems
。控制台输出为:
setUpDeveloperTools.js:73 TypeError: _reactNativeIap.default.consumeAllItems is not a function
at loadPurchases$ (NewGameScreen.js:167)
at tryCatch (runtime.js:45)
at Generator.invoke [as _invoke] (runtime.js:271)
at Generator.prototype.<computed> [as next] (runtime.js:97)
at tryCatch (runtime.js:45)
at invoke (runtime.js:135)
at runtime.js:145
at tryCallOne (core.js:37)
at core.js:123
at JSTimers.js:289
在:
"react": "16.9.0",
"react-native": "0.61.3",
"react-native-iap": "^4.3.0",
@tulpn看起来您没有正确安装我们的模块,因为consumeAllItemsAndroid
应该可以正常工作。
@hyochan不是为我工作。
@ roots-ai您正在使用什么版本? 另外,请同时参考我们在example
提供的代码。
最有用的评论
我遇到了与@ilyakar相同的问题,并且使用下面的代码,我可以清除非消耗性的购买并再次进行测试。