📌  相关文章
📜  Firebase实时数据库(1)

📅  最后修改于: 2023-12-03 15:00:45.973000             🧑  作者: Mango

Firebase 实时数据库

Firebase 实时数据库是一款云端的 NoSQL 数据库,它可以让开发者很方便地构建基于实时数据的应用程序。Firebase 实时数据库是基于云端的,并且可以提供实时的同步,所以可以保证客户端和数据库的数据的同步。此外,Firebase 实时数据库有一个非常简单易用的 API,开发者可以很快上手并操作它。

相关特性
实时 数据库

Firebase 实时数据库是一种实时数据库,可以让开发者很方便地构建实时数据应用程序。当数据更新时,Firebase 实时数据库可以立即通知所有客户端。这意味着,可以很容易地在你的应用中构建实时聊天、协作、游戏和其他应用。

客户端安全

Firebase 实时数据库提供了一种灵活的安全规则系统,它可以限制客户端访问数据库的权限。开发者可以使用 Firebase 安全规则语言来编写规则,该语言基于 JSON,并提供多种安全规则类型,可以自定义授权控制。

离线支持

Firebase 实时数据库提供了离线支持,即使应用在没有网络连接的情况下也可以读取和写入数据。当设备重新连接到互联网时,Firebase 实时数据库会自动将离线数据同步到云端。

集成性

Firebase 实时数据库可以与其他 Firebase 产品集成,包括 Firebase Storage 、Firebase Authentication、Firebase Cloud Messaging、Firebase Remote Config 等。此外,Firebase 实时数据库还可以与 Google Analytics 集成,以便收集并分析应用程序的数据。

数据库结构

Firebase 实时数据库以树形结构组织数据,其中每个节点都是一种 JSON 值。节点可以是简单的值,如字符串、数字、布尔值和 null,也可以是 JSON 对象或数组。

节点

每个节点都有一个唯一的路径,该路径从数据库根节点开始,描述了要访问的节点的位置。节点路径是一种字符串类型的值,由节点的名字组成,多层节点之间以“/”分隔。例如,下面的 JSON 数据中,“users”节点下有两个子节点,“alanisawesome”和“gracehop”:

{
  "users": {
    "alanisawesome": {
      "name": "Alan Turing",
      "email": "alan@turing.com",
      "phoneNumber": "1234567890"
    },
    "gracehop": {
      "name": "Grace Hopper",
      "email": "grace@hopper.com",
      "phoneNumber": "0987654321"
    }
  }
}

“users/alanisawesome”节点的值为:

{
  "name": "Alan Turing",
  "email": "alan@turing.com",
  "phoneNumber": "1234567890"
}
数据类型

Firebase 实时数据库支持以下数据类型:

  • String:字符串类型
  • Number:数字类型
  • Boolean:布尔类型
  • Null:空类型
  • Object:对象类型
  • Array:数组类型
对象和数组

JSON 对象是由一组键值对组成的无序集合。每个键值对有一个名称(字符串类型)和一个值(任意 JSON 值)。JSON 数组是一组有序的值。

对象示例:

{
  "name": "Alan Turing",
  "email": "alan@turing.com",
  "phoneNumbers": {
    "home": "1234567890",
    "work": "0987654321"
  }
}

数组示例:

{
  "users": [
    {
      "name": "Alan Turing",
      "email": "alan@turing.com",
      "phoneNumber": "1234567890"
    },
    {
      "name": "Grace Hopper",
      "email": "grace@hopper.com",
      "phoneNumber": "0987654321"
    }
  ]
}
实时同步

Firebase 实时数据库允许客户端通过监听来实时接收更改通知。开发者可以使用 on() 方法来监听在特定节点上的更改,当该节点数据更新时,客户端将立即收到通知。

监听数据更改

开发者可以使用 on() 方法来监听数据更改:

firebase.database().ref('/users/alanisawesome').on('value', (snapshot) => {
  const data = snapshot.val();
  console.log(data);
});

以上代码将在“users/alanisawesome”节点上添加值监听器。当该节点的值更改时,将打印新值。

写入数据

开发者可以使用 set() 方法在数据库中写入数据:

firebase.database().ref('/users/alanisawesome').set({
  name: 'Alan Turing',
  email: 'alan@turing.com',
  phoneNumber: '1234567890'
});

以上代码将在“users/alanisawesome”节点写入一个新值。

安全规则

Firebase 实时数据库提供了一种非常灵活的安全规则系统,可以限制客户端访问数据库的权限。安全规则基于 JSON 格式,可以使用 Firebase 安全规则语言来编写,包括多种安全规则类型和自定义授权控制。

简单的安全规则

以下是一个简单的安全规则示例,它允许任何用户读取数据,但对写入数据库的数据进行限制:

{
  "rules": {
    ".read": true,
    ".write": "auth != null"
  }
}

以上规则允许任何人读取数据,但只有登录用户可以写入数据。

复杂的安全规则

如果应用程序需要更复杂的授权控制,可以使用 Firebase 安全规则语言进行自定义。以下是一个复杂的规则示例,它允许管理员角色的用户读写数据,但只允许普通用户读取数据:

{
  "rules": {
    "users": {
      ".read": "auth != null",
      ".write": "auth.token.admin == true",
      "$uid": {
        ".read": "auth != null && ($uid == auth.uid || auth.token.admin == true)",
        ".write": "auth != null && ($uid == auth.uid || auth.token.admin == true)"
      }
    }
  }
}

以上规则中,“users”节点可以由任何已登录用户读取,但只有 Firebase Auth 管理员可以写入数据。每个用户的节点只能由该用户本人或管理员读写。

Firebase SDK

Firebase 实时数据库可以使用 Firebase SDK 进行访问。Firebase SDK 是一组前端库,提供了开发用于构建基于云的应用程序所需的功能。

安装 Firebase SDK

安装 Firebase SDK 非常简单。只需将以下代码添加到 HTML 文件的 head 标签中:

<script src="https://www.gstatic.com/firebasejs/8.6.5/firebase-app.js"></script>
<script src="https://www.gstatic.com/firebasejs/8.6.5/firebase-database.js"></script>
<script src="https://www.gstatic.com/firebasejs/8.6.5/firebase-auth.js"></script>

然后,使用以下代码初始化 Firebase SDK:

const firebaseConfig = {
  apiKey: 'apiKey',
  authDomain: 'projectId.firebaseapp.com',
  databaseURL: 'https://databaseName.firebaseio.com',
  projectId: 'projectId',
  storageBucket: 'bucket.appspot.com',
  messagingSenderId: 'senderId',
  appId: 'appId',
  measurementId: 'G-measurement-id',
};

firebase.initializeApp(firebaseConfig);
结论

Firebase 实时数据库是一款优秀的云端 NoSQL 数据库,可方便地构建实时数据应用程序。它提供了实时同步、客户端安全、离线支持等功能,并且具有非常灵活的安全规则系统。通过使用 Firebase SDK,开发者可以很容易实现与 Firebase 实时数据库的集成。