Tag: firebase云消息传递

应用业务之旅的开始

我花了将近两年时间制作了我的第一个应用程序,它的收入约为160澳元。 当我无可否认地为自己的成就感到自豪时,这就是平庸的定义。 然后我开始制作续集,我发誓会成功,当我很快意识到自己在做的事情是不可持续的。 如果您设法在游戏上投入了几年时间,并且幸运地被Apple / Google选中并赚了一大笔钱,那就太好了。 但是,一旦尘埃落定,您就会看到长长的尾巴。 我想建立一些可以赚取经常性收入的东西,而这可以让我腾出时间来专注于其他事情。 创造可持续的生活 我看了其他游戏,即使在发布几个月后,这些游戏总是一直在Reddit的首页上出现。 像Poly Bridge,Rocket League和Minecraft之类的游戏。 所有这些游戏的共同点在于它们的粘性-内容创作。 当别人可以免费完成所有辛苦的工作时,我花了数年的时间尝试创建一些东西供他人使用(当然,经过一番嫁接)。 因此,我再次转身。 不过,这次,我不想依靠在应用商店中获得推荐的机会,而是专注于可以不断发挥自己作用的想法。 这些想法中的第一个是“场景游戏”,它是大局的一部分。 第一个应用程序充当一个项目,以测试驱动我所学到的有关数字营销和增长黑客的一切知识,并将引入许多其他应用程序中,以建立可产生足够钱来维持可持续生活的投资组合。 我刚刚在爱尔兰和澳大利亚进行了发布,并准备通过实验和闪亮的图表记录整个旅程。 这是什么系列的? 我打算在本博客系列中介绍一些内容(但不是详尽的清单)- 广告素材的A / B测试 ASO分析,技术和实验 增长黑客 应用内实验可提高参与度,收入和增长 收入报告(除非我成为百万富翁并且想避免纳税) 产品路线图 其他新应用 您正在使用哪些产品/营销工具? Firebase提供所有功能(实验,分析,崩溃报告,通知等) Google Analytics(分析)用于目标网页渠道分析 ASO移动行动 iTunes Connect进行报告 Google Play报告 Apple搜索广告/ Facebook广告/ Google广告词(我们将在后面介绍其余内容) Twitter / Facebook(用于社交媒体)(也许稍后会发布Instagram) 草图(用于模型和新创意原型) 您的技术栈是什么? 我正在使用的某些技术工具是- Firebase提供所有功能(后端,云功能,身份验证) 为应用程序反应本机 到达网页的纯HTML / CSS / […]

在不到2小时的时间内使用Firebase构建iOS应用!

