ios - 可达性和国际漫游

标签 ios cocoa-touch protocol-buffers mapkit pbrequester

我正在使用 Apple 的 Reachability 类来确定数据或 wifi 是否可用。但是,一位用户(使用美国 iPhone)正在另一个国家/地区测试该应用程序,他在尝试访问 MapKit 时看到以下错误。

控制台

在我对此错误的研究中,我发现PBRequesterProtocolBuffer

2012-10-15 21:16:00.921 WrightsCS App[24239:907] PBRequester failed with Error Error Domain=kCFErrorDomainCFNetwork Code=-1018 "International roaming is currently off." UserInfo=0x1e5587d0 {NSErrorFailingURLKey=https://gsp13-cn.ls.apple.com/shift, NSErrorFailingURLStringKey=https://gsp13-cn.ls.apple.com/shift, NSLocalizedDescription=International roaming is currently off.}

示例

-(BOOL)hasDataConnection
{
    Reachability *networkReachability = [Reachability reachabilityForInternetConnection];
    NetworkStatus networkStatus = [networkReachability currentReachabilityStatus];

    if ( networkStatus == NotReachable )
    {
        return NO;
    }
    else
    {
        if ( ! [Reachability reachabilityWithHostName:@"www.google.com"] )
            return NO;

        return YES;
    }
}

问题

我们如何检测用户是否正在漫游,或者至少确保用户在偶然漫游时不会遇到此错误?

最佳答案

好的 - 这不是答案,但可能会为您指明正确的方向。首先,我找不到似乎可以让您执行此操作的 Objective C 类(例如 NSURLRequest 类)。

我认为您需要直接进入 CFNetwork Framework (CFNetwork Framework Reference)因为查看 CFNetworkError 代码有这些诱人的条目(与您的错误消息匹配):

kCFURLErrorNotConnectedToInternet  = -1009,
kCFURLErrorInternationalRoamingOff = -1018,
kCFURLErrorDataNotAllowed          = -1020,

不幸的是,我不了解 CFNetwork 框架,尽管查看了 Apple 文档,但我并不知道哪个 CFNetwork 框架 API 使用这些值。但我相信总会有办法的。

我的两个“想法”(我宽松地使用这个词):

  1. 使用CFHost(并获取回调来查询错误代码)
  2. 使用CFNetDiagnosticCopyNetworkStatusPassively(并解析返回的字符串)。

如果有专家的话,我很想看到真正的答案。

关于ios - 可达性和国际漫游,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12925812/

相关文章:

iphone - 如何使用OpenAL从iOS上的声音时间线中导出声音

ios - bool _WebTryThreadLock(bool) 崩溃

objective-c - 在 viewDidUnload() 中设置为 nil

iphone - 适用于 iPad 的网格状控件

c++ - 使用 Protocol Buffers 更快反序列化的建议

protocol-buffers - 有没有办法用proto3实现扩展?

c++ - C++ 中的 protobuf 与 google::protobuf::Message 的动态绑定(bind)

iphone - MKMapView 自定义 UserLocation Annotation

ios - 如何为文字游戏编写可拖动的图 block ?

cocoa-touch - 计算iOS中给定时间点之前的时间