web-dev-qa-db-ja.com

Android Firebase Notificationのカスタムサウンドはありません

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

};
8
kurtko

最後に解決策を見つけました。 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

};

1
kurtko

ドキュメント から、通知オブジェクトのサウンドを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'
};
1
Nainal

Firebase Consoleからサウンドを有効にしてみてください

詳細については、この回答をご覧ください

https://stackoverflow.com/a/44304089/902412

これが問題になる可能性があります。また、サウンド要素の「.mp3」を削除して、次のようにします

"sound":"mySound"
0

多分これは役立ちます:私の場合、上記のアプローチを試してみましたが、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にサウンドを設定します

幸運を !

0
Dan Riza

私も同じ問題に直面していました。私は常にデフォルトのサウンドを取得しましたが、次のように修正しました。 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ファイルで試したことがないようです(ただし、オーディオ形式と関係があるかどうかは疑問ですが、試してみてください)

0
fist ace