31 votes

L'icône FCM par défaut utilise un dégradé non valide

L'icône FCM par défaut du manifeste Android n'est pas utilisée. Au lieu de cela, l'icône standard Android est utilisée. Dans le logcat, il est écrit:

E / FirebaseMessaging: 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 l'icône standard Android est toujours utilisée.

15voto

djxstream Points 485

Mise à JOUR: correction par firebase dans la version 12.0.0

Les erreurs de code ci-dessous a été mis à jour avec cela et il fonctionne très bien sur 8.0, tout en empêchant le bug indiqué dans ma réponse originale à cette question.

@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 marche pas à résoudre le problème, mais d'après les commentaires, on m'a demandé de la mettre comme une 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 case est parce qu'il est un Androïde 8.0 notification bug avec adaptation des icônes https://www.bleepingcomputer.com/news/mobile/android-oreo-adaptive-icons-bug-sends-thousands-of-phones-into-infinite-boot-loops/ donc ce code empêche que les, mais ce faisant, empêche également les non-adaptation des icônes à partir d'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 atteint ce code deux fois par notification, il essaie pour ma notification drawable que j'ai mis dans le manifeste que par Firebase les instructions, puis il frappe à nouveau essayer de le faire pour l'icône de lancement. Les deux échouent, même quand je le rendre solide de couleur un drawable.

Selon un autre commentaire de southrop, le firebase équipe est consciente de ce problème et de travailler sur un correctif, mais pas de calendrier donné.

Ce code n'est pas dans 11.6.0 et inférieure, de sorte que si vous avez vraiment besoin de ce travail pour le moment, de le rétrograder votre firebase.

Espérons que cela aide les autres qui trouvent ce post, chercher l'erreur

10voto

Eugene Nefedov Points 320

Ce bug se produit uniquement si votre demande de ciblage de l'API de 26 ans (ou plus) et que vous utilisez Firebase 11.8.0 et de le lancer sur l'appareil avec Android 8.0. J'ai donc décidé de le fixer uniquement pour ces version. La solution de contournement: Vous devez remplacer la classe d'Application et de la remplacer c'est getResources() pour retourner patché Ressources de la classe:

@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 patché pour nos besoins, les Ressources de la classe:

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 cette méta-donné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 rendue par Firebase SDK sera affiché avec l'icône par défaut de @drawable/ic_firebase_notification

Mais j'espère que Firebase équipe de fixer leur gènent vérifier et de lire comment il fonctionne

1voto

Boni2k Points 770

Corrigé avec v12.0.0: https://firebase.google.com/support/release-notes/android#20180320

CORRIGÉ Correction d'une régression entraînant le rejet des icônes de notification personnalisées sur Android 8.0.

-1voto

Quelle est la version du studio Android? Le travail en studio Android avec la nouvelle fonctionnalité de création d'icônes commence à partir d'Android Studio 3.0. Si vous utilisez Android Studio 3.0 ou une version ultérieure, accédez au dossier pouvant être dessiné et appelez le menu contextuel pour ajouter un nouveau vecteur ou une nouvelle image. Recherchez l'onglet Legacy, qui est identique à celui de la version précédente d'Android Studio.

-2voto

Scrobot Points 636

Votre icône de l'être .png avec un fond transparent, converti à partir d'éditeur de graphiques vectoriels(AI, Croquis), ou, mieux, il devrait être .svg Juste essayer de convertir votre .png icône dans drawable ressources avec http://romannurik.github.io/AndroidAssetStudio web-service. Il doivent aider à résoudre votre problème, ou si non, vous avez pour redessiner votre icône.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X