Tag: Firebaserealtimedatabase

Swifty Firebase API @ Ka-ching —第4部分

自动代码生成和开放源代码 这篇文章是该系列文章的第4部分,我们将探讨如何构建Firebase API的Swift扩展。 到目前为止,我们已经讨论过添加对Firebase Realtime Database API的Codable支持,添加定义数据库结构模式的类型安全路径以及向API添加RxSwift扩展。 在本文中,我们尝试将当前讨论的所有主题包装到两个非常轻量的框架中,这些框架可以轻松地包含在您自己的项目中。 这提供了无懈可击的Codable支持,键入安全路径和RxSwift扩展名-您可以选择想要使用的功能。 但是,在我们开始讨论开源框架之前,让我们看一个可以使我们的生活更轻松的主题: 自动代码生成 在有关类型安全路径的文章中,我们描述了一种使用Path类型的受约束扩展对层次结构建模的策略。 这些扩展要求键入很多样板。 诸如Sourcery和SwiftGen之类的工具由于一些很好的原因而变得流行: 样板很无聊,易于维护。 从某种形式的资产自动生成的代码将保持最新状态,因此,如果您删除或重命名资产,如果您的代码仍引用这些资产,则会立即出现编译错误。 因此,为何不必键入和维护大量的幻像类型和受约束的Path扩展,为什么不只定义您的模式并让代码自动生成呢? 考虑以下示例架构: { “ configuration”:“ Configuration”, “聊天室” : { “ ”:{ “邮件”:{ “ ”:“消息” }, “ name”:“ String” } } } 这将定义从结构的根部到叶节点的Paths ,这些Paths必须与代码中的模型类型名称相对应。 包裹在尖括号中的json键表示树中此刻的数据是集合的一部分。 您会注意到,没有实体定义聊天室。 出于上述架构的考虑,没有对应于聊天室的模型类型,但是您需要创建一个通往聊天室的路径才能获取该聊天室的消息。 这个概念是使用幻像类型建模的。 代码生成器将生成一个没有值的名为Chatroom的枚举。 这意味着Chatroom永远无法实例化,但仍可以在我们的代码中用作通用限制。 使用从以上架构生成的代码,您可以生成如下路径: 让messagesPath = Path()。chatrooms.child(“ firechat”)。messages 或者,您可以使用自动生成的便捷方法,该方法将.child(_ key:String)方法包装如下: 让messagesPath = Path()。chatroom(“ […]

Swifty Firebase API @ Ka-ching —第一部分

添加对可编码类型的支持 更新,2018年10月14日: 自撰写本文以来,这些博客文章中描述的概念已被分为两个开源框架,可以在这里找到: ka-ching-as / FireSwift-Database Firebase实时数据库的扩展,可以使用“ Codable” Swift类型。 … github.com ka-ching-as / RxFireSwift-Database Firebase实时数据库的RxSwift扩展— ka-ching-as / RxFireSwift-Database github.com 背景 Firebase实时数据库是构建应用程序的绝佳工具。 有很多文章介绍了使用Firebase的一些优点,因此,本篇文章不会对此进行详细介绍,而是假定您已经对该技术有一定的了解。 Firebase的iOS API当前是用Objective-C编写的,尽管这些API在Swift中表现得很好,但这确实意味着我们无法利用Codable支持之类的仅Swift功能。 这篇文章(以及随后的几篇文章)将探讨向Realtime Database API添加漂亮和“ Swifty”扩展的可能性。 总览 以下是有关这些帖子的概述: (本文)增加了对Codable类型的支持。 向数据库中的数据添加类型安全的路径 (尚未发布)添加RxSwift扩展以将数据提供为Observables 动机 第一篇文章的动机是使您可以将存储在Realtime数据库中的数据视为模型对象,而不是纯数据。 在第二篇文章中,我们将摆脱容易出错的String路径到数据的使用。 第三篇文章的动机是这样的事实,即在如何通过Rx眼镜感知世界以及如何使用实时数据库API方面存在很大的重叠。 即,数据在两个概念中都被视为随时间变化的值。 让我们通过结合概念来利用这一点。 TL; DR 这篇文章的目标是能够将可Codable模型类型与Firebase Realtime Database API一起使用,如下所示:

使用Swift的iOS实用Firebase

该课程的原价为199美元,但在有限的时间内,您只需10.99美元即可获得完整的课程。 优惠券数量有限,请不要等待太久🙂使用下面的优惠券链接: https://www.udemy.com/practical-firebase-for-ios-using-swift/?couponCode=ILOVEFIREBASE 大家好, 在过去的几个月中,我一直在努力学习新课程“ 使用Swift的iOS实用Firebase ”。 我很高兴地宣布,该课程现已出版,可以出售。 我一直认为,学习某件事的最好方法就是去做。 适用于iOS的实用Firebase使用Swift反映了我边做边学的经验。 在本课程中,我们将创建多个实际应用程序,这些应用程序将使我们看到Firebase平台的强大功能。 让我们看一下将在本课程中构建的不同应用程序: 高水位 High Waters应用程序离我的心很近,因为它影响了我当地的休斯顿社区。 该应用程序的目的是通知用户水灾地区。 用户可以在地图上放置一个指示被淹区域的图钉。 任何人都可以看到该图钉,而无需刷新应用程序。 销的位置将保留在Firebase数据库中。 杂货应用 Grocery App是一款偶像应用程序,用于了解Firebase中的父子关系。 该应用程序还向用户介绍了Firebase身份验证系统,该系统允许用户使用自己的自定义凭据进行注册和登录。 用户能够创建新的购物清单,然后将项目添加到购物清单。 根据用户的凭据,每个购物清单与杂货一起保留。 WhatsUp聊天 诸如WhatsApp,Facebook Messenger,微信,Viber等聊天应用程序已成为我们社会不可或缺的一部分。 在本节中,我们将构建一个名为“ WhatsUp”的完整聊天应用程序。 WhatsUp聊天应用程序将允许用户向聊天室中的其他用户发送文本消息和照片。 本节将向您介绍JSQMessagesViewController,它使创建类似聊天的界面变得很容易。 学生还将学习如何使用Firebase存储将照片上传到Firebase平台。 我对本课程感到非常兴奋,希望您会喜欢学习并将Firebase与iOS应用程序集成。 该课程的原价为199美元,但在有限的时间内,您只需10.99美元即可获得完整的课程。 优惠券数量有限,请不要等待太久🙂使用下面的优惠券链接: https://www.udemy.com/practical-firebase-for-ios-using-swift/?couponCode=ILOVEFIREBASE 看完课程后,请给它评分并复习。 您的评分非常重要,它有助于添加更多内容并支付账单😉 谢谢, Azam

Swifty Firebase API @ Ka-ching —第2部分

更新,2018年10月14日: 自撰写本文以来,这些博客文章中描述的概念已被分为两个开源框架,可以在这里找到: ka-ching-as / FireSwift-Database Firebase实时数据库的扩展,可以使用“ Codable” Swift类型。 … github.com ka-ching-as / RxFireSwift-Database Firebase实时数据库的RxSwift扩展-ka-ching-as / RxFireSwift-Database github.com 这篇文章是3部分系列文章的继续,该系列文章首先为Firebase API添加了Codable支持: 在这篇文章中,我们将讨论一个非常有趣且功能强大的主题,它受objc.io Swift Talk#71:带有幻影类型的类型安全文件路径的启发。 在Swift Talk中,Brandon Kase和Florian Kugler讨论了“幻影类型”,简而言之,这些类型永远不会实例化,而只会用作通用约束。 这些是将强类型添加到通常不是强类型的API的强大工具,就像Firebase RTDB Reference使用的路径一样。 请,请去观看关于objc.io的精彩演讲! 在这篇文章中,我们将混合Phantom Types和实际的Codable模型类型,以创建一个真正强大的API。 可以在第一篇博客文章中介绍的github仓库的typesafe_paths分支上找到该文章的示例代码: ka-ching-as / SwiftyFirebase SwiftyFirebase – Swift中Firebase API的简单包装 github.com 请注意,本文涉及Firebase,但是所描述的技术可以用于具有“字符串”定义的数据层次结构的任何类型的API。 我们将介绍一种Path类型,该类型基本上包装了一系列路径组件,但在此过程中增加了类型安全性。

Swifty Firebase API @ Ka-ching —第3部分

更新,2018年10月14日: 自撰写本文以来,这些博客文章中描述的概念已被分为两个开源框架,可以在这里找到: ka-ching-as / FireSwift-Database Firebase实时数据库的扩展,可以使用“ Codable” Swift类型。 … github.com ka-ching-as / RxFireSwift-Database Firebase实时数据库的RxSwift扩展– ka-ching-as / RxFireSwift-Database github.com 这篇文章是3(或4或5?)部分系列的延续。 在第一篇文章中,我们向Firebase API添加了Codable支持: 在第二篇文章中,我们使用Phantom Types添加了Type Safe路径,这为我们提供了强类型的路径和出色的API人体工程学: 在本文中,我们将添加对RxSwift的支持。 如果您想了解有关RxSwift的更多信息,请参考官方github回购,其中提供了很好的用例示例。 我在这里要表达的唯一的进一步动机是,Firebase实时数据库和Rx的思维方式存在巨大的重叠:RTDB允许用户订阅随时间变化的数据。 Rx的主要目的之一就是提供随数据随时间变化建模的原语。 如我所见,Rx是使用Firebase RTDB API的理想方式。 例如,使用本机API观察Firebase中某个位置的更改,要求用户跟踪订阅时返回的订阅令牌。 在Rx中,我们可以将此令牌包装在订阅中,以便在处理订阅时删除Firebase观察器。 但是,当我们开始编码时,所有这些可能更容易掌握! 添加一个Rx扩展 为了方便起见,让我们开始向DatabaseQuery添加Rx扩展(这是DatabaseQuery的超类型)。 可以在RxSwift存储库中找到添加Rx扩展的模式,例如RxCocoa扩展。 它看起来如下:

伪造XCTest中Firebase实时数据库API的响应

我在工作中使用Firebase实时数据库,当我在寻找有关模拟使用Firebase实时数据库的单元测试时,发现了这篇文章(用日语编写)。 Firebase实时数据库をiOSで扱う际の模拟について考えてみた 松。松馆(@d_date)です。 medium.com 还写到,不仅仅是模拟实时数据库,而且它是如此有用。 这次,我试图考虑一种更简单的方法来模拟XCTest中的实时数据库的响应。 希望对不想做复杂事情的人有所帮助。 这个应用程式程式码的作用如下: 正在将DatabaseRefenrece的实例传递给构造函数。 使用observeSingleEvent API一次获取“样本”路径的数据。 对响应中的快照进行一些操作,然后将结果传递给完成模块。 该应用程序的所有单元测试代码如下所示。 让我们一一看。 让我们从测试用例开始。 在第一行创建目标类的实例。 那时,将MockDatabaseReference(它是DatabaseReference类的模拟对象)作为构造函数参数传递。 稍后我将解释该模拟类。 此外,请使用XCTestExpectation,因为从实时数据库获取数据应该是异步操作。 这是之前提到的DatabaseReference类的模拟对象。 这次,应用程序代码使用了observeSingleEvent API,因此覆盖了该功能以及子功能。 覆盖子函数的原因是,如果应用程序代码使用子 API来请求特定的路径数据,则该API返回另一个新的DatabaseReference实例,那么我们就无法模拟响应。 因此,这一次,覆盖子 API并返回模拟对象本身,以便应用程序代码在实现模拟时可以请求任何路径。 如果要更改响应数据取决于请求的路径,则可以通过重写子 API并为每个路径返回DatabaseReference的不同模拟对象,来做到这一点,如下所示: 最后,重写DataSnapshot类,它是实际的响应数据。 DataSnapshot的value属性最初是只读属性,因此我们无法使其令人满意。 因此,重写它并返回我们要用作测试数据的数据。 通过在MockDatabaseReference类的observeSingleEvent中使用此MockSnapshot对象,我们最终可以使Firebase Realtime Database API根据需要返回数据。

使用Firebase Model Framework Salada制作用户模型

我将介绍我通常在应用程序中采用的用户模型。 本文将介绍什么 安装萨拉达 使用Firebase建立用户模型 链接Firebase身份验证和用户模型 $ gem install cocoapods —预 需要Cocoapods 1.4版或更高版本。 豆荚“萨拉达” 安装完成! 让我们快速建立一个用户模型。 甚至User.swift都可以,但是由于在使用Realm创建相同的用户模型时,我不喜欢名称冲突,因此我一直在使用Firebase + User.swift。 由于Firebase Auth也有一个定义为User的类,我认为最好提供一些名称空间。 这次,我将介绍简单的配置,但可能会很好地使用它。 导入 Firebase Firebase 扩展名 { 类 User :对象{ @objc 动态 变量名称:字符串? @objc 动态 var thumbnailImage:文件? 让关注者:关注者= [] 让朋友:朋友= [] } } 提供用户名和缩略图并关注功能。 借助File,您可以与FirebaseStorage无缝协作。 扩展名 Firebase .User { 静态 函数 当前 ( _ completeHandler:@escaping((Firebase.User?)-> Void)){ […]