网站首页 > 技术文章 正文
最近在开发项目中有使用到 firebase ,在这里记录一下开发心得。
firebase 是谷歌推出的云产品,官方对其的定义是:Firebase是谷歌的移动平台,可以帮助您快速开发高质量的应用程序,并发展您的业务。
我在使用过程中的理解是:Firebase 是一个谷歌推出的 “低后端代码“ 开发平台,帮助开发者减少后端代码编写量。
firebase 主要包含 Authentication、Firestore、 Realtime Database、storage、hosting、functions 、plugins以及机器学习等模块
Authentication
大多数应用都需要了解用户的身份。了解用户的身份可以让应用将用户数据安全地保存在云端,并在用户的所有设备上为其提供一致的个性化体验。
Firebase 身份验证提供了后端服务、易用的 SDK 以及现成的界面库,以便向您的应用验证用户的身份。该功能支持通过密码、电话号码、主流联合身份提供商服务(如 Google、Facebook 和 Twitter 等)进行身份验证。
说简单点就是一套集成了手机号登录、邮箱登录、第三方登录的无需后端代码即可调用的 sdk
Firestore
Cloud Firestore 是一种灵活且可扩缩的数据库(类似于键值型存储数据库),适用于在 Firebase 和 Google Cloud Platform 上进行移动、Web 和服务器开发。与 Firebase Realtime Database 一样,它可以通过实时侦听器使您的数据在各个客户端应用之间保持同步,并为移动和 Web 应用提供离线支持,以帮助您构建无论网络延迟时间或互联网连接状况如何都能快速响应的应用。Cloud Firestore 还提供与其他 Firebase 和 Google Cloud 产品(包括 Cloud Functions)的无缝集成。
Realtime Database
Firebase 实时数据库允许从客户端代码中直接安全地访问数据库,得益于此,您能够构建功能丰富的协作式应用。数据会永久性地保留在客户端,即使处于离线状态,实时事件仍会继续触发,给最终用户提供良好的即时性体验。当设备重新连接到网络时,实时数据库会将本地数据变化与客户端离线期间发生的远程更新同步,自动合并任何不一致的数据。
实时数据库提供灵活的基于表达式的规则语言(称为“Firebase 实时数据库安全规则”),可以定义您的数据结构以及何时可以读取或写入数据。当与 Firebase 身份验证集成时,开发者可以定义什么人可以访问什么数据以及如何访问数据。
实时数据库是一种 NoSQL 数据库,因此具有不同于关系型数据库的优化方向和功能特点。Realtime Database API 的设计只支持可以快速执行的操作。这使您能够构建实时性更强的体验,即使服务数百万的用户,响应速度也丝毫不受影响。因此,请务必认真考虑用户需要如何访问您的数据,以便相应地设计数据结构。
Stroage
Cloud Storage 可存储图像、视频和音频等文件,以及其他用户生成的内容。可以理解为 OSS
Hosting
Firebase 托管可托管您的网站的 HTML、CSS 和 JavaScript 资源以及由开发者提供的其他资源(如图形、字体和图标)。可以理解为虚拟主机
Plugins
插件模块主要是提供一些 应用程序中常用的功能,如 发送邮件、短信验证码等等
Functions
云函数,主要是执行一些需要后端处理的逻辑代码,托管在 Google 服务器,在您编写并部署函数后,Google 的服务器会立即开始管理函数。您可以使用 HTTP 请求直接触发函数,或者,如果触发的是后台函数,Google 的服务器会侦听事件并在函数被触发时运行函数。
Google 会随着负载的增加或减少而做出响应,迅速调节运行函数所需的虚拟服务器实例的数量。每个函数都拥有自己的配置,会在自己的环境中单独运行。
开发
实际开发过程中使用较多的是数据库和云函数模块,可以根据对应的开发文档引入 sdk,调用即可,官方文档
主要记录
国内开发者可能无法直接访问谷歌服务,配置 VPN 后,浏览器可以访问,通过 vs code 访问 firebase API 时会出现超时的问题,最可能出现在部署云函数时操作超时。
主要解决方法如下(适用于 nodejs 项目):
寻找 项目目录内 node_modules 下 @request/request.js 查找并替换如下代码片段
if (!self.hasOwnProperty('proxy')) {
//self.proxy = getProxyFromURI(self.uri)
self.proxy = '127.0.0.1:7890' // 端口号为你的代理端口,无需 http 前缀
}
安装完 firebase sdk 的 npm 包后,找到所在包的文件 node_modules\firebase-tools\lib\apiv2.js ,查找并替换如下内容
function proxyURIFromEnv() {
return 'http://127.0.0.1:7890' // 端口号为你的代理端口,需要携带 http 前缀
return (process.env.HTTPS_PROXY ||
process.env.https_proxy ||
process.env.HTTP_PROXY ||
process.env.http_proxy ||
undefined);
}
猜你喜欢
- 2024-09-20 Serverless单体架构的崛起(serverless 架构)
- 2024-09-20 树莓派驱动的物联网滴灌系统(基于树莓派的物联网系统)
- 2024-09-20 骁龙855也能打鸡血?高通:正式下放GPU驱动更新功能
- 2024-09-20 移动应用后端应该使用 AWS 还是 Firebase?
- 2024-09-20 分享一批shopify店铺(shopifyinc)
- 1514℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 568℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 510℃MySQL service启动脚本浅析(r12笔记第59天)
- 486℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 485℃启用MySQL查询缓存(mysql8.0查询缓存)
- 467℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 446℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 444℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- c语言min函数头文件 (68)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)