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

How to use custom sound in notifitcation ionic 3 one signal?

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

这是我的 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>

我哪里错了?

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

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

我的声音文件是 alert.wav,并将其放在“src/assets/audio”下(我创建了音频文件夹)

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

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

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

Android8 要求您创建一个通知channel/category。您可以在 OneSignal 设置中创建组和类别。 在类别设置 - 声音部分,设置为 'Custom' 并添加文件名(不带文件扩展名) - 在我的例子中为 alert。其他一切都可以保留为默认值。

我还发现,如果你编辑它,它似乎被忽略了。所以在测试不同的声音文件时我不得不创建一个新的类别。我建议进行测试,删除类别并创建一个新类别以确保 - 不要费心编辑它。使用此频道发送通知后,频道将在用户设备上创建,不能 removed/edited - 用户必须 uninstall/reinstall 应用程序。

我通过后端服务器触发了通知,这是 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 我发现也有帮助。

希望对您有所帮助!

使用此代码:

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

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

'android_sound' => 'alert'

有效