如何在通知 ionic 3 onesignal 中使用自定义声音?

Posted

技术标签:

【中文标题】如何在通知 ionic 3 onesignal 中使用自定义声音?【英文标题】:How to use custom sound in notifitcation ionic 3 one signal? 【发布时间】:2018-12-14 23:59:37 【问题描述】:

我正在使用 Onesignal 在我的应用程序 ionic 中推送通知,但自定义声音没有响起。

这里是我的 app.component:

setupNotification() 
this.oneSignal.startInit('xxxxxxxxxx-xxxx-xxxxxxxxxxx-xxxxxxxx', 'xxxxxxxxxxxx');
this.oneSignal.inFocusDisplaying(this.oneSignal.OSInFocusDisplayOption.InAppAlert);
this.oneSignal.handleNotificationReceived().subscribe(data => 
  data.payload.sound = 'coins.mp3'
);
this.oneSignal.handleNotificationOpened().subscribe(() => 
  // do something when a notification is opened
);
this.oneSignal.endInit();

这里是我的 config.xml:

<platform name="android">
    <resource-file src="res/raw/coins.mp3" target="res/raw/coins.mp3" />
</platform>

我哪里出错了?

【问题讨论】:

【参考方案1】:

我刚刚通过 OneSignal 成功地在我的 Ionic3 应用程序上运行此功能,并在 Android 8.0 上进行了测试。所以也许这可以帮助某人。 我还更新到 Cordova 9,并将 onesignal-cordova-plugin 更新到 2.4.7

我在这里还假设您已经有通知工作,只是自定义声音文件不起作用。

我的声音文件是alert.wav,放在'src/assets/audio`下(我创建了audio文件夹)

config.xml 中,我必须添加以下内容才能将此文件复制到正确的位置:

&lt;resource-file src="www/assets/audio/alert.wav" target="app/src/main/res/raw/alert.wav" /&gt;

(音频目录将在构建时复制到www 目录)

Android 8 要求您创建通知渠道/类别。您可以在 OneSignal 设置中创建组和类别。 在类别设置 - 声音部分,设置为“自定义”并添加文件名(不带文件扩展名) - 在我的情况下为 alert。其他一切都可以保留为默认值。

我还发现,如果你编辑它,它似乎被忽略了。所以我在测试不同的声音文件时必须创建一个新的类别。我建议进行测试,删除类别并创建一个新类别以确保 - 不要打扰编辑它。使用此频道发送通知后,该频道将在用户设备上创建,并且无法删除/编辑 - 用户必须卸载/重新安装应用程序。

我通过我的后端服务器触发了通知,这是 php

        $request = json_encode([
            'app_id' => 'xxxxxxxxxxxxxxxxxxxxxx',
            'headings' => [
                'en' => $title,
            ],
            'contents' => [
                'en' => $message,
            ],
            'include_player_ids' => $playerIds,
            'android_channel_id' => 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee',
//            'android_sound' => 'alert',
        ]);

确保将新频道 ID 从 OneSignal 复制到此请求负载中。

最终不需要 'android_sound' 值,因为它会触发通道默认设置(具有音频文件名),并且更改 android_sound 值没有效果。

不幸的是,您需要为每个要播放的声音文件创建一个类别,这可能不适合某些用例 - 用户将在他们的应用通知设置中看到这些频道。

我在测试时建议的其他一些事情是在每次构建之前卸载应用程序以测试特定更改,并运行 cordova clean 我发现也有帮助。

希望这会有所帮助!

【讨论】:

很好的答案。刚刚在 config.xml 和 android_channel_id 和 android_sound 在后端消息中添加了这个 配置。无需在前端添加 android_channel_id 就可以了【参考方案2】:

使用此代码:

<resource-file src="www/assets/audio/alert.wav"target="app/src/main/res/raw/alert.wav" />

将声音文件移动到 onesignal 插件使用的位置 添加此以发送代码:

'android_sound' => 'alert'

成功了

【讨论】:

以上是关于如何在通知 ionic 3 onesignal 中使用自定义声音?的主要内容,如果未能解决你的问题,请参考以下文章

Ionic3 OneSignal 如何检查应用程序是不是由于通知打开事件而启动

OneSignal如何向ionic2中的特定用户发送推送通知

Ionic 5 电容器:使用 ONESIGNAL 的推送通知在 iOS 上不起作用

Ionic 3 与 OneSignal 不兼容吗?

Onesignal,Ionic App:单击通知时打开特定视图不起作用

如何使用带有 onesignal 的通知徽章?