Xamarin 交叉通知自定义声音

Xamarin cross notification custom sound

我正在使用

跨平台应用程序的 Xamarin + firebase 通知

需要

更改默认通知声音

期待

声音改变了,即使应用程序很冷。这意味着我会为这个应用程序的通知分配不同的语气

编码
根本不需要编写任何代码来播放声音或触发 on notofication recieved 事件


当前结果
我只用 IOS 就成功了,但用 Android 就失败了。
现在,即使应用程序关闭,我也可以收到带有自定义声音的通知,而无需为此编写任何代码


我的代码
对于 IOS
1- 将此行添加到通知负载
“声音”:“test.wav”
只有扩展名为
的声音名称 2- 将 test.wav 添加到资源下的 IOS 项目作为“BundleResource”或“嵌入式资源”
3- 发送通知,根本不关心“NotificationRecieved”事件
4- 终止应用程序,并发送通知
5- 收到自定义声音通知“test.wav”
6- IOS 仅接受“wav”或“caf”文件

对于Android
对“wav”文件重复相同的操作,但进行一些更改,例如:
1- 将声音文件添加到 Resources/raw 作为 AndroidResource For Project.Droid
2- 尝试将有效负载更改为:
“声音”:“test.wav”
“声音”:“测试”
“声音”:“raw/test.wav”
“声音”:“raw/test”
但是从来没有成功播放声音

问题
我确定 ("sound": "test.wav") 格式有问题。
我测试了有无扩展,
我不需要通过编码来处理声音,我想完全按照IOS项目
分配音调
我预计 IOS 比 Android 更难!但最后很容易

有什么帮助吗?

对于Android,您应该在NotificationChannel

中设置声音
var channel = new NotificationChannel(CHANNEL_ID, "FCM Notifications", NotificationImportance.Default)
                          {
                              Description = "Firebase Cloud Messages appear in this channel"
                          };
var audioattributes = new AudioAttributes.Builder();
audioattributes.SetContentType(AudioContentType.Music);
audioattributes.SetUsage(AudioUsageKind.Notification);
channel.SetSound(global::Android.Net.Uri.Parse("android.resource://" + this.ApplicationContext.PackageName + "/raw/app_sound"), audioattributes.Build());

注意:如果您设置了它,请卸载该应用程序以更改声音设置,查看这些link了解更多详情。

终于解决了

对于那些遇到同样问题的人,我会post解决方案。

对于IOS,只能按我之前说的传声音文件名。

对于Android,是comples。我注意到该应用程序对所有在后台模式下收到、关闭或终止应用程序的通知使用默认系统声音。

我进入应用程序设置,然后我找到了一个用于此类通知的频道名称“杂项”。

想法是如何改变这个频道的声音?

如果您创建同名频道,将无法使用,因为您必须使用频道名称 + 频道 ID。

我搜索并最终找到默认频道 ID,即“fcm_fallback_notification_channel”。

第二步是用这个名称和id创建一个频道,希望覆盖系统。

我在应用程序中使用以下代码创建了这个频道:

var importance = NotificationImportance.High;
var soundFileName = "sound";

NotificationChannel chan = new NotificationChannel("fcm_fallback_notification_channel", "Miscellaneous", importance);
chan.EnableVibration(true);
chan.LockscreenVisibility = NotificationVisibility.Public;
chan.SetSound(Android.Net.Uri.Parse("android.resource://com.myapp.test/raw/" + soundFileName), null);

NotificationManager notificationManager = (NotificationManager)GetSystemService(NotificationService);
notificationManager.CreateNotificationChannel(chan);

它按预期工作:)

现在即使应用程序关闭、终止或处于后台模式,我也可以通过自定义声音接收通知。

没想到我终于可以做到了。

谢谢大家。

希望这对某人有所帮助。