Miałem też problem z powiadomieniami, które musiały emitować dźwięk, gdy aplikacja była na pierwszym planie, wszystko działało poprawnie, jednak gdy aplikacja była w tle, dźwięk po prostu się nie pojawiał.
Powiadomienie zostało wysłane przez serwer za pośrednictwem FCM, to znaczy serwer zamontował JSON powiadomienia i wysłał go do FCM, który następnie wysyła powiadomienie do aplikacji. Nawet jeśli wstawię etykietę dźwiękową, dźwięk nie wychodzi w tle.
Nawet umieszczenie etykiety dźwiękowej nie zadziałało.
Po tak wielu poszukiwaniach znalazłem rozwiązanie na forum github. Wtedy zauważyłem, że w moim przypadku były dwa problemy:
1 - Brakowało wysłania tagu channel_id, który jest ważny do pracy na poziomie API 26+
2 - W aplikacji na Androida, dla tego konkretnego przypadku, w którym powiadomienia były wysyłane bezpośrednio z serwera, musiałem wcześniej skonfigurować identyfikator kanału, więc w moim głównym działaniu musiałem skonfigurować kanał, aby Android wiedział, co robić, kiedy dotarło powiadomienie.
W JSON przesłanym przez serwer:
{
"title": string,
"body": string,
"icon": string,
"color": string,
"sound": mysound,
"channel_id": videocall,
}
W Twojej głównej aktywności:
@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);
}
}
To w końcu rozwiązało mój problem, mam nadzieję, że pomoże to komuś nie marnować 2 dni tak jak ja. Nie wiem, czy jest to konieczne do wszystkiego, co umieściłem w kodzie, ale tak jest. Nie znalazłem również linku do forum github, aby podać odpowiedź, ponieważ to, co zrobiłem, było tym samym, które zostało tam umieszczone.