如今想出一个主意很容易,但要迅速将其转变为产品并不容易。 如今,随着BaaS(后端即服务)的可用性,我们可以轻松地消除构建后端系统以支持我们的移动客户端的需求。 对于这篇简短的文章,我将列出一些简单的步骤,以构建可轻松与Firebase连接以利用其实时功能的应用程序! 我正在使用的应用程序将是一个名为PokemonWo的应用程序,请不要运行它,我希望我可以在2小时内完成。 该应用程序基本上利用了Firebase的登录功能,执行身份验证和登录,然后从FirebaseStorage加载图像,然后用户可以执行随机捕获并获得积分。 每个人都可以使用高分表来跟踪分数变化。 第1步:设置Firebase帐户和数据库: 转到Firebase控制台,设置一个帐户,然后在此添加您的应用程序。 您可以随便叫它。 之后,请在此处下载sdk,然后按照以下步骤将您的项目与Firebase关联。 您应该有一个GoogleService-Info.plist。 我使用Pod安装我的Firebase SDK。 设定验证 接下来,在firebase控制台中,启用“电子邮件/密码的身份验证/登录方法”,这将允许您创建一些简单的帐户,供用户登录到您的应用程序。 然后,转到“用户”并开始创建一些帐户: 然后,转到“存储”并开始上传一些图像,每次上传后,每个文件都将存储在Firebase服务器中,您将能够从每个图像获取url地址,以便以后可以添加到数据模型中。 有事吗 安全规则存在危险迹象,这是因为为了简单起见,我允许任何人访问图像文件甚至上传到存储,但是在构建将要发布的更复杂的应用程序时设置适当的规则很重要给更多用户。 我们快到了,剩下的就是主要数据本身,Firebase使用无模式JSON格式化数据库。 您可以轻松地将此数据转换为 宠物小精灵{ [{ “ name”:“ charmander”, “得分”:3 },…] } 那么到目前为止我们已经设置了什么? 我们已经设置: Firebase控制台 iOS SDK 帐目 存储 数据库 完成这些步骤后,我们就快到了! 只需将数据提取到我们的移动应用程序中,我们就很好了! 第2步:安装项目并集成Firebase iOS SDK 对于我的项目,我仅使用两个导入,即Firebase和FirebaseDatabase,可以随意探索其他导入,它们对于进一步启动应用程序很重要! 在appDelegate进行简单设置,导入和配置。 还记得我们在firebase中有设置帐户吗? 我们调用FIRAuth.auth方法执行身份验证,然后在数据库中与主用户帐户分开创建培训者数据。 那这里怎么了 在通过Firebase成功进行身份验证后,我将获取Firebase生成的ID并创建新的培训师条目,然后将其存储在本地,以便以后可以使用它来更新分数。 因此,这里有2个主要功能,其一是玩随机捕获游戏来得分,其二是查看所有教练的得分。 对于功能1,首先,我调用我创建的所有神奇宝贝条目并将其存储在数组中: 一旦我们准备好了宠物小精灵,我们就准备好抓住它们了! 我运行了一个随机数生成器以随机遍历数组并获取一个神奇宝贝名称,使用该名称附加到我们的Firebase存储的firebase baseurl中,并异步加载图像。 完成此捕获后,它将根据我分配给该口袋妖怪的分数来更新教练的分数,并且实时更新教练的分数! 多么酷啊! […]

如何使用AWS Lambda或Google Cloud Functions将Zendesk Mobile SDK与Firebase集成?

大家都知道,您可以使用JWT(JSON Web令牌)对Zendesk Mobile SDK的用户进行身份验证。 此外,还有很多HOWTO-s,它们显示了针对许多不同编程语言的JWT实现。 在本教程中,我将向您展示如何使用Google Cloud Functions,NodeJS和其他一些npm附加功能来为Zendesk Mobile SDK创建完全可扩展且完全免费的无服务器JWT身份验证后端。 为什么选择Google? 当然,您可以使用AWS Lambda函数来实现类似的解决方案,但是我个人认为,使用单个产品(Google Firebase)进行iOS后端操作要容易得多,然后再使用AWS的几个服务。 因此,主要原因是Firebase。 同时,Google为您的所有服务提供了出色的日志记录解决方案,因此您无需实施任何特殊的操作并重新发明轮子。 只需对您的所有服务使用单一解决方案。 第三个是API。 我个人认为,Google的API是我见过的最好的API。 只有Google为您提供大多数错误的详细说明,并为您提供指向其控制台的直接URL链接,例如,启用所需的服务。 什么是无服务器,云功能和Lambda? 可以将其视为基于容器技术的轻量级PaaS托管,但存在一些局限性,这使得该技术超级快速且可扩展。 此托管存储您的代码段,这些代码段可以独立启动以解决一个简单的问题(例如,调用Web服务的另一功能,将某些内容保存到数据库或发送电子邮件),这些代码可以在一个时间短。 每当其他云服务触发它或像传统Web服务一样通过HTTP / HTTPS协议直接调用它时,您的代码段就会在容器内启动。 为什么使用无服务器(AWS Lambda或CloudFunctions)? 我们仍然不会不花心思地使用每种解决方案所需的资源。 我们仍然使用一半负载的VM来支持较长的基础架构扩展时间或具有在Kubernetes集群中启动其他容器的能力。 在云的情况下,我们要为这些未使用的资源付费。 不了解您,但我不想这样做。 云功能的使用使我们更加节俭地使用可用资源,同时,它使我们能够比使用VM甚至容器的情况下更快地进行扩展。 因此,借助CloudFunctions,我们可以使用云的本质而无需考虑我们的Web服务可伸缩性。 当然,所有云提供商都支持无服务器技术,因此,您无需考虑诸如供应商锁定之类的事情。 您可以随时轻松切换云提供商。 无服务器后端 首先,我假设您已经拥有: Google Firebase帐户(如果您不使用Firebase,也可以使用传统的Google Cloud)并在其中创建了Project。 您已经安装了Firebase SDK for Cloud Functions,并为您的云功能创建了初始项目结构。 您已阅读有关编写HTTP云功能的信息 之后,您将可以轻松在Node.js上编写类似的代码。将以下代码添加到index.js文件中,以创建名为jwt_auth的云函数: “使用严格”; const functions = require(’firebase-functions’); const admin […]

