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/