Android의 Firebase에서 알림을 보낼 때 알림음이 들리지 않음
파이어베이스에서 안드로이드 애플리케이션으로 푸시 알림을 보냅니다.그러나 앱이 MessageReceived 메서드의 백그라운드 Firebase에 있는 경우 대신 시스템 트레이에 알림을 표시하기 위해 Firebase 알림을 시스템에 보냅니다.시스템 트레이에 알림이 표시되지만 시스템 설정에서 앱에 알림 소리를 허용했음에도 알림에 대한 소리가 없습니다.
파이어베이스에서 알림을 받을 때 알림 소리를 재생하려면 어떻게 해야 합니까?
이것이 제가 파이어베이스에서 제 앱 블로그 포스트 링크로 알림을 보내는 방법입니다.
Android 응용 프로그램에 Firebase를 추가하는 방법
알림의 알림 페이로드에는 사운드 키가 있습니다.
공식 문서에서 사용하는 용도는 다음과 같습니다.
장치가 알림을 수신할 때 재생할 소리를 나타냅니다.앱에 번들된 사운드 리소스의 기본 또는 파일 이름을 지원합니다.사운드 파일은 /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
파이어베이스를 모르는 사람들은 앱이 백그라운드에 있을 때 알림을 다르게 처리합니다.이 경우 onMessageReceived 기능은 호출되지 않습니다.
앱이 백그라운드에 있을 때 Android는 알림 메시지를 시스템 트레이로 보냅니다.사용자가 알림을 누르면 기본적으로 앱 시작 프로그램이 열립니다.여기에는 알림과 데이터 페이로드가 모두 포함된 메시지가 포함됩니다.이 경우 알림은 장치의 시스템 트레이로 전달되고 데이터 페이로드는 실행기 활동의 의도에 따라 추가로 전달됩니다.
사용해 보세요.
{
"to" : "DEVICE-TOKEN",
"notification" : {
"body" : "NOTIFICATION BODY",
"title" : "NOTIFICATION TITILE",
"sound" : "default"
}
}
지정 참고 @messional 알림음 :->"sound" : "MyCustomeSound.wav"
메시지를 쓸 때 고급 옵션을 선택하고 사운드 활성화를 선택합니다.
이것이 나의 해결책입니다.
그onMessageReceived메소드는 앱이 포그라운드에 있거나 알림 페이로드에 데이터 유형만 포함된 경우에만 실행됩니다.
Firebase 문서에서
다운스트림 메시징의 경우 FCM은 알림과 데이터라는 두 가지 유형의 페이로드를 제공합니다.
알림 유형의 경우 FCM은 클라이언트 앱을 대신하여 최종 사용자 장치에 메시지를 자동으로 표시합니다.알림에는 사용자가 볼 수 있는 키 집합이 미리 정의되어 있습니다.
데이터 유형의 경우 클라이언트 앱이 데이터 메시지를 처리합니다.데이터 메시지에는 사용자 지정 키-값 쌍만 있습니다.FCM이 클라이언트 앱 대신 알림 표시를 처리하도록 하려면 알림을 사용합니다.Android 클라이언트 앱에서 디스플레이를 처리하거나 메시지를 처리하려는 경우 또는 FCM에 직접 연결된 경우 iOS 장치로 메시지를 보내려는 경우 데이터 메시지를 사용합니다.
문서를 더 아래쪽으로.
알림 및 데이터 페이로드가 모두 포함된 메시지를 수신할 때의 앱 동작은 앱이 백그라운드에 있는지 또는 포그라운드에 있는지(기본적으로 수신 시점에 활성화되어 있는지 여부)에 따라 달라집니다.
백그라운드에서 앱은 알림 트레이에 알림 페이로드를 수신하고 사용자가 알림을 탭할 때만 데이터 페이로드를 처리합니다.
포그라운드에서 앱은 두 페이로드를 모두 사용할 수 있는 메시지 개체를 수신합니다.
파이어베이스 콘솔을 사용하여 알림을 보내는 경우 페이로드에는 항상 알림 유형이 포함됩니다.알림 페이로드에 데이터 유형만 포함된 알림을 보내려면 Firebase API를 사용해야 합니다.이렇게 하면 새 알림이 수신될 때 앱에 항상 알림이 표시되고 앱이 알림 페이로드를 처리할 수 있습니다.
앱이 백그라운드에 있을 때 알림 소리를 재생하려면 알림 페이로드에 사운드 매개 변수를 추가해야 합니다.
저는 또한 소리를 내야 하는 알림에 문제가 있었습니다. 앱이 포그라운드에 있을 때는 모든 것이 올바르게 작동했지만 앱이 백그라운드에 있을 때는 소리가 나오지 않았습니다.
서버가 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);
}
}
이것으로 드디어 제 문제가 해결되었습니다, 저처럼 이틀을 낭비하지 않도록 누군가에게 도움이 되었으면 좋겠습니다.제가 코드에 입력한 모든 것에 필요한지는 모르겠지만, 이것이 방법입니다.저는 또한 더 이상 답변을 신뢰할 수 있는 github 포럼 링크를 찾지 못했습니다. 왜냐하면 제가 한 것은 거기에 게시된 것과 같기 때문입니다.
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"
}
}
}
}
시스템에서 앱에 대해 사운드 알림을 활성화해야 합니다. 샤오미와 같은 일부 장치는 기본적으로 이 옵션을 비활성화하므로 다음으로 이동할 때까지 알림 소리가 들리지 않습니다.
설정 > 알림 > (앱 검색 후 이름 클릭)...
그런 다음 이 그림과 같이 (소리 허용) 옵션을 활성화합니다.
이와 같이 하라
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
//codes..,.,,
Uri sound= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
builder.setSound(sound);
}
이것을 시도해 보세요...
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());
}
메시지 수신 시 호출합니다.
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
Log.d("Msg", "Message received [" + remoteMessage.getNotification().getBody() + "]");
buildPushNotification(/*your param*/);
}
공징을 따르거나, 그의 말대로 옳지만, 당신은 파이어베이스 콘솔을 사용할 수 있습니다.
파이어베이스 콘솔에서 알림음을 보내도 재생할 수 있습니다.그러기 위해서는 사전에 값이 "기본"인 키 "사운드"를 추가하기만 하면 됩니다.
언급URL : https://stackoverflow.com/questions/37959588/no-notification-sound-when-sending-notification-from-firebase-in-android
'sourcecode' 카테고리의 다른 글
| find_spec_for_exe': 보석 번들러를 찾을 수 없습니다(>= 0.a) (Gem::GemNotFound예외) (0) | 2023.06.07 |
|---|---|
| HTML을 NSA 속성으로 구문 분석텍스트 - 글꼴을 설정하는 방법? (0) | 2023.06.07 |
| 안드로이드 에뮬레이터는 왜 그렇게 느립니까?안드로이드 에뮬레이터의 속도를 높이려면 어떻게 해야 합니까? (0) | 2023.06.07 |
| RMagick 2.13.1을 설치할 수 없습니다. MagickWand.h를 찾을 수 없습니다. (0) | 2023.06.02 |
| 안드로이드 기기에서 apk 파일을 가져오려면 어떻게 해야 합니까? (0) | 2023.06.02 |



