Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如果用户未登录iTunes,是否可以为SKProducts设置默认priceLocale?_Ios_Objective C_In App Purchase_Locale_App Store Connect - Fatal编程技术网

Ios 如果用户未登录iTunes,是否可以为SKProducts设置默认priceLocale?

Ios 如果用户未登录iTunes,是否可以为SKProducts设置默认priceLocale?,ios,objective-c,in-app-purchase,locale,app-store-connect,Ios,Objective C,In App Purchase,Locale,App Store Connect,如果用户未登录iTunes帐户,SKProducts的默认priceLocale是如何设置的? 是否基于我设置应用内购买产品的iTunes Connect帐户?当用户未登录设备上的iTunes帐户时,是否有任何方法可以更改默认的priceLocale?还是我无法控制 我正在开发一个应用程序,它使用应用程序内购买来根据用户的位置向用户显示不同的产品。我这样做的方式是使用SKProductsRequestDelegate方法获取所有产品的数组,并将其传递给完成处理程序块: - (void)produ

如果用户未登录iTunes帐户,SKProducts的默认
priceLocale
是如何设置的?
是否基于我设置应用内购买产品的iTunes Connect帐户?当用户未登录设备上的iTunes帐户时,是否有任何方法可以更改默认的
priceLocale
?还是我无法控制

我正在开发一个应用程序,它使用应用程序内购买来根据用户的位置向用户显示不同的产品。我这样做的方式是使用
SKProductsRequestDelegate
方法获取所有产品的数组,并将其传递给完成处理程序块:

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
{
    NSArray * skProducts = response.products;
    ...
    _completionHandler(YES, skProducts);
    _completionHandler = nil;
}
完成处理程序接受BOOL(success)和products数组。它遍历数组,并在表视图中仅显示与
priceLocale
匹配的产品:

[[AnnualSubscriptionIAPHelper sharedInstance] requestProductsWithCompletionHandler:^(BOOL success, NSArray *products) {
    if (success)
    {
        NSMutableArray * productsForCountry = [[NSMutableArray alloc] init];
        for (SKProduct * product in products)
        {
            NSLocale * storeLocale = product.priceLocale;
            NSString * storeCountry = (NSString*)CFLocaleGetValue((CFLocaleRef)storeLocale, kCFLocaleCountryCode);

            // Country code for the product is the last 2 characters in the productIdentifier string
            // E.g. annual_subscription_au
            NSString * productCountry = [[product.productIdentifier substringFromIndex:product.productIdentifier.length - 2] uppercaseString];

            if ([productCountry isEqualToString:storeCountry])
                [productsForCountry addObject:product];
        }

        _products = productsForCountry;
        [self.tableView reloadData];
    }
    [self.refreshControl endRefreshing];
}];
当用户登录到iTunes帐户时,此功能可以正常工作。但是,如果用户未登录iTunes,则所有产品的默认
priceLocale
均为AU。客户端要求默认值为US(如果未登录iTunes,或者如果用户的国家/地区不在预定列表中)

我尝试设置设备区域设置(Settings>General>International>Region Format),但这对默认存储区域设置没有影响

模拟器中显示的产品(登录iTunes帐户之前):

尝试使用CN iTunes Connect测试帐户购买年度订阅:

// NSLog output:
// productIdentifier: annual_subscription_cn
// priceLocale (iTunes Connect): CN 
// currentLocale (Device): US
  • 购买失败,出现错误(如预期),并显示警报
  • 点击OK以重新加载产品列表
  • 现在产品的priceLocale是CN,我可以向用户显示正确的产品列表
使用中文(CN)测试账号登录后的输出:

// NSLog output:
// productIdentifier: annual_subscription_cn
// priceLocale (iTunes Connect): CN 
// currentLocale (Device): US
显然,设备区域设置对默认的
priceLocale
没有影响。即使设备区域设置为US,默认的
priceLocale
仍然是AU


我发现唯一与此相关的是一条关于如何设置“家庭定价”的评论,但没有人回应。

尝试更改您的iTunes帐户连接的商店,然后注销(或使用美国帐户登录,然后注销)。它可能是上次登录时保留的。@Wain我想你可能是对的。在设备上进行测试时,似乎保留了上次登录时的国家/地区。虽然在模拟器中测试时,它始终默认为AU,因为您无法登录模拟器中的iTunes帐户(在设置中)。AU是设置的,因为您设置的testaccount可能是AU…应用程序内购买的默认货币是您设置测试帐户的国家货币。