Firebase Push通知をAndroidアプリで使用しています。カスタムアイコンで正しく通知を送信できますが、カスタムサウンドを再生できませんでした。常にデバイスのデフォルトサウンドを取得します。
{
"registration_ids": "myToken",
"notification": {
"body": "my body",
"title": "my title",
"icon": "ic_notification",
"sound": "mysound.mp3" // I tried "mysound", "mysound.wav"...
},
"priority": "high"
}
カスタムサウンドは/ res/rawにあります
onMessageReceived
とFirebaseデータメッセージでカスタムサウンドを再生できましたただし、Firebase通知メッセージではありません。
My AndroidデバイスはXiaomi Mi A1およびOreo 8.1です。また、Xiaomi Mi A2でも同じ結果が得られました。
Node.jsを使用してphpとcurlを試しました...常に同じ問題があり、デフォルトのサウンドが得られます。
[〜#〜] update [〜#〜]
Node.jsのこのコードでは次のいずれでも機能しません。
var registrationToken = 'xxxxxx';
var message = {
notification: {
title: 'my title',
body: 'my body',
},
Android: {
ttl: 3600 * 1000,
notification: {
color: '#ff0000',
sound: 'mysound.mp3'
}
},
token: registrationToken
};
最後に解決策を見つけました。 Android 8.0以降では、アプリで通知チャンネルを作成する必要があります。
NotificationChannel channel = new NotificationChannel('my_id', name, importance);
(詳細: https://developer.Android.com/training/notify-user/channels#Java )
次に、通知を送信すると:
var registrationToken = 'xxxxxx';
var message = {
notification: {
title: 'my title',
body: 'my body',
},
Android: {
ttl: 3600 * 1000,
notification: {
color: '#ff0000',
sound: 'mysound.mp3',
channel_id: 'my_id' // important to get custom sound
}
},
token: registrationToken
};
ドキュメント から、通知オブジェクトのサウンドをAndroidオブジェクト。サウンド値にサウンドファイルの名前を指定します。サウンドファイルは/ res/raw /。以下はNode.jsの例です:-
var message = {
notification: {
title: 'sample title',
body: 'Hello, its Tuesday.',
},
Android: {
ttl: 3600 * 1000,
notification: {
icon: 'my_icon',
color: '#f45342',
sound: 'filename.mp3',
},
},
apns: {
payload: {
aps: {
badge: 42,
},
},
},
topic: 'industry-tech'
};
Firebase Consoleからサウンドを有効にしてみてください
詳細については、この回答をご覧ください
https://stackoverflow.com/a/44304089/902412
これが問題になる可能性があります。また、サウンド要素の「.mp3」を削除して、次のようにします
"sound":"mySound"
多分これは役立ちます:私の場合、上記のアプローチを試してみましたが、onMessageReceived(デバッグ目的)でチャネルIDをチェックインするたびに機能しませんでした
Log.e(TAG, "Message Notification channel id: " + remoteMessage.getNotification().getChannelId());
常に「null」になりました。
ここからドキュメントを読む https://firebase.google.com/docs/cloud-messaging/http-server-ref#notification-payload-support
私はjsonのチャンネルIDに間違ったキーを使用していたことがわかりました。
「channel_id」キーの代わりに、このような「Android_channel_id」キーを使用してみてください
"notification": {
"body": "Body of Your Notification",
"title": "Title of Your Notification",
"Android_channel_id": "channelId",
"icon": "myIcon"
}
期待どおりに動作するように使用すると、カスタムサウンド(res/rawから)が再生されます
PS:私の場合、作成時にchannelIdにサウンドを設定します
幸運を !
私も同じ問題に直面していました。私は常にデフォルトのサウンドを取得しましたが、次のように修正しました。 FCM-Push(ノードモジュール)を使用しています https://www.npmjs.com/package/fcm-Push
var message = {
to : device_token,
collapse_key : '<insert-collapse-key>',
// data : {
// '<random-data-key1>' : '<random-data-value1>',
// '<random-data-key2>' : '<random-data-value2>'
// },
notification : {
title : 'Title ',
body : 'some Body',
sound : 'notification' // my .ogg file in /res/raw
},
Android: {
sound: 'notification' // my .ogg file name in /res/raw
}
};
私はmp3またはwavで試したことはありませんが、あなたの質問では.oggファイルで試したことがないようです(ただし、オーディオ形式と関係があるかどうかは疑問ですが、試してみてください)