Tag: firebase云消息传递

适用于iOS的Firebase,无效的API密钥

目前,由Google拥有的Firebase如今已成为最受欢迎的云托管NoSQL / JSON数据库,从博客文章到YouTube视频都有大量的教程。 您可以免费学习基础知识😎(了解基础知识后,您可以自己学习高级知识,对吗?😆) 该媒体不会教您如何使用Firebase,而是向您展示Firebase中的常见错误。 (如果我错了纠正我!) 请求中提供了无效的API密钥。 通常,我们不想面对学习状态下教程中未解决的任何问题。 这就是所谓的动机。 好吧,聊够了! TL; DR 重新下载GoogleService-Info.plist文件 Firebase身份验证 要在iOS项目中使用Firebase,首先需要创建一个Firebase项目并向其中添加您的iOS应用(捆绑ID)。 然后,您需要将`GoogleService-Info.plist`添加到iOS项目中并安装 Firebase框架。 现在,我假设您已按照说明进行了所有设置,例如“ FIRApp.configure()”,并且可以使用基于密码的帐户使用Firebase编写一些身份验证代码。 可选(错误域= FIRAuthErrorDomain代码= 17023“请求中提供了无效的API密钥。” UserInfo = {NSLocalizedDescription =请求中提供了无效的API密钥。,error_name = ERROR_INVALID_API_KEY}) 问题是GoogleService-Info.plist文件没有API_KEY项。 如果您四处搜寻,可能会得到很多答案,其中之一就是设置API密钥并将其添加到PLIST文件中。 不要那样做! 您可能会遇到另一个错误。 发生内部错误,请打印并检查错误详细信息以获取更多信息。 访问未配置。 之前尚未在项目xxxxx中使用Google Identity Toolkit API,或者已将其禁用。 通过访问https://console.developers.google.com/apis/api/identitytoolkit/overview?project=xxxxx启用它,然后重试。 如果您最近启用了此API,请等待几分钟,以便该操作传播到我们的系统并重试。 这是因为给定的API密钥不是来自Firebase项目。 请注意,它也不是Web API密钥 。 解 要解决此问题,您需要做的就是重新下载GoogleService-Info.plist文件,并替换为iOS项目中的文件。 您将在新的PLIST文件中看到一个“ API_KEY”项。 要再次下载文件: 转到Firebase项目概述 点击iOS应用的⠇(三个垂直点),然后选择管理 向下滚动,您将看到一个下载PLIST文件的按钮 结论 这个小问题应该首先解决。 对于初学者来说,这很麻烦。 […]

远程托管3D模型

我们正在为家具制造商开发增强现实应用程序。 您可以将家具虚拟地放置在想要布置的空间中,这样一来,您就可以准确地看到其实际外观。 基本要求是: 检测平坦的表面(通常是地板)以放置3D模型; 尽可能逼真的渲染模型; 更改模型的大小(如果存在不同的大小); 更改放置的模型上的纹理。 除此之外,我们还需要支持大量的模型和纹理。 需要随时添加或更改它们,而无需发布该应用程序的新版本或扩大应用程序的大小。 那就是我们面临的挑战-这就是我们的经验。 在开始尝试ARKit时,我们将模型保存在.scnassets中。 我们研究了模型应包含的内容,如何对齐它们,应用哪些照明模型等。这是测试模型更改的不错选择。 然后我们意识到这不是我们应用程序的解决方案。 缺点是应用程序具有所有模型和纹理的大小。 同样,在不发布新版本应用程序的情况下,无法添加,更改或删除模型。 下一步是找到一种解决方案,将资产保留在其他位置,并在需要时提取它们。 经过研究,我们发现了Apple On-Demand Resources。 对于我们的案例,这似乎是一个很好的解决方案。 按需资源是Apple提供的即用型解决方案。 它将资产与应用程序分离,并在需要时提取它们。 资产与应用程序一起上传到App Store,但在安装应用程序时未下载到设备。 而是,应用程序在必要时下载它们。 那解决了我们的第一个问题:在App Store上应用程序的大小。 因此,我们实施了此解决方案,并遵循了Apple文档。 通过将“启用按需资源”的“构建设置”更改为“是”,我们在项目中启用了按需资源。下一步是为资产分配标签。 标签是远程服务器上一组资产的密钥,这些资产一起下载。 这意味着,当我们从应用程序请求带有特定标签的资产时,我们将下载带有该标签的所有资产,而不是一个一个地下载。 可以为一个资源分配一个标签,但是Apple不推荐这样做。 有两种添加标签的方法: 在资源标签中添加资产 将标签写入资产的标签属性中。 带有标签的资产将部署到App Store。 如果应用程序不是通过App Store分发的,则可以将其存储在自己的Web服务器上。 当我们在应用程序中请求资产时,它会检查它们是否已在设备上。 如果没有,它将下载它们。 这样可以防止重复,节省内存空间和网络使用率。 当用户在移动网络上时,这特别有用。 我们的问题是无法确定资产将永久保存在您的设备上。 应用关闭后,它们可能随时消失,我们需要通过多次运行来保存它们。 可以对保留进行优先级排序,并告诉系统哪些资源在保留中具有更高的优先级。 但这仍然不是解决方案。 此外,上载新资源的唯一方法是发布新版本以及新资产。 比我们需要找出新的解决方案而忘记Apple On-demand资源。 最后,我们同意我们需要自己的定制解决方案来解决所有现有问题。 我们不想为此构建整个后端。 相反,我们使用Firebase Realtime数据库和存储。 它可以是任何存储或任何类似JSON的数据库,但我们决定使用Firebase。 […]

