简介
基础使用
- 使用 CLI 工具: https://firebase.google.com/docs/cli
- 可通过命令行控制 firebase 项目资源
1 | # 安装 |
- NPM依赖说明
- firebase-admin: 用于服务端(如Node.js)操作 Firebase 数据库, 如设置安全规则, 创建索引等
- firebase: 用于客户端(如浏览器)操作 Firebase 数据库, 如读写数据, 监听数据变化等
Firestore数据库
管理配置
- 安全规则
- resource.data: 现有文档数据
- request.resource.data: 请求中的数据
- 索引
- 筛选+排序只有一个字段会自动索引 (Firestore 自动为每个字段维护单字段索引)
- 多字段 == 或 in 筛选会自动走单字段索引, 如果有范围比较(大于, 小于等)获排序则需要创建复合索引
- 不指定排序时, 默认按文档 ID 升序
- 也可以设置按文档 ID 降序排列, 此时也不需要额外索引, 如
query.orderBy(FieldPath.documentId, descending: true);
- 筛选+排序有多个字段,需要手动创建复合索引:a,b 和 a,b,c 两种查询需要创建 2 个索引
- 字段排序方式不同,需要创建不同的索引:a asc, b asc 和 a desc, b asc 两种查询需要创建 2 个索引
- 需要把过滤范围比较大的字段放在索引组合的前面,减少过滤数据量
- 无 orderBy 时:索引字段顺序与查询 where 顺序无关
- 有 orderBy 时:索引字段顺序必须「过滤字段在前,排序字段按 orderBy 顺序在后」,且排序方向要匹配
- 范围过滤时:范围字段必须放在所有 isEqualTo 字段之后,且一个查询仅能有一个范围字段 ???
- 索引排序: 升序效率高,如果业务上要求数据降序排列则只能创建降序索引
增删查改(Flutter版)
- 查询
- 索引规则参考上文
- 查询最多只能对一个字段进行范围查询(如时间, 此时就不能过滤年龄区间)
- 报错:
[cloud_firestore/invalid-argument] Client specified an invalid argument. Note that this differs from failed-precondition. invalid-argument indicates arguments that are problematic regardless of the state of the system (e.g., an invalid field name).- 如果查询中包含一个范围查询字段,则此字段必须处于 orderBy 子句中的第一个字段,否则可能报错
- isNotEqualTo/whereNotIn(flutter) 等不能和 orderBy 联用,否则可能报错。将
!=改成> or <
1 | QuerySnapshot snapshot = await firestore.collection("users").where('userId', isEqualTo: userId).get(); |
- 新增
1 | // 新增时使用系统自动生成文档ID(非自增) |
- 日期处理
1 | // 转换日期为 Timestamp 格式. 否则新增可能报超时异常 |
Functions
1 | # 管理员登录 |
- 调试
1 | # 在上述 firebase 项目根目录执行启动调试 |
- index.js 案例
1 | // 引入Firebase Functions模块,用于创建云函数 |
Flutter版使用
WEB版使用
Firebase帐号注册
- 可通过google账户登录,选择免费版,新建一个项目
- 点击
Authentication-登录方法- 启用Google登录 - 点击
overview-将 Firebase 添加到您的网页应用- 复制代码供下面使用
下载web版示例
- quickstart-js
- 该文件中包含了auth验证、database数据库、storage存储、messaging消息等示例
- 找到database/index.html,将上文复制的代码放到head中
为开发运行本地Web服务器
- 安装firebase命令行工具:
npm install -g firebase-tools(重新运行安装命令,可更新此工具) - cmd进入到上文的database文件夹
- 启动服务器
firebase serve - 访问:
http://localhost:5000 - 点击登录,就会自动调用google登录验证api
- 该示例登录进入可书写博文,数据可在控制面板的
Database中查看
部署应用
最终可在控制面板的Hosting中查看
- 启动一个新的命令行,cmd进入到上文的database文件夹
- 登录Google并授权
firebase login 初始化应用
firebase init,运行后确认 - 选择Hosting - 选择创建的项目,创建根目录(默认会在此目录创建一个public的目作为根目录)- 运行 firebase init 命令会在您的项目的根目录下创建 firebase.json
- 当您初始化应用时,系统将提示您指定用作公共根目录的目录(默认为”public”)。如果您的公共根目录下不存在有效的 index.html 文件,系统将为您创建一个。
如一个firebase.json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37{
// 主机配置(前端静态文件映射)
"hosting": {
"public": "./", // 可以是 vue 的编译目录
"rewrites": [
{
"source": "**",
"destination": "/index.html"
}
],
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**",
"functions"
]
},
// 数据库规则配置
"database": {
"rules": "database.rules.json"
},
// 函数配置
"functions": [
{
"source": "functions",
"codebase": "default",
"disallowLegacyRuntimeConfig": true,
"ignore": [
"node_modules",
".git",
"firebase-debug.log",
"firebase-debug.*.log",
"*.local"
]
}
]
}
部署项目
firebase deploy- 仅部署云函数
firebase deploy --only functions - 仅部署 Hosting
firebase deploy --only hosting对应网址https://项目Id.web.app
- 仅部署云函数
