tamaño quitar oreo one los iconos forma fondo como cambiar adaptativos android firebase firebase-cloud-messaging

android - quitar - El icono predeterminado de FCM usa gradiente no válido



iconos adaptativos android o (5)

¿Cuál es la versión del estudio de Android? El trabajo de estudio de Android con la nueva función de diseño de iconos comienza con Android Studio 3.0. Si está utilizando android studio 3.0 o superior, vaya a la carpeta dibujable y llame al menú contextual para agregar un nuevo vector o elemento de imagen. Busque la pestaña heredada, que es la misma configuración o característica de la versión anterior de android studio.

El icono de FCM predeterminado del manifiesto de Android no se utiliza. En cambio, se usa el icono estándar de Android. En el logcat dice:

E / FirebaseMessaging: ícono con id: 2131230849 utiliza un degradado no válido. Usando el icono de repliegue.

El icono predeterminado solo contiene un color. Lo probé con múltiples iconos diferentes, pero siempre se usa el ícono estándar de Android.


ACTUALIZACIÓN: fijado por firebase en la versión 12.0.0

El código defectuoso a continuación se ha actualizado con esto y funciona muy bien en 8.0, al tiempo que evita el error descrito en mi respuesta original.

@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; } } }

Esto no resuelve el problema, pero a partir de los comentarios me pidieron que lo pusiera como respuesta. Aquí está el código de firebase 11.8.0 que es el culpable y solo en Android 8.0 (API 26). El motivo de esta comprobación es que hay un error de notificación de Android 8.0 con iconos adaptables https://www.bleepingcomputer.com/news/mobile/android-oreo-adaptive-icons-bug-sends-thousands-of-phones-into-infinite-boot-loops/ por lo que este código impide eso, pero al hacerlo, también evita que los iconos no adaptativos se muestren correctamente

@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; } } }

He notado en mi logcat que mi aplicación golpea este código dos veces por notificación, intenta mi notificación dibujable que configuré en el manifiesto de acuerdo con las instrucciones de Firebase, luego la golpeo de nuevo tratando de hacerlo para el ícono del iniciador. Ambos fallan, incluso cuando los fabrico en colores sólidos.

Según otro comentario de southrop, el equipo de Firebase es consciente del problema y está trabajando en una solución, pero no se ha dado una línea de tiempo.

Este código no está en la versión 11.6.0 y es más bajo, por lo que si realmente necesitas que esto funcione por el momento, baja tu Firebase.

Espero que esto ayude a otros que encuentren esta publicación buscando el error


Esta falla solo ocurre si su aplicación apunta a API 26 (o superior) y usa Firebase 11.8.0 y lo inicia en un dispositivo con Android 8.0. Así que decidí arreglarlo solo para esta versión. La solución alternativa: debe anular la clase de aplicación y anular su getResources () para devolver la clase de recursos parcheados:

@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; }

Y deberías crear parches para nuestros propósitos Clase de recursos:

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); } } }

Y compruebe que su AndroidManifest.xml contiene estos metadatos:

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

Si va a hacer lo que se describe, todas las notificaciones en Android 8.0 que se mostrarán en Firebase SDK se mostrarán con el icono predeterminado @ drawable / ic_firebase_notification

Pero espero que el equipo de Firebase corrija su cheque dañino y lea cómo funciona