使用Firebase进行实时受众调查

实时数据库提供了一个非常不错的平台,供您进行实验并充分发挥您的创造力。 随着获取/获取信息的必要速度的增加以及数据不断变化的额外约束,实时数据库已被证明非常有用。 现在,在一个庞大的实时数据库中,如果您了解到数据中某些特定部分发生的更改,并且随着更改的发生而实时对其感兴趣,那就太好了。 在设计模式中,此模型将称为发布者-订阅者模型。 有一些第三方云服务提供商可以帮助您实现发布-订阅模式,但是让我们在本文中重点介绍Firebase,因为它具有出色的实时数据库服务以及通知,文件存储,分析等其他基本服务等等。让我们用Firebase构建一个令人兴奋的实时受众调查应用程序,在该应用程序中,将向受众询问问题,并在几秒钟内回答,管理员可以实时查看结果。 看一下这个视频。 如您所见,Firebase承担了分别跟踪每个频道的订户的繁重工作,一旦管理员发布问题,Firebase便完成了将问题发送给该频道的所有订户的繁重工作! 请注意,我们不涉及推送通知来发送问题。 秘密在于,只要在节点(或上图中的通道)内进行任何更改,Firebase就会将相应的更改发送到该节点的所有侦听器(订阅者)。 在Firebase内部,数据存储在一系列字典中。 可以轻松缩放数据,并在添加通道,问题或答案时创建更多子节点。 此图显示了Firebase数据库的快照。 接下来,让我们研究一下如何将数据存储在Firebase中的简单代码。 在Firebase中存储数据 在订户应用程序中,我们将必须通过以下代码表达对侦听Firebase通道节点中的更改的兴趣。 在Firebase中监听节点 由于您已经开始了解直觉,因此在发布者应用程序中使用了与订阅者应用程序监听问题节点的相同过程来监听答案节点。 订阅者应用会将答案上传到Firebase。 如您所见,Firebase提供了一个非常好的实时数据库,并且只需很少的代码,我们就创建了一个实时的受众调查应用程序。 但是,我想在另一篇文章中重点介绍Firebase的某些缺点和局限性。 阅读本文,如果您对Firebase入门感兴趣,则可以阅读此设置Firebase教程。 您可以在Github存储库中查看此项目中使用的完整代码。 由Y Labs创新实验室开发

Firebase:用户注册,登录和数据管理

