首先,我真的很讨厌强制更新的应用程序。持续唠叨也很糟糕——在一个应用程序中,每次启动它都会唠叨三遍(我认为他们在更新中修复了这个错误)。
如果购买的是非消耗品...
您正在做一些 IAP 并不真正支持的事情:目前没有类似的方法可以购买一张“专辑”,该专辑也将个别曲目标记为已拥有,因此它们不会被无意中重新购买。
也就是说,
- 如果在 1.0 中购买组合不应该在 1.1 中给您鱼+马,那么您需要新产品或消耗品。
- 如果在 1.0 版本中购买了 cat+dog+bird 组合的用户在 1.1 版本中得到了 cat+dog+bird+fish+horse,那应该没问题。如果用户更新应用程序,它将自行修复。
我假设后者:用户正在购买“所有动物”,这会在新版本的应用程序中自动提供新动物。
(你可以提醒用户更新——只是不要太烦人!)。
在这种情况下我不会太担心——我的直觉是,手机太旧而无法更新的用户不太可能购买应用程序,更不用说 IAP,而故意避免更新的用户也可能不会购买 IAP。
此处提醒可能有用(“顺便说一句,这也解锁了 1.1 版中的鱼+马”)——只要确保你没有阻塞 UI。
如果购买的是消耗品...
有两种可能性。
在用户更新应用程序之前价格会发生变化。用户的帐户获得猫+狗+鸟的信用。
当用户更新应用程序时,您也许可以解决此问题,但似乎没有可靠的方法来判断用户购买了哪个 IAP 版本:您可以尝试SKProduct.{price,priceLocale}
与收据一起存储,但不能保证您从产品中读取的价格与交易中支付的价格相同。那好吧。
根据 iOS In-App Purchase Programming Guide,价格似乎也不在交易收据中
用户在价格变化之前更新应用程序。用户可以以1.0的价格购买1.1的组合!
我认为您无法确保 IAP 价格变化与应用更新可用同步发生;试图强制升级可能只会让一些用户感到沮丧,因为升级尚不可用。唯一安全的选择似乎是第二种,尽管它可能会损失一些收入。
但是,由于用户从根本上购买的是不同的东西,所以它们确实应该是不同的产品。
(在非消耗品的情况下,它们是“相同的东西”,因为你得到的东西并不取决于你购买它的版本。)