【问题标题】:AppStore.sync() not restoring purchasesAppStore.sync() 不恢复购买
【发布时间】:2021-12-14 12:10:55
【问题描述】:

在使用旧 API 进行应用内购买 (StoreKit 1) 的应用上。该应用程序已在 App Store 上发布。购买是非消耗品

在尝试迁移到 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 文件,在沙盒环境中在真实设备上不使用它。

有人可以使用 StoreKit 2 恢复购买吗?

PD:我已经提交了一份关于反馈助手的反馈报告,但到目前为止他们唯一回复的是:

因为 Xcode 中的 StoreKit 测试是一个本地环境,并且数据与应用程序相关联,所以当您删除应用程序时,您也会删除该应用程序在 Xcode 环境中的所有事务数据。提供的代码 sn-ps 是 API 的正确用法。

所以是的,使用 Configuration.storekit 文件将无法恢复购买,但如果我无法在沙盒环境中恢复它们,恐怕这将无法使用一次发布,让我的用户完全无法恢复他们已经购买的东西。

【问题讨论】:

  • 这个应用是iOS还是macOS?你已经标记了两者。
  • 我现在正在开发一个应用程序 currentEntitlements 在 iOS 上运行,并进行了试飞。我无法让它在 watchOS 上运行,但没有记录在 watchOS 上的测试,如果我再次完成购买过程,它会恢复,但这不是一个好的用户体验。我没试过 macOS。
  • @DávidPásztor 它是 iOS 和 macOS。
  • @loremipsum 对我来说,再次尝试购买会恢复以前的购买,但我同意你的看法,这是不可取的。将尝试使用 TestFlight,感谢您的指点。

标签: ios swift macos in-app-purchase storekit


【解决方案1】:

在发布到 App Store 并最终在生产中直接试用该应用后,我可以确认它可以工作,但我不得不说它并不理想无法在沙盒环境上对此进行测试。

我也觉得文档不够清晰,至少对我来说不是。 其他人可能很清楚,但我希望购买会自动恢复并在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 测试(即没有Configuration.storekit)的情况下不适用于debug mode
  • 如果您想使用 StoreKit 测试(使用 Configuration.storekit)恢复购买(使用相同的方法),但前提是您不删除应用程序并重新安装。删除应用会丢失 StoreKit 测试历史记录。
  • 正如@loremipsum 所述,这也可以在 TestFlight 上进行测试(因为它是发布模式)。
  • 已验证 iOS 和 macOS。

【讨论】:

  • 我正在尝试同样的事情,但被困在恢复购买上。你能做到吗,请告诉我谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多