如何在Flutter Android应用程序中发送推送通知?

3

我开发了一个Flutter Android应用,我的数据库是MongoDB。 我使用Node.js API将我的Flutter应用程序与MongoDB连接起来。 当有新的数据记录到达MongoDB时,我想发送推送通知。我该如何做?

1个回答

7
最简单的方法是使用Firebase Cloud Messaging。特别是因为Google正在废弃之前用于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);
  });

如果您正在发送大量的通知,还可以为设备创建主题以进行订阅。更多示例再次在文档中给出。现在,如果您想知道下一步是什么标记,请继续阅读。
4. 标记来自连接到您平台的唯一设备。您可以通过安装Firebase Messaging SDK(从https://pub.dev/packages/firebase_messaging)并按照说明添加必要的依赖项以及正确配置Android清单和iOS文件来获取标记。
这个包将为您提供抓取通信并接收您从Node.JS服务器发送的通知的方法。
以下是在Flutter中从前端抓取设备标记的示例。
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数据库,并使用免费的云消息服务将服务器上的通知推送到您的设备。


我们能否直接从Flutter发送通知,而不需要自己的服务器或Firebase?我的意思是如果我们将令牌保存到数据库中并使用PHP发送通知,或者使用Flutter本身发送通知。我不想托管服务器或Firebase自己的数据库。 - Roxx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接