努力在Firebase上创建新用户? 是否对将多个元素保存到Firebase上的特定用户感到困惑? 不要再看了! 请按照以下步骤操作,您将可以很好地在Firebase上填充用户群。 如果您尚未在项目中设置Firebase,请查看Will的博客以获取指导。 设置用户授权和数据库规则: 转到您正在处理的项目的Firebase控制台,然后转到Authentication(位于Firebase左侧“开发”下)。 导航到“登录方法”,您将在其中看到每种用户登录方法的默认状态均已禁用。 在本教程中,我将仅启用“电子邮件/密码”,尽管在Stack Overflow上使用Google / Facebook等登录用户方面有很多建议。 继续,然后单击将鼠标悬停在“电子邮件/密码”上并将状态切换为“启用”时显示的铅笔图标。 大! 接下来转到“数据库”,位于Firebase左侧“身份验证”下。 导航到“规则”。您将看到Firebase写入了默认规则(也在下面显示)。 当前,这些规则说的是“如果存在授权用户,则您可以读取保存的数据并将更多信息添加到保存的数据中。” 如果要创建特定于用户的组,则必须添加特定于该组的规则。 仅供参考-Firebase将任何组称为“子级”。您的数据库规则应类似于以下所示。 是时候开始使用XCode来开始执行代码了。 用户注册: 除了UIKit,还将Firebase,FirebaseDatabase和FirebaseAuth导入到Swift Cocoa Touch Class文件中。 如果您不这样做,则XCode将无法识别您将要调用的Firebase函数。 您将需要三个UI项:1)电子邮件的文本字段,2)密码的文本字段,和3)名为“ Sign-Up”的按钮,该按钮作为一个操作从情节提要链接到Swift Cocoa Touch Class文件。 在按钮的动作功能中,我们将编写相关代码。 首先,创建一个与它们各自的文本字段相等的电子邮件和密码属性。 由于文本字段本质上是可选的,因此我选择在guard let语句中解包文本字段。 接下来,检查以确保电子邮件和密码文本字段不为空。 如果它们不为空,则可以调用FirebaseAuth的createUser(withEmail :)方法。 上面的代码中需要注意的几件事-首先,您将看到一个名为“ ref”的属性,该属性等于FIRDatabase.database()。reference()的实例。 为了将数据读取或写入数据库,必须创建参考数据库的实例。 末尾的“根”表示参考的“根位置”。 由于我想将新用户添加到我先前创建的“用户”子级中,因此我在createUser(withEmail :)方法完成时对其进行调用。 在这个孩子中,我创建了一个新的“用户”孩子,其值设置为电子邮件。 尝试运行您的应用,然后单击“注册”按钮; 输入电子邮件和密码后,转到Firebase项目控制台并单击“数据库”,您将看到与以下内容类似的内容。 用户登录: 登录用户的代码与注册用户的代码非常相似。 从下面的屏幕快照中可以看到,注册用户和登录用户之间的主要区别是FirebaseAuth方法。 如果是登录用户,则应使用FirebaseAuth的signIn(withEmail :)方法。 向用户添加数据: 现在玩的开心! 在我的示例中,我正在创建一个由用户组成的“收藏夹”部分。 […]

Firebase —初始获取期间数据不同步

