2016-09-19 5 views
0

Во-первых, мне известно об этом сообщении: How to identify iCloud logged in user in airplane mode?Как определить пользователя iCloud, когда телефон находится в режиме полета?

Он, похоже, не имеет ответа. Один ответ говорит об обнаружении подключения к Интернету, а другие говорят о том, что пользователь изменил или не изменился.

Вот мой код:

container.accountStatusWithCompletionHandler{ 
     (status: CKAccountStatus, error: NSError?) in 

     dispatch_async(dispatch_get_main_queue(), { 

      var title: String! 
      var message: String! 

      if error != nil{ 
       title = "Error" 
       message = "An error occurred = \(error)" 
      } else { 
       //title = "No errors occurred getting info" 
       switch status{ 
       case .Available: 
        message = "The user is logged in to iCloud" 
        title = "GOOD" 
        print("determined status was available") 
        self.shouldPullFromICloud() 
        //self.displayAlertWithTitle(title, message: message) 
       case .CouldNotDetermine: 
        message = "Could not determine if the user is logged" + 
        " into iCloud or not" 
        title = "BAD" 
        self.noUserIsSignedIn() 
       case .NoAccount: 
        message = "User is not logged into iCloud" 
        title = "BAD" 
        self.noUserIsSignedIn() 
       case .Restricted: 
        message = "Could not access user's iCloud account information" 
        title = "BAD" 
        self.noUserIsSignedIn() 
       } 
       print(title, message) 
      } 
     }) 
    } 

Кажется довольно глупо, что вам нужно подключение к Интернету, чтобы увидеть, если пользователь подписан в ICloud. Как я могу это исправить?

Спасибо!

P.S. Если это другое сообщение содержит ответ на мой вопрос, можете ли вы выделить его для меня? Я не мог найти его. Ура!

ответ

0

Режим самолета просто отключает возможности сотовой связи и Wi-Fi. В этом случае проверка достижимости должна выполнять те же задачи, что и определение режима полета. Вот стандартный Lib фрагмент кода, который будет проверять достижимости:

func connectedToNetwork() -> Bool { 
    var zeroAddress = sockaddr_in() 
    zeroAddress.sin_len = UInt8(sizeofValue(zeroAddress)) 
    zeroAddress.sin_family = sa_family_t(AF_INET) 

    guard let defaultRouteReachability = withUnsafePointer(&zeroAddress, { 
     SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($0)) 
    }) else { 
     return false 
    } 
    var flags : SCNetworkReachabilityFlags = [] 

    if SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags) == false { 
     return false 
    } 

    let isReachable = flags.contains(.Reachable) 
    let needsConnection = flags.contains(.ConnectionRequired) 
    return (isReachable && !needsConnection) 
} 
+0

Я использую это по другим причинам, но я все еще нужен способ получения пользователя ID независимо от того, если они находятся в режиме самолета или нет я знаю? – lelephant