使用Flutter通过MongoDB Atlas和Firebase Cloud Message创建通知功能

我想要实现的目标。

我想在Flutter应用程序(Android)中添加通知功能!应该怎么做?
如果使用Firebase Cloud Message(简称FCM),应该可以实现!
虽然我正在使用MongoDB Atlas作为云服务器,但是能实现吗?
有协作功能,应该很容易实现!还有文档可以参考…
噢,但是这被视为不推荐的选择,并且到2024年将完全停止支持。

那么就试试使用MongoDB的触发器吧!因为对于不太了解服务器端的我来说,这一点有些困难,所以我总结一下。

首先准备

除了这个问题以外,其他的问题我会简单地跳过。而且,我默认有服务器数据等。

第一步:

 

准备好Firebase项目。

第二步:
将Firebase Admin SDK添加到MongoDB Atlas中。在Triggers的Add Dependencies按钮中添加firebase-admin。

第三步:
从Firebase项目中获取projectId、clientEmail和privateKey。虽然还有一种方法是将文件放置在这里,但是由于自己能力有限,所以准备通过将数据直接粘贴到输出的json文件中来实施。

第四步:
在Flutter中初始化Firebase,然后在需要使用的任意时间将生成的令牌放置在所需的集合文档中。

第五步:
完成以上步骤后,在MongoDB Atlas的Triggers中使用Add Trigger来实施触发器。

马上执行

Untitle33d.png

触发代码

exports = async function(changeEvent) {
  // データベースからデータ取得
  const serviceName = 'Cluster';
  const database = 'Database';
  const collection = context.services.get(serviceName).db(database).collection('Collection');

  // ObjectID型でIDを取得
  const docId = changeEvent.documentKey._id;
  console.log(docId);
  
  // デバイスに登録されたトークンを使うのでデバイスを取得
  const device = await collection.findOne({ _id: docId});
  
  // FCMの初期化
  const admin = require('firebase-admin');
  admin.initializeApp({
    credential: admin.credential.cert({
      projectId: 'ProjectID',
      clientEmail: 'ClientEmail',
      privateKey: ('PrivateKey').replace(/\\n/g, '\n'),
    }),
  });

  // コレクションのドキュメントからデータを取得
  const token = device.token;
  console.log(token);

  // 通知に送るメッセージ
  const message = {
    notification: {
      body: '通知のメッセージ',
      title: '通知のタイトル'
    },
    token: token
  };
  
  // メッセージを送信し、そのレスポンスを処理する
  admin.messaging().send(message)
    .then((response) => {
      // Response is a message ID string.
      console.log('Successfully sent message:', response);
    })
    .catch((error) => {
      console.log('Error sending message:', error);
    });
};

请根据下面的解释,对它们进行相应的更改,因为现在的情况无法进行操作。

简单解释

我希望将任意的字符串进行更改。

数据库集合集群,请将其更改为适用于每个MongoDB Atlas的名称。

ProjectID, ClientEmail, PrivateKey这些可以通过从Firebase下载Json文件获得。
作为方法,您可以从Firebase控制台中,
转到设置 -> 项目设置 -> 云消息传递 -> 管理服务帐户,然后显示帐户,
然后转到密钥管理 -> 添加密钥,下载Json文件,并将其应用于上述三个选项。

请将通知的标题和通知内容设为需要跳过的内容!

非常参考

将其根据属性、实现位置和服务进行分类。

MongoDB 是一种开源的、面向文档型数据库管理系统。

Push Notifications [Deprecated]
非推奨ですが、Atlasで簡単にFCM連携する方法が載ってる公式ドキュメントです。

Push Notifications Using Atlas App Services & iOS Realm SDK
AtlasのTriggerのコードがメインで乗ってます。FCMのあたりは詳しく乗ってないです。

MongoDB Stitch の Triggers / Functions で気軽に始めるサーバレス生活
AtlasのTriggerやFunctionについて詳しく書いてあって理解がはかどります。

Firebase : 云端平台

Flutter で Firebase Cloud Messaging クライアント アプリを設定する
FlutterでFirebaseのサーバーでFCMを使う方法が載っています。トークンを生成するあたりが参考になります。

サーバーに Firebase Admin SDK を追加する
MongoDB AtlasにFirebase Admin SDKを追加するときに参考になったり。

[messaging] TypeError: Value is not an object: undefined
Firebase Admin SDKのバージョン関連でエラーが出るのでその参考になります。

bannerAds