Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将channelId添加到通知中?_Javascript_Google Cloud Functions_Firebase Cloud Messaging_Firebase Admin - Fatal编程技术网

Javascript 如何将channelId添加到通知中?

Javascript 如何将channelId添加到通知中?,javascript,google-cloud-functions,firebase-cloud-messaging,firebase-admin,Javascript,Google Cloud Functions,Firebase Cloud Messaging,Firebase Admin,我编写了一个云函数,用于向特定设备发送云消息 export const onGroupInvitationCreate = functions.region('europe-west1').firestore.document('users/{userId}/userGroupInvitations/{invitationId}').onCreate(async (handler, context) => { const invitation = GroupInvitationM

我编写了一个云函数,用于向特定设备发送云消息

export const onGroupInvitationCreate = functions.region('europe-west1').firestore.document('users/{userId}/userGroupInvitations/{invitationId}').onCreate(async (handler, context) => {

    const invitation = GroupInvitationModel.fromFirestoreDocumentData(handler);

    const documentList = await userCollection.doc(invitation.receiverId).collection('userDeviceData')
    .listDocuments();

    const futureDocuments = [];

    for(const documentReference of documentList)
        futureDocuments.push(documentReference.get());

    const deviceDatas = (await Promise.all(futureDocuments)).map(deviceData => DeviceDataModel.fromFirestoreDocumentData(deviceData));

    const futureNotifications = [];

    for(const deviceData of deviceDatas)
    {
        const translator = deviceData.language !== 'nl' ? languages.en : languages.nl;

        const payload: admin.messaging.MessagingPayload = {
            // notification: {
            //     title: `${translator['invitationTitle' as keyof typeof translator]}`,
            //     body: `${invitation.senderDisplayName} ${translator['invitationBody' as keyof typeof translator]} ${invitation.groupDisplayName}`,
            //     clickAction: 'FLUTTER_NOTIFICATION_CLICK',
            // },            
            data: {
                title: `${translator['invitationTitle' as keyof typeof translator]}`,
                body: `${invitation.senderDisplayName} ${translator['invitationBody' as keyof typeof translator]} ${invitation.groupDisplayName}`,
                clickAction: 'FLUTTER_NOTIFICATION_CLICK',
                senderId: invitation.senderId,
                senderDisplayName: invitation.senderDisplayName,
                type: 'invitation',
                sentAt: new Date().toISOString(),
            }
        }

        futureNotifications.push(messaging.sendToDevice(deviceData.cloudMessagingToken, payload));
    }

    await Promise.all(futureNotifications).catch((error) => console.error(`There was an error while notifying receiver ${invitation.receiverId}`, error));

    return Promise.resolve('Status 200');
});
我如何提供channelId?我正在使用

messaging.sendToDevice();
它接受注册令牌、有效负载和选项。我注意到没有一个具有属性通道ID

AndroidConfig
确实有一个属性channelId,但我在发送通知时找不到如何使用它

这就是sendToDevice将其作为参数的内容

sendToDevice(
  registrationToken: string | string[],
  payload: admin.messaging.MessagingPayload,
  options?: admin.messaging.MessagingOptions
): Promise<admin.messaging.MessagingDevicesResponse>;
sendToDevice(
registrationToken:string | string[],
有效负载:admin.messaging.MessagingPayload,
选项?:admin.messaging.MessagingOptions
):承诺;

您需要在
MessagingPayload
通知
部分传递
android\u频道id
属性。请参阅中的表2b,以获取遗留FCM API接受的所有Android相关选项的完整列表


如果您希望使用
AndroidConfig
,必须首先迁移到新的FCM API(即
send()
方法)。

您需要在
MessagingPayload
通知
部分传递
安卓频道id
属性。请参阅中的表2b,以获取遗留FCM API接受的所有Android相关选项的完整列表


如果您希望使用
AndroidConfig
,必须首先迁移到新的FCM API(即
send()
方法)。

多亏@Hiranya Jayathilaka,我以以下方式设置了它,他的答案是正确的

 const message: TokenMessage = {
        token: deviceData.cloudMessagingToken,
        data: {
            title: `${translator['messageTitle' as keyof typeof translator]} ${group.displayName}`,
            body: `${sender.displayName} ${translator[type as keyof typeof translator]}`,
            clickAction: 'FLUTTER_NOTIFICATION_CLICK',
            senderId: sender.id,
            senderDisplayName: sender.displayName,
            groupId: group.id,
            type: 'groupMessage',
            messageType: type,
            sentAt: new Date().toISOString(),
        },
        android: {
            priority: 'high',
            notification: {
                channelId: '59054',
            }
        }
    }

    console.log(message);
    console.log('notification sent');

    futureNotifications.push(messaging.send(message));

多亏了@Hiranya Jayathilaka,我按照以下方式设置了它,他的答案是正确的

 const message: TokenMessage = {
        token: deviceData.cloudMessagingToken,
        data: {
            title: `${translator['messageTitle' as keyof typeof translator]} ${group.displayName}`,
            body: `${sender.displayName} ${translator[type as keyof typeof translator]}`,
            clickAction: 'FLUTTER_NOTIFICATION_CLICK',
            senderId: sender.id,
            senderDisplayName: sender.displayName,
            groupId: group.id,
            type: 'groupMessage',
            messageType: type,
            sentAt: new Date().toISOString(),
        },
        android: {
            priority: 'high',
            notification: {
                channelId: '59054',
            }
        }
    }

    console.log(message);
    console.log('notification sent');

    futureNotifications.push(messaging.send(message));

是的,这是正确的答案!我为未来的读者添加了一个代码片段,如果你想把它放在你的答案中,我将删除我的答案。是的,这是正确的答案!我为将来的读者添加了一个代码片段,如果你想把它放在你的答案中,我将删除我的答案。