swift - 如果没有互联网,swift 中的 Firebase Functions 不会返回任何内容

标签 swift firebase google-cloud-functions

AccountKit授权后有一个函数,它调用Firebase Function来验证Facebook上的token,如果一切正常就返回一个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) })
    }
} }

最佳答案

我建议在发出任何网络请求之前检查网络连接。这样一来,您就不会依赖于您用来与网络对话的任何库的变幻莫测。

我使用 Reachability在执行任何请求之前检查网络连接(然后我使用 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 principle .

更新您的代码以使用此函数如下所示:

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
    // ...
}

关于swift - 如果没有互联网,swift 中的 Firebase Functions 不会返回任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52840233/

相关文章:

ios - 将字符串数组转换为 JSON 或 2D 数组 SWIFT

ios - Firebase 查询快照为零?

node.js - Firebase 函数(用 NodeJS 编写)在从实时数据库中删除对象时从云存储中删除文件

typescript - 如何在 js 文件上导入 ts 文件

python - 使用 Cloud Functions 将 excel 文件从 FTP 提取到 BigQuery

Swift 可选方法参数,但至少需要填充一个

iOS 后台广告信标

ios - Swift countElements() 在计数标志 emoji 时返回不正确的值

javascript - 如果没有注册用户独有的内容,使用 "Sign in with Google"等是否有益?

firebase - 对于事务中的多次写入,Firestore 服务器时间戳是否相同?