📜  Firebase Firestore的设置和配置(1)

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

Firebase Firestore的设置和配置

Firebase Firestore是一种云托管的非关系型数据库,它可以帮助开发者在iOS、Android和Web等平台上快速构建应用。本文将介绍如何设置和配置Firebase Firestore。

前置条件

在开始配置Firebase Firestore之前,您需要先完成以下步骤:

  1. 创建一个Firebase项目并在其中添加您的应用。
  2. 在您的应用中集成Firebase SDK。
  3. 将您的应用与Firebase项目绑定。

如果您还没有完成这些步骤,请参阅Firebase的开始指南

安装Firebase Firestore

要在您的应用中使用Firebase Firestore,您需要先安装Firestore SDK。以下是安装步骤:

  1. 在您的应用中添加Firestore依赖。如果您使用的是Gradle,则可以使用以下依赖项:

    implementation 'com.google.firebase:firebase-firestore:22.0.0'
    
  2. 初始化Firestore。在您的应用启动时,您需要初始化Firestore客户端。在Java中,您可以通过以下代码完成初始化:

    FirebaseFirestore db = FirebaseFirestore.getInstance();
    

    这将创建一个Firestore客户端实例,您可以使用该实例与Firestore服务进行通信。

数据库结构

Firestore是一种基于文档和集合的数据库。文档是键值对存储的数据,集合是文档的容器。以下是一个Firestore数据库的示例:

users (集合)
  └── user-id-1 (文档)
      ├── name: "John"
      ├── age: 25
      └── email: "john@example.com"
  └── user-id-2 (文档)
      ├── name: "Jane"
      ├── age: 30
      └── email: "jane@example.com"

在这个示例中,users是一个集合,其中包含两个文档:user-id-1user-id-2

数据读写

在Firestore中,您可以使用CollectionReferenceDocumentReference来访问集合和文档。以下是一个简单的例子:

// 获取users集合
CollectionReference usersRef = db.collection("users");

// 获取user-id-1文档
DocumentReference userRef = usersRef.document("user-id-1");

// 读取文档数据
userRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
    @Override
    public void onComplete(@NonNull Task<DocumentSnapshot> task) {
        if (task.isSuccessful()) {
            DocumentSnapshot document = task.getResult();
            if (document.exists()) {
                // 文档存在,读取数据
                String name = document.getString("name");
                int age = document.getLong("age").intValue();
                String email = document.getString("email");
            } else {
                // 文档不存在
            }
        } else {
            // 出现错误
        }
    }
});

// 写入/更新文档数据
Map<String, Object> data = new HashMap<>();
data.put("name", "John");
data.put("age", 25);
data.put("email", "john@example.com");

userRef.set(data).addOnSuccessListener(new OnSuccessListener<Void>() {
    @Override
    public void onSuccess(Void aVoid) {
        // 写入/更新成功
    }
}).addOnFailureListener(new OnFailureListener() {
    @Override
    public void onFailure(@NonNull Exception e) {
        // 写入/更新失败
    }
});

在这个例子中,我们首先获取了users集合和user-id-1文档的引用。然后,我们使用get()方法读取文档数据,并使用set()方法写入/更新文档数据。

监听数据变化

Firestore提供了实时更新数据的功能。您可以使用addSnapshotListener()方法订阅数据更改,并在数据更改时自动获取最新的数据。以下是一个例子:

// 订阅users集合中的所有文档更改
usersRef.addSnapshotListener(new EventListener<QuerySnapshot>() {
    @Override
    public void onEvent(@Nullable QuerySnapshot snapshot, @Nullable FirebaseFirestoreException e) {
        if (e != null) {
            // 出现错误
            return;
        }

        for (DocumentChange dc : snapshot.getDocumentChanges()) {
            switch (dc.getType()) {
                case ADDED:
                    // 新文档添加到集合
                    DocumentSnapshot document = dc.getDocument();
                    String name = document.getString("name");
                    int age = document.getLong("age").intValue();
                    String email = document.getString("email");
                    break;
                case MODIFIED:
                    // 文档被修改
                    break;
                case REMOVED:
                    // 文档被删除
                    break;
            }
        }
    }
});

在这个例子中,我们使用addSnapshotListener()方法订阅users集合中的所有文档更改,并在数据更改时自动获取最新的数据。

安全规则

要保护Firestore数据库的安全性,您需要使用安全规则来定义哪些用户可以读取和写入数据库中的数据。以下是一个简单的例子:

service cloud.firestore {
  match /databases/{database}/documents {
    match /users/{userId} {
      allow read, write: if request.auth.uid == userId;
    }
  }
}

在这个例子中,我们定义了一个规则,只允许具有相应用户ID的用户读取和写入users集合中的文档。

总结

Firebase Firestore是一个强大的非关系型数据库,可以帮助开发者构建跨平台应用。本文介绍了如何设置和配置Firestore,以及如何在应用中读取、写入和监视数据。另外,我们还讨论了如何使用安全规则保护数据库的安全性。如果您希望深入了解Firestore,请查看Firebase的官方文档