L'icône FCM par défaut du manifeste Android n'est pas utilisée. Au lieu de cela l'icône Android standart est utilisée. Dans le logcat, il est indiqué:
E/FirebaseMessaging: l'icône avec l'ID: 2131230849 utilise un dégradé non valide. Utilisation de l'icône de secours.
L'icône par défaut ne contient qu'une seule couleur. Je l'ai testé avec plusieurs icônes différentes mais toujours l'icône Android standart est utilisée.
MISE À JOUR: corrigé par Firebase dans la version 12.0.0
Le code défectueux ci-dessous a été mis à jour avec cela et il fonctionne très bien sur 8.0, tout en empêchant le bogue décrit dans ma réponse d'origine.
@TargetApi(26)
private final boolean zza(int var1) {
if(VERSION.SDK_INT != 26) {
return true;
} else {
try {
if(this.zzb.getResources().getDrawable(var1, (Theme)null) instanceof AdaptiveIconDrawable) {
Log.e("FirebaseMessaging", (new StringBuilder(77)).append("Adaptive icons cannot be used in notifications. Ignoring icon id: ").append(var1).toString());
return false;
} else {
return true;
}
} catch (NotFoundException var2) {
return false;
}
}
}
Cela ne résout pas le problème, mais d'après les commentaires, on m'a demandé de le mettre comme réponse. Voici le code de firebase 11.8.0 qui est le coupable et uniquement sur Android 8.0 (API 26). La raison de cette vérification est qu'il existe un bogue de notification Android 8.0 avec des icônes adaptatives https://www.bleepingcomputer.com/news/mobile/Android-oreo-adaptive-icons-bug-sends -thousands-of-phones-into-infinite-boot-loops / donc ce code empêche cela, mais ce faisant, empêche également les icônes non adaptatives de s'afficher correctement
@TargetApi(26)
private final boolean zzid(int var1) {
if(VERSION.SDK_INT != 26) {
return true;
} else {
try {
Drawable var2;
if((var2 = this.mContext.getResources().getDrawable(var1, (Theme)null)).getBounds().height() != 0 && var2.getBounds().width() != 0) {
return true;
} else {
Log.e("FirebaseMessaging", (new StringBuilder(72)).append("Icon with id: ").append(var1).append(" uses an invalid gradient. Using fallback icon.").toString());
return false;
}
} catch (NotFoundException var3) {
return false;
}
}
}
J'ai remarqué dans mon logcat, que mon application frappe ce code deux fois par notification, elle essaie de dessiner ma notification que j'ai définie dans le manifeste selon les instructions de Firebase, puis la frappe à nouveau en essayant de le faire pour l'icône du lanceur. Les deux échouent, même lorsque je les fais dessiner en couleur unie.
Selon un autre commentaire de Southrop, l'équipe Firebase est consciente du problème et travaille sur un correctif mais aucun calendrier n'est donné.
Ce code n'est pas en 11.6.0 et inférieur, donc si vous avez vraiment besoin que cela fonctionne pour le moment, rétrogradez votre base de feu.
J'espère que cela aide ceux qui trouvent ce message à la recherche de l'erreur
Ce bogue ne se produit que si votre application cible l'API 26 (ou supérieure) et que vous utilisez Firebase 11.8.0 et que vous la lancez sur l'appareil avec Android 8.0. J'ai donc décidé de le corriger uniquement pour ces versions. La solution de contournement: vous devez remplacer la classe Application et remplacer c'est getResources () pour renvoyer la classe Resources corrigée:
@Override public Resources getResources() {
if (resources == null) {
if (Build.VERSION.SDK_INT == Build.VERSION_CODES.O) {
resources = new ResourcesForSupportFirebaseNotificationsOnAndroid8(super.getResources());
} else {
resources = super.getResources();
}
}
return resources;
}
Et vous devez créer des correctifs pour notre classe de ressources:
public class ResourcesForSupportFirebaseNotificationsOnAndroid8 extends Resources {
private final Resources resources;
public ResourcesForSupportFirebaseNotificationsOnAndroid8(final Resources resources) {
super(resources.getAssets(), resources.getDisplayMetrics(), resources.getConfiguration());
this.resources = resources;
}
@RequiresApi(api = Build.VERSION_CODES.Lollipop)
@Override public Drawable getDrawable(final int id, @Nullable final Theme theme) throws NotFoundException {
if (id == R.drawable.ic_firebase_notification) {
final Drawable drawable = resources.getDrawable(id, theme);
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
return drawable;
} else {
return resources.getDrawable(id, theme);
}
}
}
Et vérifiez que votre AndroidManifest.xml contient ces métadonnées:
<meta-data
Android:name="com.google.firebase.messaging.default_notification_icon"
Android:resource="@drawable/ic_firebase_notification"
/>
Si vous faites comme décrit toutes les notifications sur Android 8.0 qui sera rendu par Firebase SDK sera affiché avec l'icône par défaut @ drawable/ic_firebase_notification
Mais j'espère que l'équipe Firebase corrigera leur vérification nuisible et lira comment cela fonctionne
Corrigé avec v12.0.0: https://firebase.google.com/support/release-notes/Android#2018032
CORRIGÉ Correction d'une régression entraînant le rejet des icônes de notification personnalisées sur Android 8.0.