0

我正在编写我的第一个带有 Facebook 集成的 iOS 应用程序,并试图优雅地处理一些边缘情况。现在我正在考虑无法访问互联网,或者特别是无法访问 Facebook 的情况。

在我看来,“美味”教程处理这个问题相当糟糕。当出现没有互联网访问的登录屏幕时,用户可以选择单击登录按钮,然后在 Safari 中无法访问的页面上放弃他们。我更愿意用一条解释问题的消息来提醒用户。

所以我的问题是,在没有任何人登录的情况下“ping”Facebook 服务以最好地确保后续登录请求成功的最佳方式是什么?

谢谢!

4

2 回答 2

0

正如@Harald 所建议的,您可以使用 Apple 的 Reachability 示例:https ://developer.apple.com/library/ios/samplecode/Reachability/Introduction/Intro.html

只需将 Reachability.h 和 Reachability.m 导入您的项目。

如果您只想一次性检查您是否已连接到互联网,请考虑这一点。

+(BOOL)isConnectionToInternet
{
    Reachability* internetReachability = [Reachability reachabilityForInternetConnection];
    NetworkStatus netStatus = [internetReachability currentReachabilityStatus];
    switch (netStatus) {
        case NotReachable:NSLog(@"NotReachable");
            return NO;
        case ReachableViaWiFi:NSLog(@"ReachableViaWiFi");
            return YES;
        case ReachableViaWWAN:NSLog(@"ReachableViaWWAN");
            return YES;
    }
}

您还可以使用 Reachability 中的 reachabilityWithAddress 方法检查特定的 url,例如 facebook.com。

希望这可以帮助。

于 2013-12-02T22:47:56.093 回答
0

尝试在示例中查找

-(void) sessionStateChanged: (FBSession*) session
                      state: (FBSessionState) state
                      error: (NSError*) error
{
   switch(state)
  {
    case FBSessionStateOpen:
    {
       // Logged
     break;
    }

    case FBSessionStateClosed:
    {
       // Logouted
     break;
    }

    case FBSessionStateFailed:
    {
       // connect failed or some error
       // it seems, this place what you need ?
     break;
    }
  }
}

UPD

或者您可以在此处检查 Safari 错误 (FBRequestConnection.m)

-(void) completeWithResponse: (NSURLResponse*) response
                        data: (NSData*) data
                     orError: (NSError*) error
{
     //Try check this params at each your case
}
于 2013-01-22T11:47:37.070 回答