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:
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 )
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
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
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>