获取iPhone物理位置所在国家(不使用CLLocationManager)

3

我正在开发一款用于观看电视节目的应用程序,我们公司拥有提供服务的许可证,但仅限于一个国家内。
因此,要求获取iPhone当前所处的物理位置所在的国家。

我在StackOverflow上寻找答案,找到了一些很好的主题,但它们并不完全符合这种情况的要求:

获取iOS中设备位置(仅限国家) - 在我们的情况下,使用CLLocationManager是不可接受的,因为它需要用户始终保持地理位置服务开启,这会耗尽手机电池,并且我们需要请求用户的适当权限。

从iPhone设备中查找当前国家 - 在我们的情况下,使用NSLocale是不可接受的,因为它只提供用户选择其手机设置的信息,这可能与iPhone当前所在的物理位置所在的国家不同。

iOS如何查找用户电话号码的国家代码? - 我们尝试使用CTCarrier,并将SIM卡发送到国外进行测试:CTCarrier返回的是发射SIM卡的国家代码,而不是iPhone当前所处的物理位置所在的国家代码。

iPhone中的漫游状态 - 我找到的唯一可行的解决方案是检测漫游状态,但它使用了未记录的系统文件,因此我担心如果使用这种方法,应用可能会被App Store拒绝:

static NSString *carrierPListSymLinkPath = @"/var/mobile/Library/Preferences/com.apple.carrier.plist";
static NSString *operatorPListSymLinkPath = @"/var/mobile/Library/Preferences/com.apple.operator.plist";

- (BOOL)isRoaming
{
    NSFileManager *fm = [NSFileManager defaultManager];
    NSError *error;
    NSString *carrierPListPath = [fm destinationOfSymbolicLinkAtPath:carrierPListSymLinkPath error:&error];
    NSString *operatorPListPath = [fm destinationOfSymbolicLinkAtPath:operatorPListSymLinkPath error:&error];

   return (![operatorPListPath isEqualToString:carrierPListPath]);
}

这个问题怎么解决?请帮忙。
非常感谢。

使用CoreTelephony,您将能够获取网络的国家代码 - 请查看此答案:https://dev59.com/64Lba4cB1Zd3GeqPaB0z - mag_zbc
1
@mag_zbc 这种方法在大多数情况下应该是可行的,但仍然存在一些缺陷,因为如果用户在国外旅行,他们仍然会使用自己家乡国家的SIM卡,但他们的位置将与其电话号码的国家代码不同。 - Dávid Pásztor
1
如果他在不同的国家,漫游会更改网络为该国家的网络。 - hariszaman
这种方法可以获取您所连接的网络的ID,而不是您的SIM卡。 - mag_zbc
1
@mag_zbc 我们尝试了这种方式并测试了发送SIM卡到国外:CTCarrier返回的是发出SIM卡的国家代码,而不是iPhone当前所在地的国家代码。无论如何,非常感谢! - Andrew Vovk
1个回答

1
你可以通过IP地址获取当前所在国家。 更多信息可以在这里获得。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接