我想从应用的收据中阅读原始应用程序版本。
在开发过程中,应用程序不包含收据,因为它未从商店安装。我需要启动SKReceiptRefreshRequest
才能获得沙盒收据。但这会提示用户登录。
所以这就是问题:如果应用程序是从生产中的商店下载的,是否保证包含收据?因为如果不是,我需要启动刷新请求,这会提示用户输入凭据。如果没有上下文,我不想这样做。
如果没有,这个案例的最佳做法是什么?将SKReceiptRefreshRequest
合并到“恢复购买”例程中?
PS:该应用仅适用于iOS 9 +。
答案 0 :(得分:7)
修改强>
iOS应用收据何时无法使用?这是一个缺少应用收据的场景。如果用户在计算机(非iOS设备)上从iTunes购买应用程序,然后将该应用程序同步到其设备,则不会有应用程序收据。
从约48:30开始查看this WWDC 2014 video
第二次修改
缺少应用收据的另一种情况是用户恢复到新设备。应用程序收据是特定于设备的,需要为新设备重新获取。
原始答案
我正在将应用从付费切换为免费增值,因此我还需要原始应用版本。我不知道你的答案“它是否保证存在”的问题,但这就是我决定如何处理的问题。
在启动时,我会查找以前保留的原始应用程序版本。如果那还不存在(这可能是第一次启动),我会检查网络。如果没关系,我会检查应用收据。如果它在那里我将它发送到应用程序商店进行验证,如果成功,从响应中获取原始应用程序版本并保留它。在随后的启动中,持久值是有的,所以我不再进行收据验证。如果启动时没有应用收据,我不会要求收据刷新。我同意你的观点,目前没有任何背景。
我猜这可以在网络可以访问的所有情况下工作,但我会在IAP点进行另一次检查。像这样......
┌────────────┐
│ Tap Add │
└────────────┘
│
┌───────────────────────────────────────────────────────┤
│ │
│ ▼
│ ┌────────────────────┐ ┌──────────────────────┐
│ ┌──Don't Know─────────────────│ Pre-IAP customer? │───Yes─────────▶│ Create new thing │
│ │ └────────────────────┘ └──────────────────────┘
│ │ │
│ │ │ ┌──────────────────────┐
│ │ └──────No─────────────────▶│ IAP │
│ │ └──────────────────────┘
│ │
│ ▼ ┌────────────────────────────────────────┐
│ ┌──────────────────────┐ │Maybe: Allow one grace thing. Warn that │
│ │ Network Reachable? │────No──────▶│ the user must connect to the internet │
│ └──────────────────────┘ │ before adding another thing. │
│ │ └────────────────────────────────────────┘
│ Yes
│ │
│ ▼ ┌────────────────────────────────────────────────────┐
│ ┌──────────────────────┐ │ Maybe, depending on your requirements: Alert the │
│ │ Receipt Present? │────No──────▶│user that the app receipt is not present and the app│
│ └──────────────────────┘ │ store may ask for their credentials. │
│ │ └────────────────────────────────────────────────────┘
│ Yes │
│ │ ┌─────────────┘
│ ▼ ▼
│ ┌──────────────────────┐ ┌────────────────────────┐
│ │ Valid? │◀────────────│ Refresh the receipt. │
│ └──────────────────────┘ └────────────────────────┘
│ │
│ └─Yes───┐
│ ▼
│ ┌───────────────────────────────────────┐
└──│ Persist original_application_version │
└───────────────────────────────────────┘