通过RxSwift和ObjectMapper缓解Firebase的痛苦

本文是我在软件工程中的一些实用方法。 所有示例代码均使用Swift 3,Firebase 4.0,RxSwift 3.6.1和ObjectMapper 2.2.8编写 介绍 也许您知道,Firebase是跨平台开发工具的集合,包括实时数据库,分析,云消息传递,身份验证,Admob等。 但它最初是一个实时数据库,在2014年被Google收购之前。 背景 Firebase实时数据库(为了简短起见,从现在开始,我将说Firebase for Firebase实时数据库 )可能不适用于每个移动应用程序,但是在我们正在开发的iOS游戏项目中,它可以满足我们的需求,而且速度非常快。 这是一个普通Firebase对象的示例: 您可能希望它以平面以下的格式轻松地将它们映射到对象中。 我将为此提供一些解决方案。 { “ postId”:“ postId”, “ title”:“标题”, “ content”:“内容”, “ author”:“ userId” } 对象映射器 我经常使用ObjectMapper自动将JSON映射到Model对象。 有很多库,但是我很熟悉。 我将介绍JSON映射的两种基本情况 单对象映射 解决这个问题的第一种方法是每次查询Post对象时,将Firebase的DataSnapshot键手动添加到数据字典中 likes是一个包含userId列表的数组,但是我不想将其存储为[ String: Bool] 。 最好编写一个自定义转换。 邮政模型变为: 此外,您可以编写所需的任何自定义转换,例如在Int64时间戳和String日期格式之间进行转换。 RxSwift 什么是RxSwift? Rx代表ReactiveX,是“用于异步编程的API 带有可观察到的流”(http://reactivex.io)。 另外,有许多教程告诉您应该了解Rx的优点。 例如,Why-Rx,Why-Use-RxSwift。 RxSwift是Swift语言中Rx的实现,其中包括其他语言:Java,JS,C#,Python… 2.为什么选择Rx? Rx优雅地处理异步代码块。 它具有陡峭的学习曲线,但值得学习。 对我来说,带有RxSwift的Firebase非常强大。 3.行动中 首先,我用RxSwift封装了Firebase函数,该函数可以帮助您以一种更易读的反应方式查询Firebase。 […]

Firebase –检索数据(iOS)📩

baseอต้องการแบบอมูลจากFirebase侦听器แบบ异步ซึ่ง侦听器ตัวนี้จะเชื่อมต่อกับฐานข้อมูลจาก数据库参考เมื่อเริ่มสร้างจะมีการงจะมีกอมูลมาก่อน1ครั้งหลังจากนั้นก็จะได้รก็จะได้数据ตาม ที่ตั้งไว้เช่น值,已添加子项,已更改子项 总览 导入 FirebaseDatabase 创建引用— referenceามารถอ้างอิงแบบอื่นได้อีก(),(fromURL:String),(WithPath:String) 创建监听器/ 使用功能 读取事件类型 侦听器จะทุกเรียกทุกครั้งเมื่อ事件เปลี่ยนแปลงซึ่งก็ขึ้นกับtypeที่ได้สร้างไว้ 值 —数据มีการเปลี่ยนที่ 添加的孩子— childรียกเมื่อchildถูกเพิ่ม 换了孩子— childรียกเมื่อchildถูกเปลี่ยน 子级已删除 —เรียกเมื่อchildถูกลบ 孩子感动 — childรียกเมื่อchildถูกย้าย 一次读取数据 ับางครั้งเราไม่ต้องการรอรับ数据ตลอดเวลาเช่นอาจจะแค่ต้องการ用户名มา设置标题แค่ตอน登录ก็สามารถใช้ เพิ่มเติม。กรณีนี้หากต้องการหา名称จะใช้ากโครงสร้างข้างต้นจะใช้ จะไล่ค้นหาตั้งแต่儿童ท้ายสุดไปแรกสุด) 查询数据 queryOrderedByChild: queryOrderedByKey: queryOrderedByValue: queryOrderedByPriority: คำสั่ง查询ที่ใช้เสริมกับตัวด้านบนเพื่อนำมาใช้ร่วมกันในการ查询ระดับเมพขึ้นไปอีก💪 queryLimitedToFirst: queryLimitedToLast: queryStartingAtValue: queryEndingAtValue: queryEqualToValue: 例如 复杂查询 例如 摘要代码

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(“ […]

如何明智地选择下一个在线课程

我们真的不能只是等待,什么也不做。 如果我们想保留自己的工作,保持我们的地位并仅仅提高自己,我们就必须不断提高自己的技能并进行创新。 做到这一点的方法是不断学习新事物。 听起来可能很刺耳,但这是一件好事。 我认为我们占了上风。 过去,大多数人无法真正决定他们的工作。 他们中的许多人每天都必须进行艰苦的体力劳动。 另一方面,我们可以选择我们的工作。 即使没有受过教育的人也有选择。 几乎没有人需要做体力劳动。 但是要权衡的是,我们需要学习和学习,并且如果我们想继续并带来价值,就需要继续这样做。 我喜欢这样。 它更有趣,更安全。 例如,如果我断手,我没有失去工作的风险。 在线学习是学习新事物的最佳场所之一。 有太多的选择,这使质量上升,价格下降。 您可以免费或什至以10–20美元的价格找到优质的课程,而这些课程花费不超过5–10年前的几百甚至几千美元。 而且由于有了互联网,您甚至不必离开家中的舒适环境。 现在,它并不适合所有人。 有些人在房间里或别人检查时会更好地学习。 但这对大多数人来说都是一个不错的选择。 因此,您决定在在线课程中学习一些东西,如何选择适合自己的课程? 嗯,每个人都不一样,但是我可以告诉你我是怎么做的,其背后的逻辑是什么。 我将在Udemy的课程中介绍如何做到这一点。 这很明显-但我还是要说(写)。 确保该课程的主题是您想要学习的。 在此期间,请阅读说明和目录。 您必须确保它是您真正想要的。 星级评分 假设您看一门在线课程,它的评分为4.3星。 然后您再看一门课程,它就获得4.6星评级。 你应该去4.6星吧? 那么不一定。 参加课程的人数 如果4.6星课程有946条评论,而4.3星课程只有12条评论,那么4.3可能会更好。 毕竟,星标是所有评论的平均值,评论越多,它的准确性就越高。 如果很多人选择参加本课程并给予好评,这也将更加令人放心。 这意味着它可能兑现了诺言 但是,寻找明星和参加此课程的人数并不是唯一的选择。 课程的持续时间和每节课怎么样? 时间和持续时间 这门课程可能很棒,但是如果要花60个小时才能完成,那就太麻烦了。 当然,即使是10个小时,也可能需要30到40个小时才能完成,所以您有时间去做吗? 修读较短的课程也许更好? 另一方面,如果它太短,则可能没有足够的知识。 如果您想成为某个领域的专家,那么4小时的课程可能不会帮助您达到目标。 上课也一样。 我认为,为了使视频课程有效,应该在10到15分钟之间且不超过45到50分钟之间。 如果您可以一次坐着看完每个视频,这是一个很大的优势。 也就是说,就课程持续时间和视频时长而言,大多数现代在线课程都做到了这一点。 最后更新 但是还有另一个非常重要的数字。 不是一个数字,更像一个日期。 上一次在线课程更新。 即使您的课程看起来很受好评,但如果最近更新的时间超过一两年,则可能没有意义。 […]

在Bitrise(beta)上推出适用于iOS的坚固,灵活的真实设备测试

借助Google Firebase,也可以在iOS应用程序的Bitrise上获得以日志,视频和屏幕截图形式呈现的最终测试结果。 一年前,我们推出了针对Android的真实设备测试,您很喜欢它,因此现在也可以在iOS上尝试它。 🎉 好消息是,除了您的Android应用程序之外,您现在还可以在各种设备和设备配置上测试您的iOS应用程序,并在Bitrise上查看生成的日志,视频和屏幕截图。 测试实验室使用运行在Google数据中心中的实际生产设备来测试您的应用。 测试实验室在iOS应用上运行XCTest测试。 启用项目后,您需要添加和配置两个新步骤: 请注意,这两个步骤目前都处于BETA阶段。 请继续阅读以获取详细指南。 🤖 您必须分别为每个应用程序激活它。 在 Certificate and profile installer 步骤 之后, 添加 [BETA] Xcode Build for testing for iOS 步骤 该步骤的project_path输入设置为BITRISE_PROJECT_PATH env var,如果我们的扫描程序为您的项目生成了基本配置,则该BITRISE_PROJECT_PATH将指向您的Xcode项目或工作区。 scheme输入设置为BITRISE_SCHEME ,它也由扫描程序设置。 确保您的默认方案具有最合适的目标(如果不使用包含某些方案的其他方案)。 默认情况下,该步骤将使用Debug配置构建测试,并使用configuration输入根据需要进行更改。 默认情况下,该步骤将为设备目标构建步骤,该步骤的destination输入设置为: generic/platform=iOS 。 在 [BETA] Xcode Build for testing for iOS 之后 添加 [BETA] iOS Device Testing 步骤 [BETA] Xcode […]

Firebase电子邮件链接身份验证

Firebase提供了很棒的api来管理应用程序的后端。 今天,我们将在iOS App中实现Firebase电子邮件链接身份验证功能。 在我们开始之前,没有多少关于此功能的信息。 当用户点击该链接时,您可以发送电子邮件验证链接,它将用户重定向到应用,然后用户可以使用EMAIL和LINK登录。 注意:这是少密码登录。 您可以按照以下Firebase文档中的功能进行操作: 我将描述实现iOS应用程序此功能的所有必要步骤,请按照以下指南进行操作: 注意:为此功能,必须在 App Store Connect 上创建iOS应用 程序, 因为Firebase在创建动态链接时需要App Store ID和Team ID。 我不会介绍如何使用Firebase文档设置iOS App的出色表现。 完成设置后,安装Pod’Firebase / Auth’。 通过转到Firebase控制台“身份验证”选项卡,从顶部选择“登录方法”,以启用电子邮件链接(无密码)登录。 这是此功能的核心部分,请按照以下每个步骤仔细实施: 转到您的项目Firebase控制台,打开“动态链接”选项卡。 添加您的域,主要是Firebase建议的域名。 创建新的动态链接并设置短URL链接: 现在设置动态链接,复制您的授权域并粘贴在深层链接URL字段中。 授权域路径:Firebase控制台>身份验证>登录方法>向下滚动。 定义iOS链接行为,选择“在iOS应用中打开深层链接”,然后从下拉列表中选择应用捆绑包ID: 现在不需要4和5了,都按下一步创建它。 现在,我们必须在Xcode项目功能和信息选项卡中做两件事。 首先复制“动态链接域”,然后转到“ Xcode功能”选项卡,在“关联域”中创建一个并编写应用链接:并粘贴您的域。 其次,我们必须创建一个URL方案,打开Xcode Info选项卡并展开URL Types创建一个副本,然后将您的iOS App bundle标识符粘贴到URL Schemes字段中。 确保从下拉列表中选择“编辑者”角色,然后根据需要命名该标识符。 现在您已经准备好了,在继续进行编码之前,让我向您展示App UI,以便您了解功能和代码的工作方式。 我已经创建了用于输入电子邮件的简单文本字段和两个按钮,即“发送链接”按钮(用于向用户发送电子邮件)和“登录”按钮(用于在验证后使用电子邮件登录)。 您可以根据自己的需求自定义它。我已经创建了一个演示来实现此Firebase功能。 我希望你已经 在iOS应用和Pod’Firebase / Auth’中设置Firebase。 当用户单击“发送链接”按钮时,我们将通过调用firebase Auth.auth.SendSignInLink Api函数将身份验证链接发送到用户的电子邮件,该函数接受电子邮件和Parameters中的ActionCodeSetting。 ActionCodeSetting向Firebase提供有关如何构造电子邮件链接的说明。 下面是“发送链接”按钮操作的代码片段: […]

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一起使用,如下所示: