android 通知负载中的 FCM,event_time

Posted

技术标签:

【中文标题】android 通知负载中的 FCM,event_time【英文标题】:FCM in android notification payload , event_time 【发布时间】:2020-04-20 22:19:48 【问题描述】:

我想在我运行这个 http 函数 5 分钟后推送通知。从通知的 jsaon 中删除 event_time 我将收到现在有时间线的推送通知,但如果我硬编码 event_time 时间将显示自纪元时间以来的 50 年前,事件我将 999 放在这一年增加 2 年。我一点也不明白。然后在 google 和 firebase 中找到 Timestapm 格式,因此使用它,并且 android 在解析 json 有效负载时出错,说不能很好地处理某些内容。有任何想法格式化 Zulu RC399 时间格式吗?


pp.get('/sendCloudMessageReminderActivation', async (req, res) => 
    const x = req.query.userUID;
    const xstr = String(x);
    const zxcv = admin.firestore().collection('user').doc(xstr);
    const xoxo = await zxcv.get();
    var today = new Date();
    // today.setHours(today.getHours()+1);
    today.setHours(today.getHours()+8);
    // today.setFullYear(today.getFullYear()+50);
    var xoxocode;
    console.log(today+'saya saya sebelum cagbge');

    // today =  ISODateString(today);
    const timestamp = admin.firestore.Timestamp.fromDate(today);
    console.log(timestamp.nanoseconds +'siniiiiiiiiiiiiiiiiiiiii');






    if (xoxo!==null) 

        xoxocode= await xoxo.data().cloudMessagingToken;
        const message = 
            notification: 
                title: 'your account is still in active state',
                body: 'Tap here to check it out!'
            ,
            android:
                priority:'high',
                // important : 'MAX',
                notification:
                    notification_priority: "PRIORITY_MAX",
                    event_time: timestamp,// when ever i cahnge this event use ZULU RC339 format i still give my 50 year ago notification. i did my research but cant figure out how to do this ,
                    default_sound: true,

                    // notification_priority: PRIORITY_MAX
                
            ,
            token: xoxocode
          ;


        // res.status(200).send('authorized');

        const respondfrommesage = admin.messaging().send(message);
        console.log(respondfrommesage);


        res.status(200).send('message send notification');


    

    res.end();


  );

【问题讨论】:

你解决问题了吗? 不,我没有,我取消了这个功能,因为它只是我的 FYP 项目,我的时间有限,但将来会使用这个 FMC 功能。 我向 Firebase 报告了这个问题,他们复制了它并计划修复它,但他们无法为此提供任何时间表。 【参考方案1】:

Zulu 不是时间格式。这是time zone。 Zulu 只是 UTC 的另一个名称。

据此article:

UTC 时间的另一个名称是“Zulu”或“Z 时间”。

现在,关于时间戳值。如果您正在创建 Date 对象并使用日期的 millisecondsnanoseconds 属性,它将始终为您提供相应属性类型(磨机/纳米)的差异,

从您创建实例的那一刻起,starting time of UNIX 即为1 January 1970

截至1st Jan, 2020,它一直是50 years。因此,event_time 中的50 年份差异。

如果您有任何其他疑问,请告诉我。

【讨论】:

好吧,我对那个 Zulu 时区的错误,只是阅读它 Zulu 有 0000 时间格式,我使用马来西亚或新加坡的 0080 时间格式正确,但在 even_time 字段中,我也尝试过:event_time: “2020-01-01T23:00:00Z”,但仍然得到 19-01-1970,实际上 android 是如何计算的? 我在使用 python firebase admin 时遇到了同样的问题,并且还从 google playground 发送了通知。我认为这可能是一个 android 问题

以上是关于android 通知负载中的 FCM,event_time的主要内容,如果未能解决你的问题,请参考以下文章

iOS FCM 推送通知数据负载

FCM颤振启用通知振动

如何使用 FCM 向 iOS 发送通知?

Web推送FCM,通知中的标签

Amazon SNS GCM/FCM 消息负载

Firebase FCM - 为啥会收到:有效负载错误,无效的“android”(或“apns”)属性