Android의 Firebase에서 알림을 보낼 때 알림 소리가 나지 않습니다.


83

firebase에서 Android 애플리케이션으로 푸시 알림을 보내고 있습니다. 하지만 내 앱이 백그라운드에있을 때 firebase onMessageReceived 메서드가 호출되지 않고 대신 firebase가 시스템 트레이에 알림을 표시하기 위해 시스템에 알림을 보냅니다. 알림이 시스템 트레이에 나타나지만 시스템 설정에서 내 앱에 대한 알림 소리를 허용 한 경우에도 알림 소리가 나지 않습니다.

firebase에서 알림을받을 때 알림 음을 재생하려면 어떻게해야하나요?

이것이 firebase 에서 내 앱 Blogpost 링크 로 알림을 보내는 방법 입니다.

Android 애플리케이션에 Firebase를 추가하는 방법


1
를 참조하십시오 이 답변 ..
geekoraul

이 앱 알림 설정을 확인해야합니다
maheshmnj

@Developine : 링크가 사라졌습니다 !! (developine.com / ...)
The Anh Nguyen

답변:


114

알림의 알림 페이로드에는 사운드 키가 있습니다.

공식 문서에서 사용은 다음과 같습니다.

장치가 알림을받을 때 재생할 소리를 나타냅니다. 앱에 번들 된 사운드 리소스의 기본값 또는 파일 이름을 지원합니다. 사운드 파일은 / 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는 알림 메시지를 시스템 트레이로 보냅니다. 사용자가 알림을 탭하면 기본적으로 앱 런처가 열립니다. 여기에는 알림 및 데이터 페이로드가 모두 포함 된 메시지가 포함됩니다. 이러한 경우 알림은 기기의 시스템 트레이에 전달되고 데이터 페이로드는 런처 활동의 의도에 따라 추가로 전달됩니다.


23
장치의 기본 사운드를 사용하려면 다음을 사용해야합니다. "sound": "default"
Brian Vo

@TranVo는 "기본값"값이 장치의 기본 사운드를 재생한다는 점을 지적 해 주셔서 감사합니다. 시간을 많이 절약 해 주셨습니다!
Mattia Ruggiero

1
나는 가능한 모든 방법을 시도했지만 내 자신의 톤을 설정하여 기본 사운드 또는 사운드를 얻지 못했으며 이유가 무엇인지 진동을 얻지 못했습니다
santhosh

1
그렇다면 알림 소리를 어떻게 비활성화 할 수 있습니까?
iamatsundere181

1
새 알림 채널 시스템이 이전 장치에서이 API를 폐기 했습니까? 아니면 이전 장치에서도 여전히 작동합니까? Nougat 장치에 사용자 정의 사운드를 표시하려고 시도했지만 "sound"또는 "soundName"에 입력 한 내용에 관계없이 기본 차임 사운드 효과를 얻는 것 같습니다. 나는 운없이 "mysoundeffect.wav"와 "mysoundeffect"를 시도했다.
John Gorenfeld

26

adavaced 옵션 선택 고급 옵션을메시지를 작성 및 사운드를 선택 활성화 활성화 선택

이것은 내 솔루션입니다


@KongJing Android 8 이상에서는 Firebase 콘솔 설정에 관계없이 항상 소리가납니다. 소리를 완전히 방지하는 방법을 알고 있습니까?
두 번 코드를 한 번 생각하십시오.

. 내가 너무 늦게 참조 죄송합니다, 나는 @이 문제를 해결하면 두 번 코드를 생각할 수 없다
KongJing

24

이 시도

{
    "to" : "DEVICE-TOKEN",

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

사용자 지정 알림 소리에 대한 @note :-> "sound" : "MyCustomeSound.wav"


1
그럼 그 파일을 어디에 두나요? 원시? 자산?
Hamzeh Soboh

3
자산 폴더가 아니라 res 아래에 새 폴더를 만들고 raw라고 부릅니다. 그런 다음 wav 또는 mp3 파일을 복사하여 해당 폴더에 붙여 넣습니다. @HamzehSoboh
Ally Makongo apr

Android 앱의 /res/raw/my_sound.mp3에 사운드를 넣은 다음 "sound": "my_sound.mp3"로 API를 호출합니다. 작동하지 않는, 단지 기본 소리가 연주되었다 :( 사람을 나처럼?
더 안 구엔에게

오, 작동하게 만들었습니다. 여기에 안드로이드 알림 채널, 자세한 내용을 사용 : stackoverflow.com/questions/61142155/...을
더 안 응우 엔

12

onMessageReceived메서드는 앱이 포 그라운드에 있거나 알림 페이로드에 데이터 유형 만 포함 된 경우에만 실행됩니다.

로부터 중포 기지의 문서

다운 스트림 메시징의 경우 FCM은 알림데이터 라는 두 가지 유형의 페이로드를 제공 합니다 .

대한 통지 유형, FCM은 자동으로 클라이언트 응용 프로그램을 대신하여 최종 사용자 장치에 메시지를 표시합니다. 알림에는 사용자가 볼 수있는 미리 정의 된 키 세트가 있습니다.
를 들어 , 데이터 유형, 클라이언트 응용 프로그램은 데이터를 처리하는 메시지에 대한 책임이 있습니다. 데이터 메시지에는 맞춤 키-값 쌍만 있습니다.

알림 사용 당신이 원하는 경우에 FCM을 처리하기 위해 클라이언트 응용 프로그램 대신에 알림을 표시. 사용 데이터 메시지는 당신이 할 때 응용 프로그램이 처리하는 표시를하거나 안드로이드 클라이언트 응용 프로그램에서 메시지를 처리하거나 직접 FCM 연결이있을 때 iOS 기기에 메시지를 보내려면.

문서를 더 아래로

알림 및 데이터 페이로드가 모두 포함 된 메시지를 수신 할 때의 앱 동작 은 앱이 백그라운드에 있는지 포 그라운드에 있는지 여부에 따라 달라집니다. 본질적으로 수신시 활성 상태인지 여부에 따라 다릅니다.
백그라운드 에서 앱은 알림 트레이에 알림 페이로드를 수신하고 사용자가 알림을 탭할 때만 데이터 페이로드를 처리합니다.
포 그라운드에있을 때 앱은 두 페이로드를 모두 사용할 수있는 메시지 객체를 수신합니다.

Firebase 콘솔을 사용하여 알림을 보내는 경우 페이로드에는 항상 알림 유형이 포함됩니다. 알림 페이로드에 데이터 유형 만 포함 된 알림을 보내려면 Firebase API를 사용해야합니다. 이렇게하면 새 알림이 수신 될 때 앱에 항상 알림이 전송되고 앱이 알림 페이로드를 처리 할 수 ​​있습니다.

기존 방법을 사용하여 앱이 백그라운드에있을 때 알림 음을 재생 하려면 알림 페이로드에 sound 매개 변수추가 해야합니다 .


아니, 앱이 닫힐 때도 호출되지만 앱의 자동 시작을 허용해야합니다.
funky-nd

10

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"
       }
    }
  }
}

