有什么方法可以确定iPhone是否在漫游?
我正在开发iPhone应用程序,并且真的想确定设备是否在漫游,这样我就可以智能地避免我的用户在家庭网络外花费昂贵的连接。
我正在撰写的应用程序适用于越狱手机,但如果可能的话,我宁愿使用标准SDK。
这是我已经找到的:
1. Apple SDKs:在苹果文档中,我发现了Apple的SCNetworkReachability API中的承诺。 该API提供对诸如您是否在WIFI或手机网络,目前是否建立了网络连接等等的访问。但是,搜索“漫游”或“漫游”的SCNetworkReachability API参考文档都将变为零。 他们的示例代码也是如此。
2.越狱iPhone FS的偏好:首选项 - >一般 - >联网标签是用户可以打开或关闭漫游的地方。 查看plist文件(“/Applications/Preferences/Network.plist”),我能找到以下参考:
PostNotification = "com.apple.commcenter.InternationalRoamingEDGE.changed";
cell = PSSwitchCell;
default = 1;
defaults = "com.apple.commcenter";
key = InternationalRoamingEDGE;
label = "EDGE_ROAMING_TOGGLE";
requiredCapabilities = (
telephony
);
这当然是领先的,因为看起来我可以注册用户已更改InternationalRoaming设置的通知。 不过,我不确定如何将其转化为他们实际上正在漫游的知识。
3.检查SpringBoard的类转储源:我使用类转储抛弃了SpringBoard的类。 我无法找到任何对“漫游”或“漫游”的引用
很明显,我开始通过检查这个:找不到任何相关的东西。
进一步的步骤:有没有人有任何建议吗? 我知道这是可能的。 然而,苹果显然已经让它很难找到。 我非常怀疑这可能没有使用私人框架。 (如CoreTelephony)。 由于这是一款越狱应用程序,因此我可能会通过在SpringBoard中注入代码来屏幕截取运营商名称,但我真的宁愿不去那条路线。 任何建议非常感谢。 谢谢。
有! 它根本没有记录,我非常怀疑这可以在非越狱手机上使用(因为它需要使用不在沙盒中的文件)。 然而,这是如何完成的。
iPhone文件系统保留两个软链接:
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]);
}
符号链接的解决方案并不是唯一的方法,但绝对是最好的。 我刚刚意识到,返回的字符串包含运营商和运营商的MCC和MNC代码! 即使是核心电话框架也无法检索您的iPhone在漫游时所连接的运营商的相关信息。
Logs:
carrier: /System/Library/Carrier Bundles/iPhone/72410/carrier.plist
operator: /System/Library/Carrier Bundles/iPhone/20810/carrier.plist
如您所见,运营商(原始蜂窝提供商)行包含“文件夹”72410内的文件,这意味着MCC 724(巴西)和MNC 10(VIVO)。 操作员(实际上是我的手机现在连接的 - 我正在漫游)位于文件夹20810内,这意味着MCC 208(法国)和MNC 10(SFR)。
顺便说一下,我正在使用iOS 5的iPhone 4。
在非越狱设备上,您可以使用http://ipinfo.io(我自己的服务)等第三方服务根据设备的IP地址找到即使是运营商代码的当前国家,然后您可以将其与该设备的IP地址进行比较CTCarrier详细信息以确定设备是否在漫游。 以下是标准的ipinfo.io API响应:
$ curl ipinfo.io/24.32.148.1
{
"ip": "24.32.148.1",
"hostname": "doc-24-32-148-1.pecos.tx.cebridge.net",
"city": "Pecos",
"region": "Texas",
"country": "US",
"loc": "31.3086,-103.5892",
"org": "AS7018 AT&T Services, Inc.",
"postal": "79772"
}
自定义软件包也包括移动IP的mnc / mcc详细信息。 有关详细信息,请参阅http://ipinfo.io/developers。
链接地址: http://www.djcxy.com/p/58393.html上一篇: Is there any way to determine if the iphone is roaming?
下一篇: Is there any ways to detect the roaming status on iOS 6?