#ios #swift #in-app-purchase
#iOS #swift #покупка в приложении
Вопрос:
Я использую SwiftyStoreKit для обработки IAP в моем приложении. Проблема в том, что цены на продукты IAP всегда будут отображаться в валюте USD следующим образом: $ 9,99. Не имеет значения, в какой стране пользователи тестируют приложение.
Я пытаюсь изменить локаль в симуляторе, как это (в окне редактирования схемы). Использование пользовательского местоположения также не даст мне другую валюту, в то время как Locale.current показывает измененную локаль.
Пытаюсь использовать оба:
- Swiftystorekit’s
product.localizedPrice
-
И непосредственно из объекта 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 в изолированной среде, как только вы инициируете покупку. После этого первого входа в систему приложение будет знать правильный языковой стандарт и, следовательно, сможет отображать соответствующие цены для ваших покупок в приложении. До этого цены всегда будут отображаться в долларах США.