React-native-iap: iOS:此应用内购买已购买。

创建于 2018-09-12  ·  16评论  ·  资料来源: dooboolab/react-native-iap

版本的react-native-iap

"react-native-iap": "^2.0.3",

您遇到错误的平台(IOS或Android还是两者兼有?)

的iOS

预期行为

进行购买

const购买=等待RNIap.buyProductWithoutFinishTransaction(productId)
const {transactionReceipt,PurchaseToken} =购买
sendToServer(transactionReceipt,{
onSuccess:()=> {
RNIap.finishTransaction()
RNIap.consumeAllItems()
}})

实际行为

对话框:“此应用内购买已被购买”。 仅一种SKU会发生这种情况,其他SKU则工作正常。 我认为该应用程序处于不良状态,我看不到解决它的方法。 我厌倦consumeAllItems在初始化时调用finishTransactionconsumeAllItems ,但这并不能解决。 我可以多次购买其他SKU,没有任何问题。 getPurchaseHistory不返回任何内容。

经过测试的环境(仿真器?真实设备?)

设备(沙盒)

重现行为的步骤

我不知道。

📱 iOS 🙏 help wanted

最有用的评论

我正在调用本地代码。

当我在didFinishLaunchingWithOptions调用它时,currentQueue.transactions为空,但是在applicationDidBecomeActive中调用它却起作用了。

这工作:

- (void)applicationDidBecomeActive:(UIApplication *)application
{
  // take current payment queue
  SKPaymentQueue* currentQueue = [SKPaymentQueue defaultQueue];
  [currentQueue restoreCompletedTransactions];
  // finish ALL transactions in queue
  //  [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
  [currentQueue.transactions enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    [currentQueue finishTransaction:(SKPaymentTransaction *)obj];
  }]; 
}

我不确定如何,但是也许我们可以在库中公开此功能?

所有16条评论

@siderakis是的,很奇怪。 我已经修补了这个问题,如stackoverflow中所述,但仍在某些设备中发生。 我也愿意解决此问题。 您正在使用哪个设备?

@siderakis我想可能会解决您的应用程序处于不良状态的情况。 你可以试试吗?

我试过了,但是没有用。 我还重新安装了该应用程序,但没有帮助。 它在iPad上运行。

我设置了一个断点,看起来currentQueue.transactions为空

从SKPaymentQueue.h

// Array of unfinished SKPaymentTransactions.  Only valid while the queue has observers.  Updated asynchronously.
@property(nonatomic, readonly) NSArray<SKPaymentTransaction *> *transactions NS_AVAILABLE_IOS(3_0);

<strong i="6">@end</strong>

也许我叫得太早

我稍后在程序执行中调用了该代码,它解决了该问题。

@siderakis抱歉打扰。 但是,您调用了什么代码?
transactions数组是属性,而不是方法,这不在我们的代码中。
您是说finishTransaction吗?

我正在调用本地代码。

当我在didFinishLaunchingWithOptions调用它时,currentQueue.transactions为空,但是在applicationDidBecomeActive中调用它却起作用了。

这工作:

- (void)applicationDidBecomeActive:(UIApplication *)application
{
  // take current payment queue
  SKPaymentQueue* currentQueue = [SKPaymentQueue defaultQueue];
  [currentQueue restoreCompletedTransactions];
  // finish ALL transactions in queue
  //  [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
  [currentQueue.transactions enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    [currentQueue finishTransaction:(SKPaymentTransaction *)obj];
  }]; 
}

我不确定如何,但是也许我们可以在库中公开此功能?

@siderakis是的。 这就是我在第259期中的意思。
我认为动作可以在applicationDidBecomeActive之后的任何地方进行。
因此,我将该方法展示给JS端,该用户可以随时调用它。
感谢您的意见。

@JJMoon ,我有同样的问题,什么时候可以期望有一种解决方法,可以像上面提到的那样公开一种方法。 谢谢。

@sivrihuseyin问题现在众所周知。 我们将在本周末进行补丁。 谢谢所有发行人。

我们已经在2.2.0发布了预期的解决方案。 您可以遵循自述文件并尝试以下代码行吗?

陈孝yo你好

感谢您的信息。

我已经安装了2.2.0版并尝试了代码。 不幸的是,
问题尚未解决。 认为函数* clearTransaction *没有
已导出。 在reactNative环境中没有clearTransaction
RNIap内部的功能。

我检查了文件index.d.ts,但找不到该函数
clearTransaction在此。 文件。

亲切的问候,

侯赛因

2018年9月16日,星期日,陈孝章(Hyo Chan Jang)下午2:25 [email protected]
写道:

封闭#257 https://github.com/dooboolab/react-native-iap/issues/257
通过a5f225d
https://github.com/dooboolab/react-native-iap/commit/a5f225d470af0a85417325d24357667e54aa7078


您收到此邮件是因为有人提到您。
直接回复此电子邮件,在GitHub上查看
https://github.com/dooboolab/react-native-iap/issues/257#event-1848183078
或使线程静音
https://github.com/notifications/unsubscribe-auth/AiH7bOp96EzsoX82UVxKHK2LkN7PNWVAks5ubjUogaJpZM4WmG_0

陈孝yo你好

很抱歉提供了错误的信息。 它是固定的。 没有问题
不再。

感谢您的及时答复和出色的解决方案。

亲切的问候,

侯赛因

在2018年9月16日星期日,下午2:56 Huseyin Sivri [email protected]
写道:

陈孝yo你好

感谢您的信息。

我已经安装了2.2.0版并尝试了代码。 不幸的是,
问题尚未解决。 认为函数* clearTransaction *具有
尚未导出。 在reactNative环境中没有clearTransaction
RNIap内部的功能。

我检查了文件index.d.ts,但找不到该函数
clearTransaction在此。 文件。

亲切的问候,

侯赛因

2018年9月16日,星期日,陈孝章(Hyo Chan Jang)下午2:25 [email protected]
写道:

封闭#257 https://github.com/dooboolab/react-native-iap/issues/257
通过a5f225d
https://github.com/dooboolab/react-native-iap/commit/a5f225d470af0a85417325d24357667e54aa7078


您收到此邮件是因为有人提到您。
直接回复此电子邮件,在GitHub上查看
https://github.com/dooboolab/react-native-iap/issues/257#event-1848183078
或使线程静音
https://github.com/notifications/unsubscribe-auth/AiH7bOp96EzsoX82UVxKHK2LkN7PNWVAks5ubjUogaJpZM4WmG_0

通过应用clearTransaction函数,它已在2.2.0版中修复。 谢谢
@JJMoon

对于将来的Google员工从v2升级到v3-5而言,我发现这很有帮助

https://github.com/dooboolab/react-native-iap/blob/de0fc084966fc4d36a9c45f4e27cb166243d4319/README_DEPRECATED.md

此页面是否有帮助?
0 / 5 - 0 等级