有一个函数在AccountKit授权后触发,它调用Firebase函数在Facebook上验证令牌,如果确认所有内容,则返回userId;如果尚未注册用户,则注册该用户。
它可以在Internet可用但处于脱机状态时正常工作-Firebase函数不会返回或引发任何错误或至少没有结果,并且我希望它返回诸如无互联网连接或任何可能捕获的错误的错误
挖掘Web和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) })
}
} }
答案 0 :(得分:0)
我建议在发出任何网络请求之前检查网络连接。这样一来,您就不必依赖用于与网络进行通信的任何库的可变性。
在执行任何请求之前,我使用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
// ...
}