gpt4 book ai didi

android - Android推送通知的自定义声音不起作用(FCM)

转载 作者:行者123 更新时间:2023-12-03 14:43:07 24 4
gpt4 key购买 nike

我有使用来自云功能的 FCM 的推送通知。这适用于 iOS 和 Android,并显示适当的图标并在 iOS 上播放自定义声音。

除了 Android 的自定义声音外,一切正常,它只是播放默认声音。

我创建了一个文件夹并将我的声音文件添加到其中,如下所示:android\app\src\main\res\raw\mp3_example.mp3
这个 mp3 有 27 秒长。我也尝试过.wav 和.aiff。

我读到我可能必须为更高版本的 Android 创建一个推送通知 channel ,以便它可能与此相关。我尝试创建一个 channel 并使用云功能中的 channel ID,它可以工作,但没有声音,只是振动。

测试设备是运行 Android 8 的 Moto G6。
我在用:
流式细胞仪
Firebase 云函数
ionic 4
电容器
https://github.com/stewwan/capacitor-fcm

云功能:

const notification: admin.messaging.Notification = {
title: title,
body: body
}

const message: admin.messaging.Message = {
notification,
topic: 'QMTBC',
android:{
notification:{
sound: 'mp3_example.mp3',
icon: 'push_logo',
color: '#000000'
}
},
apns:{
payload:{
aps: {
sound: 'gears-short.wav'
}
}
}
}

return admin.messaging().send(message)

app.component.ts
import { FCM } from 'capacitor-fcm';

const fcm = new FCM();
const { PushNotifications } = Plugins;

initializeApp() {
this.platform.ready().then(() => {

PushNotifications.register();

PushNotifications.addListener('registration', (token: PushNotificationToken) => {
console.log('token ' + token.value);
fcm
.subscribeTo({ topic: 'QMTBC' })
.then(r => console.log(`subscribed to topic`))
.catch(err => console.log(err));
});

PushNotifications.addListener('registrationError', (error: any) => {
console.log('error on register ' + JSON.stringify(error));
});

PushNotifications.addListener('pushNotificationReceived', (notification: PushNotification) => {
console.log('notification ' + JSON.stringify(notification));
this.pushNotificationService.notifications.push(notification);
});

PushNotifications.addListener('pushNotificationActionPerformed', (notification: PushNotificationActionPerformed) => {
console.log('notification ' + JSON.stringify(notification));
this.pushNotificationService.notifications.push(notification);
});

fcm.getToken()
.then(r => console.log(`Token ${r.token}`))
.catch(err => console.log(err));
});
}

更新:

我尝试按如下方式创建一个 channel 。
如果我使用 channel ,我只会得到默认声音。如果我没有指定 channel 或不存在的 channel ,我也会获得默认声音(默认 channel )。

云功能:
const message: admin.messaging.Message = {
notification,
topic: 'QMTBC',
android:{
notification:{
sound: 'punch.mp3',
icon: 'push_logo',
color: '#000000',
channelId: 'QMTBC'
}
}

app.component.ts
const channel: PushNotificationChannel = {
description: 'QMTBC',
id : 'QMTBC',
importance: 5,
name : 'QMTBC'
};

PushNotifications.createChannel(channel).then(channelResult => {
console.log(channelResult);
console.log('Channel created');
// PushNotifications.listChannels().then(channels => {
// console.log('Channels');
// console.log(channels);
// });
}, err => {
console.log('Error Creating channel');
console.log(err);
});
});

更新 2:

我可以在我的设备上看到我为应用程序创建的 channel ,它说声音是默认的。我可以手动将其更改为另一个内置的 android 声音,这很有效。但我仍然无法使用我的自定义声音。

更新 3:

如果 Android 版本为 < 8,则自定义声音可以正常工作。仅在模拟器上进行了测试。

最佳答案

@MadMac 这些天我遇到了同样的问题,在阅读了 FCM 文档和 Capacitor Java 代码之后,我明白了。

有必要将可见性设置为 1,将文件放在 res/raw 文件夹中。

PushNotifications.createChannel({
description: 'General Notifications',
id: 'fcm_default_channel',
importance: 5,
lights: true,
name: 'My notification channel',
sound: 'notifications.wav',
vibration: true,
visibility: 1
}).then(()=>{
console.log('push channel created: ');
}).catch(error =>{
console.error('push channel error: ', error);
});

我在我的 firestore 函数中使用此有效负载来发送通知
{
android: {
notification: {
defaultSound: true,
notificationCount: 1,
sound: 'notifications.wav',
channelId: 'fcm_default_channel'
},
ttl: 20000,
collapseKey
},
apns: {
payload: {
aps: {
badge: 1,
sound: 'default'
}
}
},
notification: {
title,
body: message,
},
token: token
};

关于android - Android推送通知的自定义声音不起作用(FCM),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57830367/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com