如何收集特定令牌以向特定设备发送推送通知

Posted

技术标签:

【中文标题】如何收集特定令牌以向特定设备发送推送通知【英文标题】:How to gather specific tokens to send push notifications to specific devices 【发布时间】:2020-10-20 06:12:44 【问题描述】:

这是我过滤用户联系人的地方,我这样做只是为了获取用户的联系人,如果他们创建了一个帐户,那么他们将显示在您的屏幕上。 (还有更多内容,但这只是为了更直观)

 List<PhonesContacts> phoneContacts = snapshot.data;
              List myContacts = [];
              
              for (var j = 0; j < phoneContacts.length; j++) 
                myContacts.contains(phoneContacts[j])
                 ? null
                 : myContacts.add(phoneContacts[j]);

              

My Question: 我是否需要在后端(云功能)中执行相同的操作来过滤用户的令牌,以便我只能将通知发送给您的联系人?或者有没有办法可以从前端到后端进行通信?这样我就可以将 myContacts 数组发送到后端,然后我只需要过滤令牌。

这是我为云功能所做的事情,我知道我目前拥有的东西可以获取每个人的令牌并向每个人的设备发送通知。再说一遍,问题是,如何只向仅显示在您的屏幕上的用户发送通知(这是您的联系人,因为我在前端过滤了他们)

import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';
admin.initializeApp();

const db = admin.firestore();
const fcm = admin.messaging();


export const sendToDevice = functions.firestore
  .document('stat/statId')
  .onUpdate(async change => 


   const data = change.after.data();

   const currentUser = await db 
      .collection("profile")   
      .doc(data.uid)         
      .get();

   const name = currentUser.get("name");

   const querySnapshot = await db
      .collection('tokens')
      .get();
    
   /* Somewhere here I would access their contacts and filter it, then get their tokens and put it in the array OR if I can, I would just send the already filtered contacts I did in the front end, then just put the tokens in the array */

    const tokens = querySnapshot.docs.map(snap => snap.data().token);


    const payload: admin.messaging.MessagingPayload = 
      notification: 
        title: name,
        body: data.stat,
        click_action: 'FLUTTER_NOTIFICATION_CLICK'
      ,
      data: 
         click_action: 'FLUTTER_NOTIFICATION_CLICK',
         title: name,
         body: data.stat
      
    ;

    return fcm.sendToDevice(tokens, payload);
  );

【问题讨论】:

我无法理解问题所在。 我添加了question 部分@DougStevenson 我不知道你所说的“过滤后端的联系人”是什么意思。你还没有说过任何关于你的代币收集有用的事情。 好吧,我正在使用flutter包pub.dev/packages/contacts_service#-readme-tab-在我的应用程序中,我已经过滤了用户的联系人,这意味着只有他们的联系人会显示在主屏幕上(如果他们创建了一个帐户) .我问我是否必须在后端再做一次,然后过滤令牌,如果没有,那么我可以通过从前端到后端的通信以某种方式做到这一点吗? 【参考方案1】:

我找到了一个包,它实际上允许您从前端到后端进行通信。使用cloud_functions flutter 包https://pub.dev/packages/cloud_functions

【讨论】:

以上是关于如何收集特定令牌以向特定设备发送推送通知的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 中使用 Google Firebase 向特定用户发送推送通知?

使用 AWS SNS 向特定 APNS 令牌发送推送通知

FCM - 通过设备令牌和环境/组发送 android 推送通知

如何使用 Azure 在 Windows Phone 8 中为特定设备发送推送通知

设置 AWS SNS 以向 iOS 设备发送推送通知

是否可以将 Firebase 推送通知发送到特定令牌以及主题