编辑
iOS 应用收据何时不可用?这是缺少应用收据的一种情况。如果用户在计算机(非 iOS 设备)上从 iTunes 购买您的应用程序,然后将该应用程序同步到他们的设备,则不会有应用程序收据。
从大约 48:30 开始观看这个 WWDC 2014 视频
第二次编辑
缺少应用收据的另一种情况是用户恢复到新设备时。应用收据是特定于设备的,需要为新设备重新获取。
原始答案
我正在将应用程序从付费切换到免费增值,因此我还需要原始应用程序版本。我不知道你的“它保证在那里”问题的答案,但这是我决定如何处理它。
在启动时,我会寻找以前保留的原始应用程序版本。如果那还不存在(这可能是第一次发布),我会检查网络。如果没问题,我会检查应用收据。如果存在,我将其发送到应用商店进行验证,如果成功,则从响应中获取原始应用程序版本并将其保留。在随后的启动中,存在持久值,因此我不再进行收据验证。如果启动时不存在应用收据,我不会请求刷新收据。我同意你的看法,目前没有上下文。
我猜这在网络可达的所有情况下都有效,但我在 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 │
└───────────────────────────────────────┘