【问题标题】:How to send push notifications in Flutter android app?如何在 Flutter android 应用程序中发送推送通知?
【发布时间】:2020-07-12 10:48:37
【问题描述】:

我开发了一个 flutter android 应用。我的数据库是 MongoDB。我使用 Node.js API 将我的颤振应用程序与 MongoDB 连接起来。我想在有新数据记录进入 MongoDB 时发送推送通知。我该怎么做?

【问题讨论】:

    标签: node.js mongodb flutter push-notification


    【解决方案1】:

    最简单的方法是使用 Firebase 云消息传递。特别是因为谷歌正在弃用以前用于 Android 的 GCM。 Firebase 云消息传递也是免费的,可用于 iOS 和 Android。不过,Apple 的 APN 服务也需要设置和付费开发者帐户。

    1. 如果您尚未创建 Firebase 项目并启用云消息传递。

    2. 设置您的 Node.js 服务器,以便它可以向您的 android 和 IOS 设备发送推送通知。单击项目概述、设置和服务帐户,然后按照说明为您的项目生成私钥并按照设置说明进行操作。还有 npm install "firebase-admin"。

    3. 一旦您设置了 Firebase,请参阅这些文档以了解如何发送消息。 https://firebase.google.com/docs/cloud-messaging/send-message

    有几种发送消息的方法。您可以直接发送消息。

    使用此代码

    // This registration token comes from the client FCM SDKs.
    var registrationToken = 'YOUR_REGISTRATION_TOKEN';
    
    var message = {
      data: {
        score: '850',
        time: '2:45'
      },
      token: registrationToken
    };
    
    // Send a message to the device corresponding to the provided
    // registration 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);
      });
    

    如果您要发送大量通知,您也可以为设备创建订阅主题。文档中再次提供了更多示例。现在,如果您想知道令牌是什么,那就是下一步。

    1. 令牌来自连接到您平台的唯一设备。您可以通过从 https://pub.dev/packages/firebase_messaging 安装 Firebase Messaging sdk 并按照说明将必要的依赖项添加到您的 pubsec.yaml 并正确配置您的 Android 清单和 iOS 文件以进行更改来获取令牌。

    此包将为您提供获取通信和接收您从 Node.JS 服务器发送的通知的方法。

    这是一个在前端从您的设备中抓取令牌的示例。

    final FirebaseMessaging _firebaseMessaging = FirebaseMessaging();
      bool _initialized = false;
    
    
    
         Future<void> init() async {
            if (!_initialized) {
              // For iOS request permission first.
              _firebaseMessaging.requestNotificationPermissions();
              _firebaseMessaging.configure(onMessage: (Map<String, dynamic> `enter        code here`message) {
        print('onMessage: $message');
        Platform.isAndroid
            ? showNotification(message['notification'])
            : showNotification(message['aps']['alert']);
        return;
      }, onResume: (Map<String, dynamic> message) {
        print('onResume: $message');
        return;
      }, onLaunch: (Map<String, dynamic> message) {
        print('onLaunch: $message');
        return;
      });
    
          // For testing purposes print the Firebase Messaging token
          String token = await _firebaseMessaging.getToken();
          print("FirebaseMessaging token: $token");
    
          _initialized = true;
        }
      }
    

    此时,您很可能会将令牌保存到 MongoDB 数据库并将令牌与您的用户和特定设备相关联。当然,您还必须安装 firebase 核心和 Flutter 并进行所有必要的配置。

    您仍然可以维护您的 NodeJS API 和 MongoDB 数据库,并使用免费的云消息服务将您的服务器通知推送到您的设备。

    【讨论】:

    • 我们不能在没有自己的服务器或 Firebase 的情况下直接从颤振发送通知吗?我的意思是,如果我们将令牌保存到数据库并使用 php 发送通知或使用颤振本身发送通知。我不想托管服务器或 firebase 自己的数据库。
    猜你喜欢
    • 2019-09-11
    • 2019-06-10
    • 1970-01-01
    • 1970-01-01
    • 2022-11-24
    • 1970-01-01
    • 1970-01-01
    • 2021-08-19
    • 1970-01-01
    相关资源
    最近更新 更多