J'ai ci-dessous la notification push de la charge utile, envoyée depuis mon serveur. La notification fonctionne dans toutes les versions, mais le son ne fonctionne pas uniquement sur Android Oreo, les autres versions d'Android fonctionnent correctement.
{ "to" : "d4DLcrilLbs...", "notification" : { "body" : "This is an FCM notification message!", "title" : "FCM Message", "sound" : "new_sound.wav" } }
3 Réponses :
Dans oreo, vous devez définir le son avec le canal
Veuillez changer votre code avec ceci
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.O) { final Uri alarmSound = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" + this.getPackageName() + "/raw/notification"); AudioAttributes attributes = new AudioAttributes.Builder() .setUsage(AudioAttributes.USAGE_NOTIFICATION) .build(); NotificationChannel channel = new NotificationChannel("MyNotification","MyNotification", NotificationManager.IMPORTANCE_DEFAULT); channel.setSound(alarmSound,attributes); NotificationManager mgr =getSystemService(NotificationManager.class); mgr.createNotificationChannel(channel); }
cela fonctionnera soit votre application est en arrière-plan / au premier plan p >
La notification dans Android oreo doit être enregistrée sous la chaîne, sinon vous ne pourrez pas générer de notification.
Consultez l'article suivant qui pourrait vous aider
package com.example.notification; import android.app.Notification; import android.app.NotificationChannel; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.graphics.BitmapFactory; import android.graphics.Color; import android.media.AudioAttributes; import android.media.RingtoneManager; import android.net.Uri; import android.os.Build; import androidx.core.app.NotificationCompat; import android.util.Log; import com.google.firebase.messaging.FirebaseMessagingService; import com.google.firebase.messaging.RemoteMessage; public class MyFirebaseMessagingService extends FirebaseMessagingService { private static final String TAG = "MyFirebaseMsgService"; NotificationManager mNotificationManager; NotificationCompat.Builder mBuilder; Context mContext; @Override public void onMessageReceived(RemoteMessage remoteMessage) { Log.d(TAG, "From: " + remoteMessage.getFrom()); if (remoteMessage.getData().size() > 0) { Log.d(TAG, "Message data payload: " + remoteMessage.getData()); } if (remoteMessage.getNotification() != null) { Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody()); } sendNotification(remoteMessage.getNotification().getBody()); } @Override public void onNewToken(String token) { Log.d(TAG, "Refreshed token: " + token); sendRegistrationToServer(token); } private void handleNow() { Log.d(TAG, "Short lived task is done."); } private void sendRegistrationToServer(String token) { // TODO: Implement this method to send token to your app server. } private void sendNotification(String message) { Intent resultIntent=new Intent(getApplicationContext(),MainActivity.class); PendingIntent resultPendingIntent = PendingIntent.getActivity(getApplicationContext(), 0 /* Request code */, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT); // Uri uri = Uri.parse("android.resource://" + getApplicationContext() // .getPackageName() + "/" + R.raw.mix); Uri soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM); mBuilder = new NotificationCompat.Builder(getApplicationContext()); mBuilder.setSmallIcon(R.drawable.ic_launcher_background); mBuilder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher_background)); mBuilder.setContentTitle(message) .setContentText(message) .setSound(soundUri) .setLights(100,200,300) .setAutoCancel(false) .setVibrate(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400}) .setColor(Color.GREEN) .setStyle(new NotificationCompat.BigTextStyle()) .setContentIntent(resultPendingIntent) .setOnlyAlertOnce(true); mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { int importance = NotificationManager.IMPORTANCE_HIGH; NotificationChannel notificationChannel = new NotificationChannel("541201134433333", "MYGET", importance); notificationChannel.enableLights(true); notificationChannel.setLightColor(Color.RED); notificationChannel.enableVibration(true); notificationChannel.setShowBadge(true); notificationChannel.setVibrationPattern(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400}); // notificationChannel.s if (soundUri != null) { AudioAttributes audioAttributes = new AudioAttributes.Builder() .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION) .setUsage(AudioAttributes.USAGE_ALARM) .build(); notificationChannel.setSound(soundUri, audioAttributes); } assert mNotificationManager != null; mBuilder.setChannelId("541201134433333"); mNotificationManager.createNotificationChannel(notificationChannel); } assert mNotificationManager != null; mNotificationManager.notify(0 /* Request Code */, mBuilder.build()); } }
Pourriez-vous ajouter un peu d'explication ici? Quels appels sont cruciaux? Quelle était la clé?