flutter-openMessaging

此项目仅作为使用 Flutter 移动应用程序作为 Genesys Cloud 的 openMessaging 中间件的 Firebase BaaS 客户端的示例。此存储库是中间件的客户端部分,我还创建了另一个存储库,它是用 Firebase/JavaScript 项目编写的服务器端。此示例要求您具备 Firebase 和 Flutter 的经验。在开始此项目之前,我建议先完成中间件的服务器端,可以在 此处 找到。

1. Flutter & Firebase 设置

首先,请确保您已安装并设置了 Flutter,以及用于模拟器的 Android Studio。此示例将不介绍这些步骤,相关详情可在 Flutter 网站上找到。您还将使用在上一个包含服务器端元素的项目中完成的 Firebase 项目设置。

以下是设计概览,重点关注移动应用方面。

2. Firebase 身份验证

请确保在 Firebase 中已将 Google 设置为身份验证的“提供商”,因为这是此 Flutter 示例应用程序正在使用的。您可以使用其他提供商,但那样的话,您需要更新 Dart 代码以反映此更改。

3. Firebase Firestore

在 Firebase firestore 中创建一个名为“collection”的集合

users

您将在下面看到的其他“文档”会在用户通过应用进行身份验证并开始发送消息时自动创建。使用 Firestore 可让您控制加载的历史缓存,从而实现比最长 72 小时更长的线程时间,并且在数据加载和离线查看方面,它已由 Firebase 设计为可扩展的,同时还允许多个客户端“订阅”更改,而无需使用 websockets。这一切都由 Firebase SDK 处理,可以大大减轻大规模构建的痛苦。

在数据库的“规则”中,请确保设置以下选项以确保其安全性。以下配置将只允许拥有有效令牌的用户根据其 UUID 访问用户的消息。

rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
    match /users/{userId}/messages/{document=**} {
    allow read, write: if
        request.auth != null && request.auth.uid == userId
    }
    match /users/{userId}/profile/{document=**} {
        allow read, write: if
            request.auth != null && request.auth.uid == userId
    }
}
}

4. Firebase Storage

如果您希望移动应用程序能够发送图片,则需要为附件允许一个存储位置。为此,我使用的是 Girestore Storage,它底层是一个 GCP Bucket。创建文件夹时,请确保其名为

uploads/

在根目录下。这是应用在设计中会查找的内容。对于“规则”,请确保已配置以下内容。

rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
    match /{allPaths=**} {
    allow read, write: if request.auth != null;
    }
}
}

5. Firebase Functions

如果您先完成了服务器端项目,您应该会注意到您的 Firebase 项目中已经有两个 Cloud Functions。

由于这些函数部署在同一个项目中,因此它们被视为受信任的服务器端函数,因此 GCP/Firebase 会为您处理身份验证。

6. Firebase Cloud Messaging

请确保已启用并配置 Firebase Cloud Messaging,以便即使在应用关闭时也能收到推送通知。为此,使用的是 API (V1)。

7. 项目设置

为您的项目创建一个“Android”应用。为此,您需要生成 SHA 密钥(256 和 1)。您可以在此处找到有关如何执行此操作的详细信息:此处。在我的示例中,我还创建了一个 HTML 应用,用于在 Web 上运行该应用,但您只需为您计划使用的平台执行此操作即可。完成此操作后,您需要下载 json 文件。“包名”设置为“com.example.open_messaging”,因为这与 Flutter 应用程序中的设置相同。

google-services.json

现在您已经拥有了包含您的环境连接详细信息的 json 文件,您需要将其粘贴到目录中

/open_messaging/app/

8. Flutter 应用

现在您可以构建 Android APK 并运行该应用。

登录屏幕

账户选择

用法

通知

即使应用完全关闭,您也可以收到通知。

9. Agent Restart

我没有包含此代码,但您可以有一个 Cloud Function 作为“Agentless Message”API,允许您构建一个简单的基于 Agent 的 UI,以便 Agent 可以在对话断开后“重新启动”对话,而不是等待客户通过移动应用回复。

这是上述示例的一个简单扩展,如果需要,我可能会在未来将该示例代码添加到另一个存储库中。

GitHub

查看 Github