React-native-iap: 无法为沙箱用户连接到iTunes Store

创建于 2018-10-02  ·  17评论  ·  资料来源: dooboolab/react-native-iap

版本的react-native-iap

2.2.2

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

的iOS

预期行为

await RNIap.buyProduct(MIXED_PACK);应该不会失败

实际行为

即使使用沙箱用户,我也会收到错误Cannot connect to iTunes Store

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

真实设备,iPad和iPhone 7

重现行为的步骤

只需尝试运行这段代码即可。 我已经在这里完整阅读了博客以创建沙箱环境https://medium.com/@dooboolab/react -native-in-app-purchase-121622d26b67

📱 iOS 🙏 help wanted

最有用的评论

对于任何陷入困境的人,也请注意“您的应用程序正在模拟器中运行,不支持应用程序内购买。” 是您可能会收到此错误的另一个原因。 必须在真实设备上执行此操作。

所有17条评论

我认为这是一个旧的链接。 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 :

@ raynor85

  1. 您可以在ios中检查收据说明密码为“ _仅用于包含自动续订的收据。您应用的共享机密(十六进制字符串)。_”。
  2. 我实际上还没有尝试过。 我已经开发了此功能,供其他意识到这些事情的开发人员轻松贡献。 但是,我认为您可以通过Play控制台获得accessToken 。 您可以按照以下过程进行操作。
    选择您的应用>服务和API>“此应用程序的您的许可证密钥,以将Base64编码的RSA公共密钥包含在您的二进制文件中”。 参考

另外,请尝试将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请求),它似乎也会出现。

那么,在这种情况下您应该怎么做? 我如何知道该产品是否实际由用户购买?..我尝试恢复购买,但似乎没有什么改变

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