Подписка на покупку в приложении iOS показывает неправильную валюту для локали

#ios #swift #in-app-purchase

#iOS #swift #покупка в приложении

Вопрос:

Я использую SwiftyStoreKit для обработки IAP в моем приложении. Проблема в том, что цены на продукты IAP всегда будут отображаться в валюте USD следующим образом: $ 9,99. Не имеет значения, в какой стране пользователи тестируют приложение.

Я пытаюсь изменить локаль в симуляторе, как это (в окне редактирования схемы). Использование пользовательского местоположения также не даст мне другую валюту, в то время как Locale.current показывает измененную локаль.

Пытаюсь использовать оба:

  1. Swiftystorekit’s product.localizedPrice
  2. И непосредственно из объекта product (который localizedPrice на самом деле является расширением SKProduct)

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

    цена по-прежнему составляет $ 9,99 здесь, в Дании или Японии

Мне не хватает какой-то волшебной настройки локали в свойствах проекта?

  • изолированная среда или производство, не будет иметь значения
  • когда появляется всплывающее окно IAP, валюта указана правильно там, но не в самом приложении
  • используя множество других модулей в проекте, таких как Sentry и Beacon

Комментарии:

1. эй, @Sh_Khan, да, указал на это в моем вопросе

2. Проследите строку кода, в которой определен product.priceLocale.

3. хорошо, закомментирование NumberFormatter.locale = product.priceLocale помогло, но почему? не должен ли product.priceLocale корректно возвращать значение локально для текущей страны?

4. @Sh_Khan, удаление numberFormatter.locale на самом деле работает не так, как ожидалось. Символ валюты изменен, но цена по-прежнему указана в долларах США

Ответ №1:

Цена и языковой стандарт цен определяются ассоциацией магазина учетной записи покупателя, а не языковым стандартом устройства.

т.е. пользователь с учетной записью, привязанной к магазину в США, всегда будет видеть доллары США, поскольку именно так с него будет взиматься плата, независимо от того, где он физически находится в мире или локали своего устройства.

Чтобы проверить интернационализацию цены, вам нужно будет использовать тестер изолированной среды с соответствующей территорией App Store.

Если вы запустите приложение до того, как войдете в систему с помощью тестера песочницы, то по умолчанию вы увидите цену в долларах США. Также обратите внимание, что вы не можете протестировать IAP в симуляторе; Вам нужно использовать реальное устройство.

Ответ №2:

Учетные записи в изолированной среде обрабатывались по-разному начиная с iOS 12. Когда вы запускаете сборку разработки из Xcode, приложение запрашивает поддельный идентификатор AppleID в изолированной среде, как только вы инициируете покупку. После этого первого входа в систему приложение будет знать правильный языковой стандарт и, следовательно, сможет отображать соответствующие цены для ваших покупок в приложении. До этого цены всегда будут отображаться в долларах США.

Источник: https://developer.apple.com/documentation/storekit/in-app_purchase/testing_in-app_purchases_with_sandbox