web-dev-qa-db-ja.com

androidでfirebaseから通知を送信するときに通知音が鳴らない

FirebaseからAndroidアプリケーションにプッシュ通知を送信しています。しかし、私のアプリがバックグラウンドにある場合、ベースの代わりにonMessageReceivedメソッドが呼び出されず、システムに通知を表示するためにシステムに通知を送信します。システムトレイに通知が表示されますが、システム設定でアプリの通知音を許可していても、通知音は鳴りません。

firebaseから通知を受信したときに通知音を再生するためにできること。

これが、Firebaseからアプリに通知を送信する方法です Blogpostリンク

Androidアプリケーションにfirebaseを追加する方法

58
Hammad Tariq

通知の通知ペイロードには、サウンドキーがあります。

公式ドキュメントから、その使用法は次のとおりです。

デバイスが通知を受け取ったときに再生するサウンドを示します。デフォルトまたはアプリにバンドルされているサウンドリソースのファイル名をサポートします。サウンドファイルは/ res/raw /に存在する必要があります。

例えば:

{
    "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",

    "notification" : {
      "body" : "great match!",
      "title" : "Portugal vs. Denmark",
      "icon" : "myicon",
      "sound" : "mySound"
    }
  }

デバイスのデフォルトのサウンドを使用する場合は、"sound": "default"を使用する必要があります。

ペイロードのすべての可能なキーについては、次のリンクを参照してください。 https://firebase.google.com/docs/cloud-messaging/http-server-ref#notification-payload-support

アプリがバックグラウンドにあるとき、firebaseが通知を異なる方法で処理することを知らない人のために。この場合、onMessageReceived関数は呼び出されません。

アプリがバックグラウンドにあるとき、Androidは通知メッセージをシステムトレイに送ります。ユーザーが通知をタップすると、デフォルトでアプリランチャーが開きます。これには、通知とデータペイロードの両方を含むメッセージが含まれます。これらの場合、通知はデバイスのシステムトレイに配信され、データペイロードはランチャーアクティビティのインテントの追加で配信されます。

84
Isj

adavaced options selectadvanced optionswhenメッセージを書く、および音声を選択するactivatedchoose activated

これは私の解決策です

22
KongJing

これを試して

{
    "to" : "DEVICE-TOKEN",

    "notification" : {
      "body"  : "NOTIFICATION BODY",
      "title" : "NOTIFICATION TITILE",
      "sound" : "default"
    }
  }

カスタム通知音の@note:-> "sound" : "MyCustomeSound.wav"

11
Sameer

onMessageReceivedメソッドは、アプリがフォアグラウンドにあるか、通知ペイロードにデータ型のみが含まれている場合にのみ起動されます。

Firebase docs から

ダウンストリームメッセージングの場合、FCMは2種類のペイロードを提供します:notificationおよびdata

notification typeの場合、FCMはクライアントアプリに代わってメッセージをエンドユーザーデバイスに自動的に表示します。通知には、ユーザーに表示されるキーの定義済みセットがあります。
dataタイプの場合、クライアントアプリはデータメッセージの処理を担当します。データメッセージには、カスタムキーと値のペアのみがあります。

通知を使用必要な場合FCMが処理するクライアントアプリに代わって通知を表示します。 データを使用必要なときにメッセージを処理処理するアプリ Androidクライアントアプリでメッセージを表示または処理する場合、またはメッセージを送信する場合直接FCM接続がある場合のiOSデバイス。

さらに下に docs

アプリの動作通知とデータペイロードの両方を含むメッセージを受信するときは、アプリがバックグラウンドにあるかフォアグラウンドにあるかによって異なります。基本的に、受信時にアクティブであるかどうかです。
バックグラウンドのとき、アプリは通知トレイで通知ペイロードを受信し、ユーザーが通知をタップしたときにのみデータペイロードを処理します。
フォアグラウンドの場合の場合、アプリは両方のペイロードが利用可能なメッセージオブジェクトを受け取ります。

Firebaseコンソールを使用して通知を送信する場合、ペイロードには常に通知タイプが含まれます。 Firebase APIを使用して、通知ペイロードのデータ型のみで通知を送信する必要があります。これにより、新しい通知が受信されたときにアプリに常に通知され、アプリが通知ペイロードを処理できます。

従来の方法を使用してアプリがバックグラウンドにあるときに通知音を再生する場合は、通知ペイロードに soundパラメーターを追加 する必要があります。

9
Renjith

こうする

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {

    //codes..,.,,

    Uri sound= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
        builder.setSound(sound);

}
3
AAA

HTTP v1 APIでは異なる

ドキュメント

例:

{
 "message":{
    "topic":"news",
    "notification":{
       "body":"Very good news",
       "title":"Good news"
    },
    "Android":{
       "notification":{
          "body":"Very good news",
          "title":"Good news",
          "sound":"default"
       }
    }
  }
}
3
Andrey

これを試して....

  public  void buildPushNotification(Context ctx, String content, int icon, CharSequence text, boolean silent) {
    Intent intent = new Intent(ctx, Activity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    PendingIntent pendingIntent = PendingIntent.getActivity(ctx, 1410, intent, PendingIntent.FLAG_ONE_SHOT);

    Bitmap bm = BitmapFactory.decodeResource(ctx.getResources(), //large drawable);

    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(ctx)
            .setSmallIcon(icon)
            .setLargeIcon(bm)
            .setContentTitle(content)
            .setContentText(text)
            .setAutoCancel(true)
            .setContentIntent(pendingIntent);

    if(!silent)
       notificationBuilder.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION));

 NotificationManager notificationManager = (NotificationManager) ctx.getSystemService(Context.NOTIFICATION_SERVICE);

        notificationManager.notify(1410, notificationBuilder.build());
    }

onMessageReceivedで呼び出します

 @Override
public void onMessageReceived(RemoteMessage remoteMessage) {


    Log.d("Msg", "Message received [" + remoteMessage.getNotification().getBody() + "]");

    buildPushNotification(/*your param*/);
}

または KongJing に従ってください。彼の言うとおりですが、Firebase Consoleを使用することもできます。

1
chry

Firebaseコンソールから送信しても、通知音を再生できます。そのためには、事前にオプション「key」に値「default」を追加する必要があります。

0
Saeed Sharman