【问题标题】:iOS - Knowing app store countryiOS - 了解应用商店国家
【发布时间】:2018-03-19 17:02:00
【问题描述】:

我想在我的应用中(通过代码)知道我的用户在哪个应用商店中(例如英国/法国/西班牙等)。

我已经读到我们可以使用语言环境来做到这一点: https://developer.apple.com/documentation/foundation/nslocale/1643060-countrycode

但我想通过 Apple Store 来实现。出于法律目的,我不想为欧洲人显示与美国人相同的内容。

有人已经这样做了吗?谢谢!

【问题讨论】:

  • @Maximelc 该链接问题的答案都没有真正回答那个(或这个)问题。
  • 如果您的应用碰巧使用了应用内购买,有一个可能的解决方案。
  • AFAIK,您无法获取有关已登录用户的任何信息。在我制作的个人应用程序中,我还为用户 iTunes Store 显示内容。我的解决方案是在首次启动时获取他们当前的语言环境,并保存他们应该使用的商店。我允许用户在应用程序中更改此设置,因为我可能是错的。
  • 在注册时询问用户他们使用哪个商店。

标签: ios swift app-store


【解决方案1】:

从 iOS13 SKStorefront 类属性 countryCode 可用于获取代表与 App Store 店面关联的国家/地区的三字母代码。

对于低于 13 的 iOS 版本,唯一可行的解​​决方案是从 SKProduct 获取 priceLocale

【讨论】:

  • 即使我的应用中没有应用内购买,我也可以使用它吗?
  • 未勾选,但我认为您只需要导入 StoreKit。此类不依赖于任何购买。
  • SKStorefront.countryCode 对我来说始终是美国。我的设备属于瑞典应用商店。沙盒问题还是无法正常工作?
【解决方案2】:

您不能限制特定国家/地区的 IAP(因此您没有所用 Apple Store 的相关信息)。 您可以做的是通过检查国家/地区 ID 来禁用/启用项目。

有不同的检查方法,对我来说最好的方法是检查用户运营商 ID。

例如:

func checkCellularNumber() -> Bool {
    let networkInfo = CTTelephonyNetworkInfo()
    guard let info = networkInfo.subscriberCellularProvider else {return false}
    if let carrier = info.isoCountryCode {
        print("Carrier code = \(carrier)");
        return true
    }
    return false
}

【讨论】:

  • 如果它只是 WiFi 设备,我不相信这会起作用。
【解决方案3】:

如果您使用的是 iOS 13+,这将为您提供商店的 3 个字母的国家/地区代码:

import StoreKit

let country = SKPaymentQueue.default().storefront?.countryCode

更多关于它的使用信息可以在SKStoreFront documentation找到。

更新: 有时,此方法返回 nil,这就是为什么 storefront 是可选的。所以它不是100%可靠的。我与成千上万的用户一起使用,它在 95% 的时间内都在工作。但是我不完全确定在什么情况下它是 nil。

【讨论】:

  • 不起作用。结果始终为零。已使用 iPod touch 第 7 代 14.4 和 iPhone 11 进行测试 :(
  • 我与成千上万的用户一起使用,它在 95% 的时间里都在工作。但你是对的,有时它确实返回 nil。我不知道为什么,也没有调查过为什么。这可能是由于限制或未登录应用商店。不知道。
猜你喜欢
  • 2012-07-25
  • 2019-10-21
  • 2014-09-22
  • 1970-01-01
  • 2013-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多