2.2.2
的iOS
await RNIap.buyProduct(MIXED_PACK);
应该不会失败
即使使用沙箱用户,我也会收到错误Cannot connect to iTunes Store
真实设备,iPad和iPhone 7
只需尝试运行这段代码即可。 我已经在这里完整阅读了博客以创建沙箱环境https://medium.com/@dooboolab/react -native-in-app-purchase-121622d26b67
我认为这是一个旧的链接。 https://developer.apple.com/system-status/
@ raynor85您还在面对这个问题吗?
@dooboolab我仍然面对这个问题,但是我认为这是一个Apple问题。 我试图与我的个人Apple ID用户(以前曾用于实际购买)一起购买产品,执行RNIap.buyProduct(“my.sku.product”)
之后我能够获得成功的响应。
有趣的是,在购买之前将其弹出的模态写environment: sandbox
,可能是因为我正在运行开发版本,最重要的是我认为我完全不为购买该产品付费。 检查购买历史记录没有与此相关的内容,如果我执行RNIap.getAvailablePurchases()
和RNIap.getPurchaseHistory()
我会得到两个答复。 这是为什么?
@dooboolab您可以帮我吗? 为什么有真实的Apple ID我可以成功购买易耗品而无需付费,但是RNIap.getPurchaseHistory()
始终是一个空数组?
@ raynor85您是否将交易结果连接到服务器?
@dooboolab我尝试将RNIap.buyProduct(sku)
和RNIap.buyProductWithoutFinishTransaction(sku)
与RNIap.finishTransaction()
,对于这两者,我都使用了RNIap.validateReceiptIos(receiptBody, true);
和const receiptBody = {'receipt-data': purchase.transactionReceipt, password: '[apple-id-password]'};
,但是没运气。 同样值得注意的是,无论我在“ [apple-id-password]”中输入哪个密码, validateReceiptIos
响应始终相同。
这是一个例子:
{ receipt:
{ receipt_type: 'ProductionSandbox',
adam_id: 0,
app_item_id: 0,
bundle_id: 'io.fantastec.swap',
application_version: '8',
download_id: 0,
version_external_identifier: 0,
receipt_creation_date: '2018-10-09 19:16:09 Etc/GMT',
receipt_creation_date_ms: '1539112569000',
receipt_creation_date_pst: '2018-10-09 12:16:09 America/Los_Angeles',
request_date: '2018-10-09 19:16:10 Etc/GMT',
request_date_ms: '1539112570436',
request_date_pst: '2018-10-09 12:16:10 America/Los_Angeles',
original_purchase_date: '2013-08-01 07:00:00 Etc/GMT',
original_purchase_date_ms: '1375340400000',
original_purchase_date_pst: '2013-08-01 00:00:00 America/Los_Angeles',
original_application_version: '1.0',
in_app:
[ { quantity: '1',
product_id: 'basic_pack',
transaction_id: '1000000455003078',
original_transaction_id: '1000000455003078',
purchase_date: '2018-10-09 19:16:09 Etc/GMT',
purchase_date_ms: '1539112569000',
purchase_date_pst: '2018-10-09 12:16:09 America/Los_Angeles',
original_purchase_date: '2018-10-09 19:16:09 Etc/GMT',
original_purchase_date_ms: '1539112569000',
original_purchase_date_pst: '2018-10-09 12:16:09 America/Los_Angeles',
is_trial_period: 'false' } ] },
status: 0,
environment: 'Sandbox' }
您可能已经注意到, receipt_type: 'ProductionSandbox'
,这可能是由于我在沙箱环境中使用了真实的Apple ID用户名(我无法创建一个有效的测试沙箱用户,谢谢苹果所做的)。我们的生活是一个活生生的地狱)。
@ raynor85实际上,我不知道为什么会这样。 我可能必须在不久的将来尝试一下。 另外,您是否尝试通过试飞进行测试? 如果您尚未将应用上传到test flight
我认为可能会发生。 另外,我也同意您的最后报价!
我没有尝试在testFlight上上传该应用程序,因为在可能要上传损坏的beta版本之前,我想先使用一个开发版本。 在这种情况下,codepush可能会派上用场。 无论如何,能否请您解释const receiptBody = {'receipt-data': purchase.transactionReceipt, password: '[apple-id-password]'}
的含义? 我尝试输入任何密码,但仍然得到相同的结果。 password
代表用户的Apple ID密码吗? 如果是这样,我如何在不要求用户插入的情况下获取该信息?
另外, validateReceiptAndroid
需要accessToken
validateReceiptAndroid
呢? 我已经检查了您提到的有关堆栈溢出的惊人文章,但是没有关于如何获取accessToken的明确指南,您是否建议一种无需安装服务器即可获取access_token的简单方法? 医生说,可以直接在设备上进行receiveVerification: https :
另外,请尝试将2.3.5
作为android中的receiveValidation。 参数在Android的transactionReceipt
发送了错误的身份。 我希望您可以对此进行一些练习,并在我们的自述文件中分享您的成功案例。 干杯!
@ raynor85我也无法从@JJMoon这些功能应该在沙盒模式下工作吗?
弄清楚了,我没有调用“ finishTransaction()”,所以我陷入了沙盒测试帐户“购买成功”的循环中,但是在苹果方面并没有完全处理,他们称之为死循环。
这个线程有点偏离轨道,但是当我使用沙箱帐户( Error: Cannot connect to iTunes Store
)在我的设备上通过xcode运行应用程序时,看到了相同的原始错误。 我正在使用2.3.19,我认为这是最新的。
苹果公司针对此错误的说明: https :
我想以我为例,当我已经订阅产品时,尝试订阅该产品时出现此错误。 当我订阅并尝试更改订阅时(通过发起新的RNIAP.buySubscription
请求,它似乎也会出现)。
对于任何陷入困境的人,也请注意“您的应用程序正在模拟器中运行,不支持应用程序内购买。” 是您可能会收到此错误的另一个原因。 必须在真实设备上执行此操作。
我想以我为例,当我已经订阅产品时,尝试订阅该产品时出现此错误。 当我订阅并尝试更改订阅时(通过启动新的RNIAP.buySubscription请求),它似乎也会出现。
那么,在这种情况下您应该怎么做? 我如何知道该产品是否实际由用户购买?..我尝试恢复购买,但似乎没有什么改变
最有用的评论
对于任何陷入困境的人,也请注意“您的应用程序正在模拟器中运行,不支持应用程序内购买。” 是您可能会收到此错误的另一个原因。 必须在真实设备上执行此操作。