14

我的应用程序使用以下方法检测 iOS 4 和 5 中的漫游。

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

NSFileManager *fm = [NSFileManager defaultManager]; 
NSError *error = nil; 

NSString *carrierPListPath = [fm destinationOfSymbolicLinkAtPath:carrierPListSymLinkPath error:&error];     

NSString *operatorPListPath = [fm destinationOfSymbolicLinkAtPath:operatorPListSymLinkPath error:&error];

return (![operatorPListPath isEqualToString:carrierPListPath]); 

但是这段代码在iOS6上总是返回false(即使我没有漫游,它总是返回false),我认为它可能是Apple更改了plist文件位置,有没有人面临同样的问题,有人可以帮我解决这个问题吗?

谢谢。

4

2 回答 2

6

这是我从苹果那里得到的答案:

“确实。不幸的是,这些文件从未被记录为公共 API,因此从未打算被第三方应用程序使用。在很多情况下,这些限制是由 iOS 沙箱技术上或由 App Review 在管理上强制执行的。然而,这两个过程都不​​是完美的,有时应用程序最终会做他们不应该做的事情。不幸的是,当执行改进时,这会使这些应用程序处于困境,就像在这种情况下发生的那样。

至于直接的解决方法,真的没有。iOS 上唯一的公共电话 API 由 Core Telephony 框架提供。它的 CTTelephonyNetworkInfo 类为您提供有关用户的“家庭”蜂窝服务器的信息,而不是有关他们正在漫游的网络的信息。”

他们建议您使用地理 IP 检查。

于 2012-09-26T14:49:40.333 回答
1

自 iOS6 beta 1 以来,这里面临同样的问题,因为该版本/var/mobile/Library/Preferences/com.apple.operator.plist 符号链接不再可逆。

现在还没有其他公开的设备方式,与此同时,唯一的解决方案是通过 geo-ip 检查 ip,正如 Trausti Thor 所说,或者如果您正在为单个运营商开发应用程序,则检查ip 类。

于 2012-10-03T10:35:14.227 回答