我希望能够确定用户从我的应用程序内部连接到哪个商店,以便我可以将他们引导到他们的设备和商店的一些适当内容。有谁知道如何获取这些信息?
基本上,如果用户在英国并连接到英国商店,我希望我的函数/方法返回 GB,如果在韩国,我希望 KR、Australia = AU 等。任何帮助将不胜感激。
我希望能够确定用户从我的应用程序内部连接到哪个商店,以便我可以将他们引导到他们的设备和商店的一些适当内容。有谁知道如何获取这些信息?
基本上,如果用户在英国并连接到英国商店,我希望我的函数/方法返回 GB,如果在韩国,我希望 KR、Australia = AU 等。任何帮助将不胜感激。
获取用户区域设置的国家代码的方法将起作用……但前提是用户的 iTunes 商店与其区域设置相同。情况并非总是如此。
如果您创建应用内购买项目,您可以使用 Apple 的 StoreKit API 来找出用户的实际 iTunes 国家/地区,即使它与他们的设备区域设置不同。这是一些对我有用的代码:
- (void) requestProductData
{
SKProductsRequest *request= [[SKProductsRequest alloc] initWithProductIdentifiers:
[NSSet setWithObject: PRODUCT_ID]];
request.delegate = self;
[request start];
}
- (void) productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
{
NSArray *myProducts = response.products;
for (SKProduct* product in myProducts) {
NSLocale* storeLocale = product.priceLocale;
storeCountry = (NSString*)CFLocaleGetValue((CFLocaleRef)storeLocale, kCFLocaleCountryCode);
NSLog(@"Store Country = %@", storeCountry);
}
[request release];
// If product request didn't work, fallback to user's device locale
if (storeCountry == nil) {
CFLocaleRef userLocaleRef = CFLocaleCopyCurrent();
storeCountry = (NSString*)CFLocaleGetValue(userLocaleRef, kCFLocaleCountryCode);
}
// Now we're ready to start creating URLs for the itunes store
[super start];
}
从 iOS 13.0 开始,Apple 引入了SKStorefront API。
它允许您检查用户连接到的当前 AppStore 国家/地区。
SKStorefront:包含 Apple App Store 店面的位置和唯一标识符的对象。
概述
您通过 App Store Connect 创建的应用内产品可在每个拥有 App Store 的地区销售。您可以使用店面信息来确定客户所在的地区,并提供适合该地区的应用内商品。您必须维护自己的产品标识符列表以及要在其中提供它们的店面。
话题
- countryCode:代表与 App Store 店面关联的国家/地区的三字母代码。
- identifier:由 Apple 定义的唯一标识 App Store 店面的值。
https://developer.apple.com/documentation/storekit/skstorefront
到目前为止,您可以使用 2 种方法,各有优缺点:
店面
->SDK >= 13
->代表与 App Store 店面关联的国家/地区的三字母代码
if let storeFront = SKPaymentQueue.default().storefront{
print("StoreFront CountryCode = ", storeFront.countryCode)
}
else {
print("StoreFront NOT Available")
}
或者
SKCloudServiceController
-> 从 iOS 9.3 开始可用。
-> 需要许可。在 tvOS 上它可能会变得混乱,因为我找不到更改设置中的权限的方法......
-> 许可文本相当混乱。
let skCloudServiceController = SKCloudServiceController()
SKCloudServiceController.requestAuthorization { (status) in
guard status == .authorized else {
return
}
skCloudServiceController.requestStorefrontCountryCode(completionHandler: { (countryCode, error) in
if let error = error {
print("Failure: ", error)
}
else if let countryCode = countryCode {
print("Country code: ", countryCode)
}
})
}
不要忘记将其包含在您的 .plist 文件中:
<key>NSAppleMusicUsageDescription</key>
<string>Store information</string>
获得此功能的一个困难方法是为每个应用商店国家/地区设置一个应用程序。每个应用程序都拥有自己的国家/地区商店信息。这假设用户坚持一家商店,这对大多数人来说应该是正确的。
我建议你试试 iTunes深层链接。例如, http: //itunes.com/apps/appname应该将用户带到她花钱的本地 App Store。
我需要相同的功能。目前我正在考虑使用来自 NSLocale 的数据作为默认读取,但在 settings.app 中添加一个设置,以便用户在不匹配时对其进行自定义。
此功能取自对我的另一个问题的回答。
- (NSString *)getUserCountry
{
NSLocale *locale = [NSLocale currentLocale];
return [locale objectForKey: NSLocaleCountryCode];
}
你可能应该使用
[[userDefaults dictionaryRepresentation] objectForKey:@"NSLocaleCode"];
这将返回一个语言代码,如 en_US 或 en_UK 或 en_AU 甚至 zh_CN、zh_MY、jp_JP 等。
解析您支持的正确代码并相应地引导它们。