Firebase Functions в swift ничего не возвращает, если нет интернета - PullRequest
0 голосов
/ 16 октября 2018

Существует функция, которая запускается после авторизации AccountKit, она вызывает функцию Firebase для проверки токена на Facebook и возвращает userId, если все подтверждено, и регистрирует пользователя, если он еще не зарегистрирован.

Работает нормально, когда Интернет доступен, но в автономном режиме - функция Firebase не возвращает и не выдает никаких ошибок или, по крайней мере, нулевых результатов, и я хотел бы, чтобы она возвращала ошибку, такую ​​как Нет подключения к Интернету или НИЧЕГО, что может быть перехвачено.

Копание сети и APIReference не дали результатов.Действительно ли вызов функции firebase ничего не возвращает в таких случаях (в автономном режиме)?

func checkUserCredentials(phoneNumber: String, FBId: String, Token: String) {

functions.httpsCallable("checkUserCredentials").call(["phone":"\(phoneNumber)", "FBId":"\(FBId)", "Token":"\(Token)"])
{   (result, error) in

    if let error = error as NSError?
    {
        if error.domain == FunctionsErrorDomain
        {
            let code = FunctionsErrorCode(rawValue: error.code)
            let message = error.localizedDescription
        }
    }

    if let userDoc = (result?.data as? [String: Any])?["userID"] as? String
    {
        DispatchQueue.main.async(execute: { self.performSegue(withIdentifier: "StartTheApp", sender: self) })
    }
} }

1 Ответ

0 голосов
/ 16 октября 2018

Я рекомендую проверить подключение к сети, прежде чем делать какие-либо запросы к сети.Таким образом, вы не зависите от капризов той библиотеки, которую используете для общения с сетью.

Я использую Достижимость , чтобы проверить сетевое соединение перед выполнением каких-либо запросов (которыеЗатем я выполняю с использованием Alamofire).Ниже приведен пример функции для проверки сети:

import Reachability
...
func networkIsReachable(shouldShowAlert: Bool) -> Bool {

    if let reachability: Reachability = Reachability(), reachability.connection != .none {
        return true
    }

    if shouldShowAlert {
        let alertController = UIAlertController(title: "Error", message: "No internet connection.", preferredStyle: .alert)
        alertController.addAction(UIAlertAction(title: "Ok", style: .default, handler: nil))
        present(alertController, animated: true, completion: nil)
    }
    return false
}

Поскольку я использую эту функцию во всей своей кодовой базе, я даже переместил ее в расширение, чтобы не нарушать принцип DRY .

Обновление вашего кода для использования этой функции будет выглядеть так:

func checkUserCredentials(phoneNumber: String, FBId: String, Token: String) {

    guard let networkIsReachable(shouldShowAlert: true) else {
        // network is not reachable, and user has been shown an error message 
        return
    }

    // now perform network request
    // ...
}
...