【问题标题】:iOS in-app-purchase + Today Extension widgetiOS 应用内购买 + Today Extension 小部件
【发布时间】:2015-05-20 13:33:45
【问题描述】:

所以我有一个需要订阅(通过 IAP)的应用,它提供了 Today Widget。在小部件(以及应用程序内)中,我使用 RMStore 检查捆绑包中的应用程序收据以获取有效订阅。它在沙箱中运行良好,包括通过 TestFlight 安装时。但是今天,该应用程序获得了Apple的批准,并且在我测试了实体店版本时,当主应用程序在应用程序收据中看到用户购买时,今日扩展程序并没有读取应用程序收据,因此找不到订阅!

Today Extension 和主应用都使用完全相同的代码来读取应用收据并查找订阅信息。为什么它会在主应用程序中工作而不是扩展程序?这是一个已知的问题?它与 RMStore 而不是 StoreKit 本身有关吗?我有什么聪明的/不同的事情要做吗?

我在想这个问题可能与收据验证有关——例如,沙盒中的捆绑标识符与扩展程序的 App Store 中的包标识符是否不同?

这真的很令人沮丧,因为我实际上无法测试任何潜在的解决方案,除非重新提交到 App Store,然后在它发布后对其进行测试,如果它坏了就将它从商店中拉出来,否则我会有用户为他们实际上没有得到的东西付费。

【问题讨论】:

  • 发布您用于阅读应用收据的代码可能是个好主意。不是每个人都熟悉 RMStore。
  • 如果这里的权利有问题,我不会感到惊讶。 IIRC,应用程序扩展是使用与父级不同的标识符进行代码签名的,并且具有单独的应用程序 ID 等等。您确认分机确实可以读取 SK 收据吗?除此之外,我不确定解决方法是什么,但如果您可以在您的应用程序中验证它,那么这听起来像是问题所在。我真的只看到用户默认使用 Apple 描述的应用程序组作为进行应用程序扩展通信的方式,所以如果 SK 在扩展程序中确实不可用,这真的很糟糕。
  • 我可以找到关于扩展读取应用收据的零文档,但由于它在 TestFlight 部署的二进制文件版本中运行良好(错误地?)认为它很好。

标签: ios in-app-purchase ios8-today-widget today-extension rmstore


【解决方案1】:

所有收据(应用购买和应用内购买)都存储在应用程序包内的文件中。应用程序扩展驻留在嵌套在应用程序包中的包中 - 因此,如果它可以访问外部包中的收据文件,我会感到惊讶(但值得通过调用 appStoreReceiptURL 进行检查)。

因此,有关收据的信息(即收据本身或处理收据的某些结果)需要通过通常的方式从包含应用程序传递到扩展程序,即使用shared containermaybe file coordination

【讨论】:

  • 对为什么它可以在沙盒模式下/通过 TestFlight 工作,而不是 App Store 有什么想法吗?
  • 在 TestFlight 中,所有应用内购买都应该是免费的。 “沙盒模式”是什么意思?您是指通过在开发人员设备上运行应用程序进行的正常测试吗?您是否尝试过使用测试 App Store 帐户? (This objc.io article 有一个很好的概述。)
  • 我的意思是这里引用的“沙盒模式”:developer.apple.com/library/ios/technotes/tn2259/_index.html ...即使用测试用户购买。无论我是通过使用 XCode 直接构建到设备还是通过 TestFlight 部署,这都有效。
  • 所以您正在使用测试 App Store 帐户(谢谢,我刚刚了解到 Apple 将其称为“沙盒环境”)。我不知道为什么它在那里工作。您能否检查是否可以在 Sandbox Env​​ 中调用 appStoreReceiptURL(仅限 iOS 7)并查看是否可以在返回的 URL 中读取文件?
  • 是的,在沙盒环境中,我绝对可以从 Today 扩展中读取 appStoreReceiptURL 及其指向的文件。
猜你喜欢
  • 2011-09-17
  • 2015-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多