AppStore.sync()未还原购买



在使用旧API进行In-app采购的应用程序上(StoreKit 1)。该应用程序已在应用商店中发布。购买是非消耗品

在尝试迁移到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:我已经在feedback Assistant上提交了一份反馈报告,但到目前为止,他们唯一回复的是:

因为Xcode中的StoreKit测试是一个本地环境,数据与应用程序绑定,所以当您删除应用程序时,您也会删除Xcode环境中该应用程序的所有事务数据。提供的代码片段是API的正确用法。

所以,是的,使用Configuration.storekit文件无法恢复购买,但如果我不能在Sandbox环境中恢复它们,我担心一旦发布,这将不起作用,让我的用户完全无法恢复他们已经购买的东西。

在发布到应用商店并最终在生产中直接试用该应用程序后,我可以确认它是有效的,但我不得不说,无法在沙箱环境上测试这是不理想的。

此外,我觉得文件不够清晰,至少对我来说不够清晰。对于其他人来说,这可能是清楚的,但我本以为购买会自动恢复,并在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 {
// ...
}
}

注意事项

  • 如前所述,这只适用于release mode,在没有StoreKit Testing(即没有Configuration.storekit)的情况下不适用于debug mode
  • 如果您想使用StoreKit Testing(使用Configuration.storekit),恢复购买(使用相同的方法)是可行的,但前提是您不删除应用程序并重新安装。通过删除应用程序,您丢失了StoreKit测试历史记录
  • 正如@loremipsum所提到的,这也可以在TestFlight上进行测试(因为它是发布模式)
  • 已验证iOS和macOS

相关内容

  • 没有找到相关文章

最新更新