【问题标题】:iOS in-app purchase subscription shows incorrect currency for localeiOS 应用内购买订阅显示区域设置的货币不正确
【发布时间】:2020-10-16 09:08:25
【问题描述】:

我正在使用 SwiftyStoreKit 在我的应用程序中处理 IAP。问题是 IAP 产品的价格将始终以美元货币显示,如下所示:9.99 美元。无论人们在哪个国家/地区测试应用。

我正在尝试更改模拟器中的区域设置,例如 this(在方案编辑窗口中)。当 Locale.current 显示更改的区域设置时,使用自定义位置也不会给我另一种货币。

两个都试试:

  1. SwiftyStoreKit 的product.localizedPrice
  2. 直接来自产品对象(localizedPrice 实际上是 SKProduct 的扩展)

    let numberFormatter = NumberFormatter()
    numberFormatter.numberStyle = .currency
    numberFormatter.locale = product.priceLocale
    let price = numberFormatter.string(from: product.price)
    

    丹麦或日本的价格仍然是 9.99 美元

我是否在项目属性中缺少一些神奇的语言环境设置?

  • 沙盒或生产,不会有任何影响
  • 当 IAP 弹出窗口出现时,货币是正确的,但在应用程序本身中不正确
  • 在项目中使用一堆其他 Pod,例如 Sentry 和 Beacon

【问题讨论】:

  • 嘿,@Sh_Khan,是的,在我的问题中指出了这一点
  • 跟踪定义 product.priceLocale 的代码行。
  • 好吧,注释掉 numberFormatter.locale = product.priceLocale 成功了,但为什么呢? product.priceLocale 在当前国家/地区的本地返回值不应该正确吗?
  • @Sh_Khan,删除 numberFormatter.locale 实际上没有按预期工作。货币符号已更改,但价格仍以美元为单位

标签: ios swift in-app-purchase


【解决方案1】:

价格和价格区域由购买账户的商店关联决定,而不是设备区域。

即拥有与美国商店关联的帐户的人将始终看到 $US,因为这就是他们的收费方式,无论他们身在世界何处或设备所在的区域设置如何。

要测试价格的国际化,您需要使用具有适当 App Store 区域的沙盒测试器。

如果您在使用沙盒测试仪登录之前运行该应用程序,则默认情况下您会看到美元价格。另外,请注意,您无法在模拟器中真正测试 IAP;您需要使用真实的设备。

【讨论】:

    【解决方案2】:

    自 iOS 12 以来,沙盒帐户的处理方式有所不同。当您从 Xcode 运行开发版本时,一旦您开始购买,该应用就会提示输入假沙盒 AppleID。首次登录后,该应用程序将知道正确的区域设置,因此可以为您的应用程序内购买显示适当的价格。在此之前,它将始终以美元显示价格。

    来源:https://developer.apple.com/documentation/storekit/in-app_purchase/testing_in-app_purchases_with_sandbox

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-26
      • 1970-01-01
      • 2016-06-06
      • 2014-01-06
      • 1970-01-01
      • 2018-06-01
      • 2016-01-25
      相关资源
      最近更新 更多