在一个应用程序中使用旧的API进行应用程序内采购(StoreKit 1)。应用程序已经在app上发布了。购买的是non-consumable.
在尝试迁移到StoreKit 2时,我无法恢复购买。具体而言,显示和购买产品的效果和预期一样,但当删除和重新安装应用程序,然后试图恢复购买,我不能这样做。
我正在尝试使用新的API来恢复它们,但它似乎不起作用。到目前为止,我已经尝试过:
在应用程序的整个生命周期中,我都在监听事务更新,下面是:
Task.detached {
for await result in Transaction.updates {
if case let .verified(safe) = result {
}
}
}
我有一个按钮调用此方法,但除了提示再次使用Apple ID登录之外,它似乎没有任何效果:
try? await AppStore.sync()
这不返回任何项目
for await result in Transaction.currentEntitlements {
if case let .verified(transaction) = result {
}
}
这不返回任何项目
for await result in Transaction.all {
if case let .verified(transaction) = result {
}
}
正如前面提到的,我在购买该项目并删除该应用程序后尝试此操作。所以我相信它应该能够恢复购买。我试着用模拟器上的Configuration.storekit文件,在一个真正的设备上,在Sandbox环境中不使用它。
有谁能用StoreKit 2恢复购买吗?
PD:我已经向反馈助理提交了一份反馈报告,但到目前为止,他们唯一的答复是:
,因为Xcode中的StoreKit测试是一个本地环境,数据绑定在应用程序上,当您删除应用程序时,您也要删除Xcode环境中该应用程序的所有事务数据。所提供的代码段是正确使用API的。
所以是的,使用Configuration.storekit文件无法恢复购买,但是如果我不能在Sandbox环境中恢复它们,我担心一旦发布,这将无法工作,使我的用户完全无法恢复他们已经购买的东西。
发布于 2021-11-09 09:56:30
在发布到App 并最终在生产中直接试用该应用程序之后,我可以确认它是否有效,但我不得不说,无法在沙箱环境中测试这一点是不理想的。
我还觉得文件不够清楚,至少对我来说不是这样。也许这对其他人来说是显而易见的,但我原以为这些采购会自动恢复并在for await result in Transaction.updates
上得到,但这是行不通的。
所做的工作是检查Transaction.currentEntitlements
,如果权利不存在,则执行sync()
并再次检查。这是对我有用的代码:
try? await AppStore.sync()
for await result in Transaction.currentEntitlements {
if case let .verified(transaction) = result {
// ...
}
}
注意事项
如前所述,这只在
debug mode
上不起作用,也就是说,如果没有debug mode
,您想要使用StoreKit that (使用Configuration.storekit
)来恢复购买工作(使用相同的方法),但前提是您不删除de应用程序并重新安装。如@loremipsum所述,通过删除该应用程序可以释放StoreKit测试历史.。
https://stackoverflow.com/questions/69768519
复制相似问题