이것을 PHP로 작성하는 방법?
Tabish khan

@Tabishkhan$this->message['message']['android']['notification']['sound'] = "default";
SudoPlz

7

나는 또한 소리를 내야하는 알림에 문제가 있었는데, 앱이 전경에있을 때 모든 것이 올바르게 작동했지만 앱이 배경에있을 때 소리가 나오지 않았습니다.

알림은 FCM을 통해 서버에서 전송되었습니다. 즉, 서버는 알림의 JSON을 마운트하여 FCM으로 보낸 다음 앱으로 알림을 보냅니다. 사운드 태그를 붙여도 배경에서 사운드가 나오지 않습니다.

여기에 이미지 설명 입력

사운드 태그를 넣어도 작동하지 않았습니다.

여기에 이미지 설명 입력

많은 검색 끝에 github 포럼에서 해결책을 찾았습니다. 그런 다음 제 경우에는 두 가지 문제가 있음을 알았습니다.

1-API 레벨 26 이상에서 작업하는 데 중요한 channel_id 태그를 전송하지 못했습니다.

여기에 이미지 설명 입력

2-Android 애플리케이션에서 알림이 서버에서 직접 전송되는 특정 경우에 대해 미리 채널 ID를 구성해야했기 때문에 기본 활동에서 Android가 언제 무엇을해야하는지 알 수 있도록 채널을 구성해야했습니다. 알림이 도착했습니다.

서버에서 보낸 JSON :

   {
  "title": string,
  "body": string,
  "icon": string,
  "color": string,
  "sound": mysound,

  "channel_id": videocall,
  //More stuff here ...
 }

주요 활동에서 :

 @Background
    void createChannel(){
            Uri sound = Uri.parse("android.resource://" + getApplicationContext().getPackageName() + "/" + R.raw.app_note_call);
            NotificationChannel mChannel;
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                mChannel = new NotificationChannel("videocall", "VIDEO CALL", NotificationManager.IMPORTANCE_HIGH);
                mChannel.setLightColor(Color.GRAY);
                mChannel.enableLights(true);
                mChannel.setDescription("VIDEO CALL");
                AudioAttributes audioAttributes = new AudioAttributes.Builder()
                        .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
                        .setUsage(AudioAttributes.USAGE_ALARM)
                        .build();
                mChannel.setSound(sound, audioAttributes);

                NotificationManager notificationManager =
                        (NotificationManager) getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE);
                notificationManager.createNotificationChannel(mChannel);
            }
    }

이것은 마침내 내 문제를 해결했으며 누군가가 나처럼 2 일을 낭비하지 않도록 도움이되기를 바랍니다. 내가 코드에 넣은 모든 것이 필요한지 모르겠지만 이것이 방법입니다. 나는 또한 더 이상 답변을 제공하는 github 포럼 링크를 찾지 못했습니다. 왜냐하면 내가 한 일은 거기에 게시 된 것과 동일했기 때문입니다.


2

이렇게 해

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {

    //codes..,.,,

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

}

6
앱이 백그라운드에있을 때 onMessageReceived가 호출되지 않습니다. 실제로 이것은
Developine

이 (Firebase.setAndroidContext (getApplicationContext을 ());)를 호출 않았다 주요 활동에서
AAA

아니에요. 하지만 지금은 isl의 알림 응답을 재생하고 있습니다.
Developine

말해 빌더 오류가 빌더 정의하십시오 생성하십시오
인 Ashish Shahi

빌더는 빌더 notificationcompat입니다
AAA

1

이 시도....

  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 콘솔을 사용할 수 있습니다.


0

firebase 콘솔에서 보내도 알림 음을 재생할 수 있습니다. 이를 위해서는 사전 옵션에 "default"값이있는 "sound"키를 추가하기 만하면됩니다.


당신의 아이디어는 일이다 그러나 전화가 난 날 도와 줘요 어떻게 바꾸 잠겨있을 때 나는 알림 이미지를 변경하는 데 필요 한
인 Ashish Shahi

나는 도움말 그것은 너무 급한하시기 바랍니다 작동 당신에게 이전의 아이디어를 시도하지만 오전
인 Ashish Shahi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.