FKFirebaseKit - Firebase iOS SDK 包装器
FKFirebaseKit 是一个开源框架,简化了 Firebase iOS SDK 的样板代码用法和其文档。它完全基于 Firebase iOS SDK 构建,并为您包装,旨在 提高您的生产力和代码质量,让您专注于 iOS 应用真正有价值的部分。
- 带有内部错误处理的简单方法。
- 按可读性和易用性组织方法,分为 GET、SET、UPDATE、DELETE 和 LIST。
- 内部日志器,可轻松跟踪难以读取的 Xcode 日志跟踪窗口中的请求和响应。
- 使用 Firebase 提供的易于使用的电话功能进行身份验证。
为什么使用 FKFirebaseKit 而不是 Firebase iOS SDK?
FKFirebaseKit 的 API 是针对开发者友好性重新设计的。如果您想在 Podfile 中创建一个监听并查找用户列表的页面,使用 FKFirebaseKit 超级简单。
您想创建一个使用 OTP 进行手机身份验证的应用吗?让我们看看示例 VIPER 模块的交互层,比较 FKFirebaseKit 和 Firebase iOS SDK 代码。
FKFirebaseKit 对筛选器进行了人可读的处理。只需查看代码块比较中过滤电话的匹配情况。您可以将 .equal 替换为 .prefix 来获取所有以该前缀开头的电话。
安装
FKFirebaseKit SDK 需要运行在 iOS 11 及更高版本上。
pod 'FKFirebaseKit'
...或指定特定版本
pod 'FKFirebaseKit', '~> 0.1.0'
使用方法
端点
在以下所有请求方法中都可以看到端点参数。端点是我们要发送请求的确切子路径。它是一个字符串数组。您可以将所有子路径按在 Firebase 实时数据库结构中的相同顺序添加到字符串数组中。
假设您有一个数据库模式并想要更新键为 "1dsa-1dsa-adas" 的用户信息。
{
"Users" : {
"1dsa-1dsa-adas" : {
"createdAt" : "2020-06-18T09:55:39Z",
"password" : "aaa",
"phone" : "+445121231122"
},
"oajsd-ofc-2131" : {
"createdAt" : "2020-06-18T10:00:45Z",
"password" : "112233",
"phone" : "+91000000000"
},
"os4bBojJPogdSvtQerydnBN6Leg2" : {
"createdAt" : "2020-06-18T08:25:51Z",
"password" : "1234",
"phone" : "\"+1444444444"
}
}
}
在这种情况下,您的端点必须是 ["Users", "1dsa-1dsa-adas"]
设置请求
您可以轻松保存任何需要实现 Codable 的数据。默认情况下,childByAutoId 是 false,如果您要在 Firebase 创建的唯一键下保存对象,则需要它。如果不需要 childByAutoId,则忽略它,无需将其传递给方法。
let modelForSaving = UserModel(phone: "+4400000000", password: "G0asxıf1", createdAt: Date())
FKFirebaseKitManager.shared.request(set: modelForSaving, endpoint: ["Users"], childByAutoId: true) {
print("Success")
} onError: { (message: String) in
print(message)
}
获取请求
有两种类型的获取请求。它们是监听和一次。读取类型的获取请求将响应返回给用户并继续监听远程数据库,如果正在监听的数据发生更改。如果实时数据库中发生任何更改,此方法将被触发。
var observer = FKFirebaseKitManager.shared.request(get: .listen, endpoint: ["Users"]) { (response: [ResponseModel<UserModel>]) in
for item in response {
print(item.key)
print(item.result)
}
} onError: { (message: String) in
print(message)
}
具有监听类型的获取方法返回一个作为 UInt 的值。这个 UInt 由 Firebase 创建以指向观察器。因此,如果上面的方法不再需要,例如您推送到另一个 ViewController,或者您不关心远程数据是否更改,只需删除观察器引用。您必须传递与上述方法中使用的相同端点来正确删除观察器。
FKFirebaseKitManager.shared.remove(observer: observer, for: ["Users"])
另一种获取请求类型是仅调用一次的方法。以下是一个示例。默认获取请求类型为 .once。因此,无需指定 get 参数为 .once 并可以忽略它。
FKFirebaseKitManager.shared.request(endpoint: ["Users"]) { (response: [ResponseModel<UserModel>]) in
for item in response {
print(item.key)
print(item.result)
}
} onError: { (message: String) in
print(message)
}
更新请求
假设您有一个应用程序的个人资料页面,只想更新用户的信息。只需在实时数据库结构中找到相关用户,使用路径 Users > 该用户的 AUTO_CHILD_KEY 更新对象。
let modelForUpdating = UserModel(phone: "+4400000000", email: "[email protected]", updatedAt: Date())
FKFirebaseKitManager.shared.request(update: modelForUpdating, endpoint: ["Users", AUTO_CHILD_KEY_OF_THE_USER]) {
print("Updated user data.")
} onError: { (message: String) in
print(message)
}
删除请求
只需跳转到相关子项即可删除数据。
FKFirebaseKitManager.shared.request(delete: ["Users", AUTO_CHILD_KEY_OF_THE_USER]) {
print("Account of the user removed.")
} onError: { (message: String) in
print(message)
}
监听请求
监听Child请求有4种类型。它们是 .added, .changed, .removed, .moved。它们都通过事件类型列出子项。因此,请求类型返回一个观察者键作为UInt。必须像在获取请求中描述的那样跟踪观察者键的管理。
只需监听远程数据库,即可获取新添加的每个用户记录。
FKFirebaseKitManager.shared.listenChild(forChild: .changed, endpoint: ["Users"]) { (response: [ResponseModel<UserModel>]) in
// Do whatever you want with up-to-date data.
// For example, update the table view.
} onError: { (message: String) in
print(message)
}
列表请求
有5种类型的高级查询:.prefix, .starting, .ending, .equal, .between。您可以指定要过滤的键来使用这些过滤方法。
FKFirebaseKitManager.shared.list(key: "age", filterBy: .between(22, 25), endpoint: ["Users"]) { (response: [ResponseModel<UserModel>]) in
// Parse user datas whose ages between 22 and 25
} onError: { (message: String) in
print(message)
}
或者
FKFirebaseKitManager.shared.list(key: "creditCard", filterBy: .prefix("3512"), endpoint: ["Users"]) { (response: [ResponseModel<UserModel>]) in
// Get all users whose credit card numbers starts with 3512.
} onError: { (message: String) in
print(message)
}
手机认证
FirebaseKit目前只支持v0.1.0中的手机认证选项。其他选项,如电子邮件、使用苹果登录以及其他社交登录授权,将在v1.0中得到支持。您可以查看待办事项章节。
使用手机号码发送OTP。
FKAuthenticationManager.shared.languageCode = "tr"
FKAuthenticationManager.shared.phoneCode = "+90"
FKAuthenticationManager.shared.verify(phoneNumber: phone) {
self.presenter?.verifyOTP()
} onError: { (message :String) in
print("Error: \(message)")
}
验证发送给用户的OTP。只需输入UITextField中的OTP代码并将其传递给验证方法。
FKAuthenticationManager.shared.verify(otp: code) {
print("Registered successfully")
self.presenter?.otpVerified()
} onError: { (message: String) in
print("Error: \(message)")
}
这里提供了一个另一种身份验证方法以检查并获得当前用户信息。
print("isLoggedIn: \(FKAuthenticationManager.shared.isLoggedIn)")
print("currentUser: \(FKAuthenticationManager.shared.currentUser?.phoneNumber)")
print("logout: \(FKAuthenticationManager.shared.logout())")
print("isLoggedIn: \(FKAuthenticationManager.shared.isLoggedIn)")
上述打印组可能产生的输出。
isLoggedIn: true
currentUser: Optional("+4400000000")
isLoggedIn: false
待办事项
- Cloud Firestore的实现。
- 扩展身份验证选项。
- 更好的日志跟踪。
- 使用Firebase iOS SDK配置详细说明文档。
- 使用数字限制查询以指示最后或第一个。
- 您的宝贵问题和pull-requests
开发
想贡献吗?太棒了!
任何问题、分叉、星号和pull-request都受欢迎。
依赖关系
- 带有v7.1.0的Firebase iOS SDK
资源
如果您想查看Firebase iOS SDK的官方公告并阅读上面简要介绍的文档,
作者
- Furkan Kaplan https://github.com/furkankaplan
- Twitter: @kaplanfurkan07
- LinkedIn: @furkankaplan07
- Email: [email protected]