退出了一家主要使用专有技术的大公司之后,我获得了所有自由,可以尝试各种出色的工具来为自己的公司构建产品。 我想在这里分享我的学习历程(在所有方面,而不仅仅是编码),我欢迎大家的评论和讨论,因为这也是我的学习方式。 最近,我一直在iOS上使用Firebase。 对于大多数事情来说,这都是令人惊奇的,我特别喜欢脱机功能。 基本上,它使您的应用程序可以脱机运行,并且在您恢复网络后,数据将立即同步到db。 它还“聪明地”(稍后Database.database().isPersistence首先从缓存中查找数据以提高加载性能,而仅用一行代码Database.database().isPersistence获得全部Database.database().isPersistence 。 一切工作正常,除了在初始访存时遇到神秘的数据不同步问题。 如果进行“如何刷新Firebase缓存”或“ Firebase中的缓存中的过时数据”之类的搜索,您将得到诸如此类,此类或此类的零碎讨论。 它们中的许多有用,但没有一个能提供完整的图片。 我真的想知道发生了什么,所以我做了很多实验,让我在这里总结一下自己的理解。 (TL; DR;) 有2种主要的Firebase API用于检索数据: ref.observe(.value, with: { // completion block } ref.observeSingleEvent(of: .value, with: { // completion block } 第一个API是事件监听器。 它返回初始结果,并监听ref更改。 第二个API不监听更改,它只检索一次数据,因此它似乎是用于初始提取的正确API。 但是不幸的是,如果持续打开它就无法工作。 无论调用多少次, observeSingleEvent都将仅返回本地缓存的数据。 如果您的本地数据超过默认的最大10MB,问题将变得更加严重,Firebase将启动逐出缓存的数据(似乎是随机的)。 因此,如果您离线或关闭应用程序并重新启动,则仅通过使用observeSingleEvent获取数据可能会丢失一些数据。 这看起来像是一个常见问题,我希望有一些简单的解决方案,但令人惊讶的是,我确实找不到解决该问题的好方法。 经过大量的阅读和实验后,我提供了一些替代方案来解决或缓解此问题,并让我与您分享。 ref.observe 始终使用 ref.observe 这是最推荐的方法,也是Google小组的Firebase工程师推荐的方法。 使用observe将使本地数据保持同步,如果使用它来获取数据,它将首先从本地获取数据,并最终与服务器同步(具有一个或多个回调)。 但是,使用它初始获取时有两个问题: 您无法确定何时从初始服务器状态获取数据。 如果您真的想立即进入服务器状态,请停止加载微调器,而不是让数据不断更新和重新加载,则不能这样做。 它不适用于列表数据。 对于列表数据,您可能会使用.childAdded或.childRemoved因为.value仅在更改时为您提供整个Blob数据。 它效率不高,大多数时候不是很有用。 由于您不知道它何时确切返回初始服务器状态,因此,如果您只想将其用于初始提取,则无法确定何时删除.value侦听器。 ALT2 —调用 […]

Flutter:Firebase动态链接

我将告诉您有关将Firebase动态链接用于Flutter项目的经验。 对于那些不了解Firebase Dynamic Link的人 ,这里有一个视频。 Firebase Dynamic Link是满足此要求的完美解决方案。 在这篇文章中,我不会详细介绍如何在Android / iOS上配置Firebase Dynamic Link ,其中有许多教程。 我将详细介绍Flutter中的集成,该集成用于接收包含具有不同参数的深层链接的链接,因为在实现该链接时,我发现了一个错误,将向他们展示它们。 手动创建我们的动态链接 您可以按照以下文档进行操作:https://firebase.google.com/docs/dynamic-links/create-manually 在Flutter项目中添加Firebase Dynamic Link程序包 https://pub.dartlang.org/packages/firebase_dynamic_links 您可以阅读“ 处理收到的动态链接”部分 ,因为它详细介绍了说明,以防您未配置它。 将新软件包添加到pubspec.yaml文件中 firebase_dynamic_links:^ 0.0.6 插件页面上显示的示例并未详细说明应在何处放置该代码块,对于我而言,我必须阅读该插件的源代码以了解其功能。 这是示例代码: 假设MyHomeWidget是我们在应用程序启动时显示的初始窗口小部件,在创建窗口小部件并启动状态时,他们将调用_retrieveDynamicLink方法,该方法使用带有以下行的插件: 最终的PendingDynamicLinkData数据=等待FirebaseDynamicLinks.instance.retrieveDynamicLink(); 最终的Uri deepLink =数据? 。链接; FirebaseDynamicLinks.instance.retrieveDynamicLink()是在从动态链接打开应用程序的情况下负责获取深层链接的调用。 如果我们的窗口小部件已经启动,那么如果您再次打开动态链接,它将永远不会再通过initState()方法,因此我们将永远不会获得深层链接。 使用WidgetsBindingObserver 在小部件恢复或暂停时监听小部件的状态。 所以我们可以做这样的事情 在这里,我们确保每次显示小部件时,都会调用该方法以获得动态链接。 在iOS中,在插件获取Deep Link之前调用AppLifecycleState.resume 。 在调用_retrieveDynamicLink之前,添加一个小的延迟。 到目前为止一切顺利,只是我注意到一个错误仅在iOS上发生。 在iOS中,一旦打开应用程序,并使用FirebaseDynamicLinks.instance.retrieveDynamicLink()获得深层链接,当再次调用它时,我们将继续获取最后的深层链接,即,每次小部件都会执行该调用进入AppLifecycleState.resumed的状态,并且在从动态链接或由用户手动打开应用程序时发生这种情况,在iOS中,我无法得知从何处打开了它,因为在获得深层链接之后,即使该方法出来并手动输入了该应用,该方法也会带回相同的值。 当我查看iOS的插件代码时,我看到当调用retrieveDynamicLink方法时,其作用是将深层链接的值存储在变量中并返回它,问题是在使用该方法后,该变量永远不会cleaned,就像在Android中一样,因此在iOS中出现意外结果。 我已经发送了一个“拉取请求”来解决该问题,但在他们接受之前,您可以按如下所示更改pubspec.yaml文件 firebase_dynamic_links: git: 网址:https://github.com/diegoveloper/plugins.git 参考:ff17b724df0bcdf35bb5689b347d7fbef7107615 路径:packages / […]

设置推送通知di React Native dengan react-native-fcm

Halo Bosqu ..嗯… Semoga liburan nya menyenangkan ..无论如何,心情ggi lagi serius pas nulis ini,jadi kayaknya engk akan banyak becanda。 好吧,《行情》(Siapa yang menguasai dunia informationnia,Dialah sesungguhnya yang akan menguasai dunia)。 顺便说一句,FYI ini gw kutip dari kompas.com bukan dari javhihi.com。 好吧,komunikasi emang penting si,sampai ada pekerjaan khusus yang namanya PR,GRO等di tempat2 pijit terdekat。 Karena berbicara dengan orang lain […]

使用Firebase在iOS中推送通知

这适用于Firebase 4.0.4。 如果您想测试推送通知,可以使用我的应用程序PushNotifications 准备推送通知证书 转到会员中心-> Certificates -> Production 证书 现在,您可以在沙箱和生产环境中使用1个证书 授权键 如果您想使用身份验证密钥,请阅读提供商身份验证令牌 配置推送通知 转到Firebase控制台-> Settings -> Project Settings -> Cloud Messaging -> iOS app configuration 如果您使用证书,则两个字段仅使用1个Apple Push Notification service SSL 如果您使用身份验证密钥,请填写APNS auth key 新增广告连播 在您的Podfile ,声明 pod“ Firebase / Core” pod“ Firebase /消息传递” 禁用应用程序委托 在Firebase Cloud Messaging中读取方法混乱 您应该拒绝打扰。 在您的Info.plist执行此操作 FirebaseAppDelegateProxyEnabled 进一步了解Messaging.messaging().apnsToken 此属性用于设置应用程序委托接收的APNS令牌。 FIRMessaging使用方法转换以确保自动设置APNS令牌。 但是,如果通过 在应用程序的Info.plist中将 […]

在iOS中使用Firebase Cloud Messaging进行推送通知

Firebase云消息传递(FCM) Cloud Messaging是Firebase的免费酷功能之一。 将推送通知从服务器发送到FCM很容易,它可以处理iOS,Android和Web的其余部分。 我将在本文中跳过设置。 您可以按照精心编写的设置指南,将Firebase添加到您的项目中。 您可以通过Firebase控制台或应用服务器连接到Firebase Cloud Messaging。 Firebase控制台非常简单,但这是手动工作。 我将在这篇文章中介绍应用服务器。 通过FCM发送通知的方式有三种 。 您可以将通知发送到一个设备或设备组或主题 。 我想向特定用户的所有设备发送通知,并且我不想存储令牌。 在这里,我将跳过仅将通知发送到一种设备的方式。 设备组也用于将一个用户的所有设备分组。 这样,您可以将通知发送到一个用户的所有设备。 因此,它们两个都需要存储令牌。 如果您需要将每个用户的消息发送到多个设备,Firebase建议使用设备组。 但是正如我所说,我不想存储令牌。 因此,我将只关注本文中的主题。 如果您更喜欢存储令牌并进行处理,则可以使用其他两种方式。 什么是主题 ? 主题基于发布/订阅模型。 每个设备可以订阅不同的主题。 服务器向主题发送请求。 FCM处理休息,所有订阅的设备都收到通知。 这样简单而强大的方法。 但是,作为每项服务,它都有优点和缺点。 主题未针对快速交付进行优化。 因此,发送通知和接收通知之间可能会有延迟。 主题针对吞吐量进行了优化。 现实生活场景 我们有一个微服务,当它接收到事件时会创建推送有效载荷。 我们可爱的推送程序不了解客户端设备,也没有任何存储空间。 当基础系统上发生新事件时,它将得到通知。 然后,它将通知发送到移动平台。 我们的推送程序将HTPP请求发送到FCM。 您可以在此处了解有关FCM的服务器实现的更多信息。 我们的基本请求结构如下: https://fcm.googleapis.com/fcm/send 内容类型:application / json 授权:key = SERVER_API_KEY { “ condition”:“主题中的“ condition1”和主题中的“ condition2””, […]

使用Firebase的iOS应用开发面向初学者

使用Pring开发iOS应用 本文是针对尚未在Firebase上进行开发的开发人员的。 我将尽可能详细地解释这项工作,以便Android开发人员和Web开发人员可以立即开始。 https://github.com/1amageek/Pring 开发环境 macOS High Sierra Xcode 9.4 斯威夫特4 iOS 11 创建一个Xcode项目并准备Firebase 让我们创建一个新的Xcode项目 首先,启动Xcode。 让我们做一个新项目。 在这里,选择Master-Detail App。 请在产品名称中输入项目的名称。 我命名为Firebase Sample。 这是非常重要的,因为捆绑包标识符是从组织标识符生成的。 如果您有域,请使用它。 请关闭一次Xcode项目。 使用Cocoapods安装Firebase SDK 请使用Terminal移至项目目录。 在项目目录中执行以下命令。 荚初始化 如果生成Podfile ,则表示成功。 如果遇到错误,请安装Cocoapods。 https://cocoapods.org/ 编辑您的Podfile 平台:ios,“ 11.0” 目标“ Firebase示例” use_frameworks! 吊舱“ Pring” 结束 保存您的Podfile并执行以下命令 吊舱安装 如果显示如下,则表示成功。 更多文件将添加到项目目录。 创建一个名为Firebase Sample.xcworkspace的文件。 打开这个 请确认Pods已添加到项目中,如下所示。 Firebase SDK安装到此结束。 准备Firebase 我安装了Firebase […]