web-dev-qa-db-fra.com

Firebase Cloud Messaging: Comment définir l'icône de notification sur Android?

Je ne parviens pas à configurer l'icône de notification sur le studio Android. 

J'ai mis en place le dossier pouvant être dessiné comme suit:

 enter image description here

Et j'ai également défini l'icône par défaut dans mon fichier AndroidManifest.xml:

  <meta-data
    Android:name="com.google.firebase.messaging.default_notification_icon"
    Android:resource="@drawable/notification_icon" />

Et ici, je règle le champ d'icône sur notification_icon: https://developers.google.com/cloud-messaging/http-server-ref#downstream-http-messages-json (ps je suis conscient que GCM, mais ça marche. Je reçois la notification avec tout, à part l'icône)

Qu'est-ce que je rate? Tout ce que je vois, c'est un carré blanc dans un cercle gris.

Ceci est mon code backend: Pushex.Push(%{title: user.name, body: "message goes here", badge: 1, sound: "default", icon: "notification_icon"}, to: user.fcm_token, using: :gcm) ( https://github.com/tuvistavie/pushex )

7
Edmund

Vérifiez ce code. Cela peut vous aider.

 public class MyFirebaseMessagingService extends FirebaseMessagingService {
            private static final String TAG = "FCM Service";

            @Override
            public void onMessageReceived(RemoteMessage remoteMessage) {       
                Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
                            Intent intent = new Intent(getApplicationContext(), YourClass.class);
                    PendingIntent contentIntent = PendingIntent.getActivity(getApplicationContext(), NotificationID.getID(), intent,
                            PendingIntent.FLAG_UPDATE_CURRENT);
                    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(getApplicationContext())
                            .setSmallIcon(getNotificationIcon())
                            .setContentTitle(remoteMessage.getData().get("title"))
                            .setContentText(remoteMessage.getData().get("body"))
                            .setAutoCancel(true)
                            .setSound(defaultSoundUri)
                            .setStyle(new NotificationCompat.BigTextStyle().bigText(remoteMessage.getData().get("body")))
                            .setContentIntent(contentIntent);
                    NotificationManager notificationManager =
                            (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
                    notificationManager.notify(NotificationID.getID(), notificationBuilder.build());
            }
            private int getNotificationIcon() {
                boolean useWhiteIcon = (Android.os.Build.VERSION.SDK_INT >= Android.os.Build.VERSION_CODES.Lollipop);
                //If the build version is higher than KitKat we need to create Silhouette icon. 
                return useWhiteIcon ? R.mipmap.ic_notification : R.mipmap.ic_launcher;
            }

            public static class NotificationID {
                private static final AtomicInteger c = new AtomicInteger(0);

                public static int getID() {
                    return c.incrementAndGet();
                }
            }
        }

Si la version de compilation est supérieure à KitKat, nous devons créer une icône Silhouette. Pour que cet outil en ligne est disponible Voir: https://romannurik.github.io/AndroidAssetStudio/icons-notification.html

2
EKN

Je l'ai corrigé ... c'est tellement stupide. A été inspiré par cette réponse: https://stackoverflow.com/a/28387744/1555312

J'ai fait mon icône de notification mon icône d'application:

<meta-data
    Android:name="com.google.firebase.messaging.default_notification_icon"
    Android:resource="@mipmap/ic_launcher" />

Et puis la ligne magique dans Android/app/build.gradle...

defaultConfig {
    targetSdkVersion 20 // this has to be < 21
    ...
}

J'espère sauver des heures de la vie de quelqu'un d'autre

2
Edmund

Cependant, avec le SDK 9.8.0, vous pouvez remplacer la valeur par défaut! Dans votre fichier AndroidManifest.xml, vous pouvez définir les champs suivants pour personnaliser l'icône et la couleur:

<meta-data
    Android:name="com.google.firebase.messaging.default_notification_icon"
    Android:resource="@drawable/notification_icon" />
<meta-data Android:name="com.google.firebase.messaging.default_notification_color"
    Android:resource="@color/google_blue" />

et

<manifest>
<application 
    Android:icon="@drawable/icon" 
    Android:label="@string/app_name">

    <!-- Add your meta-data here-->

    <activity 
        Android:name=".MainActivity" 
        Android:label="@string/app_name">

        <intent-filter>
            <action Android:name="Android.intent.action.MAIN" />
            <category Android:name="Android.intent.category.LAUNCHER" />
        </intent-filter>

    </activity>

</application>

1