2
votes

Le son de notification push personnalisé ne fonctionne pas en arrière-plan Oreo

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


0 commentaires

3 Réponses :


1
votes

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 >


0 commentaires

0
votes

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

Cliquez ici


0 commentaires

0
votes
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());
    }
}

1 commentaires

Pourriez-vous ajouter un peu d'explication ici? Quels appels sont cruciaux? Quelle était la clé?