FKFirebaseKit 0.1.0

FKFirebaseKit 0.1.0

Furkan Kaplan 维护。



 
依赖项
Firebase~> 7.1.0
Firebase/Auth~> 7.1.0
Firebase/Database~> 7.1.0
 

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的官方公告并阅读上面简要介绍的文档,

主题 链接
设置 https://firebase.google.com/docs/database/ios/start
发布说明 https://firebase.google.com/support/release-notes/ios
推荐的数据结构 https://firebase.google.com/docs/database/ios/structure-data
CRUD https://firebase.google.com/docs/database/ios/read-and-write
列表过程 https://firebase.google.com/docs/database/ios/lists-of-data

作者