Flutter 应用程序的 Firebase 通知突然停止

标签 firebase flutter firebase-realtime-database push-notification

我正在尝试将 FCM 集成到我的 flutter 应用程序中。我已经完成了 android 和 iOS 的所有连接设置。当我在云消息测试通知功能的帮助下发送通知时,通知在设备中正确接收。
我编写了一个函数脚本,它在给定时间自动发送通知。当我在大约 2 周前部署该功能时,它起作用了 差不多 正如预期的那样。 的客户正在收到他们应该收到的通知。但是,过去几天通知已完全停止到达客户端。
我在 firebase 控制台中的功能登录表明通知已发送,但报告显示我的用户没有收到通知。
我确信我编写有效负载的方式有问题。
这是我的代码

exports.sendFollowerNotification = functions.database.ref('/notifications/{notificationID}')
.onCreate(async (snapshot, context) => {
  const notificationID = context.params.notificationID;
  const notificationData = snapshot.val();

  const getDeviceTokensPromise = admin.database()
    .ref('/DeviceTokens').orderByChild("subscribed").equalTo("1").once('value');


  //list all tokens in a array
  let tokensSnapshot;
  let tokens;

  const results = await Promise.all([getDeviceTokensPromise]);
  tokensSnapshot = results[0];
  if (!tokensSnapshot.hasChildren()) {
    return console.log('There are no notification tokens to send to.');
  }
  console.log('There are', tokensSnapshot.numChildren(), 'tokens to send notifications to.');

  tokens = Object.keys(tokensSnapshot.val());

  const payload = {
    notification: {
      body: notificationData.body,
      title: notificationData.title,
      click_action: 'FLUTTER_NOTIFICATION_CLICK'
    },
    data: {
      id: '1', 
      status: 'done'
    },
  };

  //loop through each element in the /DeviceTokens node and get data for each entry with the 
 getTheTokens function.
  for (var tokenDetails in tokens) {
    getTheTokens(tokens[tokenDetails]);
  }

 //getTheTokens function
 function getTheTokens() {
    var refKey = admin.database().ref('/DeviceTokens').child(tokens[tokenDetails]);
    refKey.once('value', (snapshot) => {
      var theToken = snapshot.child('/device_token').val();
      try {
        const response = admin.messaging().sendToDevice(theToken, payload);

       // gives proper feedback to console.
       console.log('Notification sent successfully');
      } catch (err) {
        console.log(err);
      }
    });
 }
});
我正在使用实时数据库,其中针对连接到系统的任何设备保存了设备 token 。我有一个文件叫做 设备 token .我还有一个文件 通知 通知的存储位置。
当在 中生成条目时通知 ,该函数应该识别出这一点,然后遍历所有设备 token 并将该通知发送到所有订阅通知的设备。
我的 firebase 控制台日志打印 通知发送成功 DeviceTokens 中存在的设备 token 的数量。但是在函数执行后显示错误。
 sendFollowerNotification
 Error: Error while making request: Client network socket disconnected before secure TLS connection was established. 
 Error code: ECONNRESET at FirebaseAppError.FirebaseError [as constructor (/workspace/node_modules/firebase-admin/lib/utils/error.js:42:28) 
 at FirebaseAppError.PrefixedFirebaseError [as constructor] (/workspace/node_modules/firebase-admin/lib/utils/error.js:88:28) 
 at new FirebaseAppError (/workspace/node_modules/firebase-admin/lib/utils/error.js:123:28)
 at /workspace/node_modules/firebase-admin/lib/utils/api-request.js:209:19 
 at process._tickCallback (internal/process/next_tick.js:68:7) 
sendFollowerNotification
Error: Process exited with code 16
at process.on.code (/layers/google.nodejs.functions-framework/functions-framework/node_modules/@google-cloud/functions-framework/build/src/invoker.js:271:38)
at process.emit (events.js:198:13)
at process.EventEmitter.emit (domain.js:448:20)
at process.exit (internal/process/per_thread.js:168:15)
at Object.logAndSendError (/layers/google.nodejs.functions-framework/functions-framework/node_modules/@google-cloud/functions-framework/build/src/logger.js:37:9)
at process.on.err (/layers/google.nodejs.functions-framework/functions-framework/node_modules/@google-cloud/functions-framework/build/src/invoker.js:268:22)
at process.emit (events.js:198:13)
at process.EventEmitter.emit (domain.js:448:20)
at emitPromiseRejectionWarnings (internal/process/promises.js:140:18)
at process._tickCallback (internal/process/next_tick.js:69:34) 
我该如何解决这个问题?

最佳答案

小提示:
如果它有助于您的情况,请查看 Firebase 存储库以了解如何处理通知 https://github.com/firebase/functions-samples/blob/master/fcm-notifications/functions/index.js

关于Flutter 应用程序的 Firebase 通知突然停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64549505/

相关文章:

angularjs - Firebase 和 AngularJS 中的基本查询

java - 为什么我无法从 Visual Studio Code 终端运行 'java' 等命令?

dictionary - 不断向 map 添加数据

android - 从子节点跳转到 Firebase 父节点

java - 更改 ListView 项的颜色

angularjs - ionic 火力基地。获取当前用户

ios - Firebase 加载快照问题

javascript - 是否可以只从 Firebase 检索 key 列表?

dart - Android Manifest com.apptreesoftware.barcodescan中 Unresolved Flutter软件包

java - 如何从当前登录的用户 Firebase、Android 中检索值