Cordova-plugin-firebase: Ícono de la barra de estado de Android - Todo blanco

Creado en 13 sept. 2016  ·  25Comentarios  ·  Fuente: arnesson/cordova-plugin-firebase

Hola,
He estado tratando de encontrar una manera de cambiar el ícono que se muestra en una barra de estado de Android cuando se envía una notificación automática. Aquí hay un ejemplo de lo que está sucediendo:

screenshot_2016-09-13-08-53-22

Como puede ver, el icono de mi aplicación no es una imagen transparente. Si lo cambio a una imagen transparente, el ícono de inserción se ve bien, pero el ícono de la aplicación ahora es la imagen transparente y eso no es lo que quiero. He probado diferentes variaciones de nombres de archivo, pero nada parece funcionar. Al buscar en el código, src/android/FirebasePluginMessagingService.java en la línea 73 hay esto:
.setSmallIcon(getApplicationInfo().icon)

¿Estoy en lo correcto al decir que no puede configurar un ícono diferente al ícono de su aplicación?
¿Sería posible establecer un archivo diferente para el icono de la barra de estado?
¿O alguna otra sugerencia sobre cómo solucionar este problema?

Comentario más útil

Gracias @blckshrk !! ¡Finalmente conseguí que funcionara haciendo eso!

Estoy usando Ionic v2 y [email protected] :
Iónico: 2.2.2
Córdoba: 6.5.0
npm: 4.6.1

  1. Instale el complemento de configuración personalizada:
    $ ionic plugin add cordova-custom-config --fetch --save

  2. Descargue https://github.com/driftyco/ionic-package-hooks/blob/master/android_custom_resources.js y https://github.com/driftyco/ionic-package-hooks/blob/master/android_custom_values.js en un nuevo directorio llamado "paquete-ganchos" (o lo que quieras) en la raíz de tu proyecto.
    package-hooks/android_custom_resources.js
    package-hooks/android_custom_values.js

  3. Cree los siguientes directorios y archivos en la raíz de su proyecto (no dentro de las plataformas):
    resources/android/custom/notification_icon.png
    resources/android/values/styles.xml

notification_icon.png es tu icono de notificación Android >= API 21. El mío es de 144x144px y se ve muy bien.

styles.xml contiene:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="red">#FF8614</color>
</resources>
  1. Edite config.xml. Importante : asegúrese de agregar ese espacio de nombres en la etiqueta del widget.
    <widget ... xmlns:android="http://schemas.android.com/apk/res/android">
        <platform name="android">
            <hook src="package-hooks/android_custom_resources.js" type="after_prepare"/>
            <hook src="package-hooks/android_custom_values.js" type="after_prepare"/>
            <config-file parent="./application" target="AndroidManifest.xml">
                <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/red"/>
            </config-file>
        </platform>
    <widget>

¡Y eso es todo!

Todos 25 comentarios

No he probado esto, pero debería poder configurar un ícono personalizado creando fcm_push_icon.png en todos los tamaños requeridos. De forma predeterminada, se utilizará el icono de la aplicación si fcm_push_icon.png no existe. Los íconos deben estar en el árbol de carpetas android/res.

puede usar esto para generar todos los diferentes tamaños: http://romannurik.github.io/AndroidAssetStudio/icons-notification.html

Hola, estamos enfrentando el mismo problema. Intentamos colocar los íconos fcm_push_icon.png en el árbol de carpetas de android/res, pero el ícono de notificación sigue siendo blanco.

@MikeBateman ¿has encontrado una solución?

Hola, para solucionar el problema, puede cambiar el SDK de destino de su aplicación, verifique esto , pero, por supuesto, no es una solución adecuada.

He estado investigando y obtuve esta solución:

Vaya a esta ruta src/android/FirebasePluginMessagingService.java y busque esta línea .setSmallIcon(getApplicationInfo().icon) (como mencionó @MikeBateman ), ahora agregue una condición que verificará si la aplicación se está ejecutando en Android lollipop+, si es cierta la notificación debe usar un ícono de diseño de material; si no lo está, usará el ícono de la aplicación predeterminada, el código:

...

  .setSmallIcon(getNotificationIcon())
...

//At the end of FirebasePluginMessagingService.java 
    private int getNotificationIcon() {
        boolean useWhiteIcon = (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP);
        System.out.println("SCLMTEST >lollipop?:"+useWhiteIcon);
        return useWhiteIcon ? R.drawable.myMaterialIcon: getApplicationInfo().icon;
    }

Creo que lo mejor sería simplemente poner el ícono de diseño de material en myappresources y el complemento haría este trabajo por sí solo, ahora no sé cómo hacerlo, si alguien puede, sería genial, ¡espero que ayude! @delphaber

fijo en 33c52c7e8a1835d5f595e58eaef43e4f49b4b23a

el complemento ahora usará el icono de notificación en dibujable, si existe. de lo contrario, usará el ícono de la aplicación predeterminada

Oye,

no lo entiendo Intento poner un notification_icon.png en cada carpeta dibujable (para cada tamaño), pero el complemento aún usa el predeterminado (icono de la aplicación). ¿Me perdí algo?

¡Gracias!

@blckshrk cc/ @robertarnesson

Me encontré con lo mismo mientras actualizaba los archivos src de Android y agregaba todos los archivos notification_icon.png . Todavía estaba viendo el cuadrado blanco. Terminé siguiendo los consejos de aquí: http://stackoverflow.com/questions/37325051/notification-icon-with-the-new-firebase-cloud-messaging-system

Primero tuve que actualizar mi Repositorio de Google para que el SDK de Firebase más reciente fuera el más actualizado en mi computadora. Esta es la versión 9.8.0 por com.google.firebase:firebase-core al momento de escribir esto y hacer que funcione. (Estaba en 9.4.0 antes)

Luego agregué esto a mi AndroidManifest.xml :

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

Si desea utilizar su opción para cambiar los default_notification_color , debe agregar lo siguiente. Nuestro ícono es un ícono blanco con un fondo transparente, por lo que agregamos nuestro propio color detrás del cual es agradable en la pantalla de bloqueo.

<meta-data android:name="com.google.firebase.messaging.default_notification_color" android:resource="@color/orange" />

También debe agregar un archivo res/values/colors.xml con lo siguiente, que es su propia elección de color, por supuesto, si está configurando el fondo:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="orange">#FF8614</color>
</resources>

Todo esto funciona a partir de Firebase 9.8.0

@blckshrk , ¿cómo agrega los íconos al proyecto? necesita usar el config.xml de su proyecto para agregarlos a los recursos. solo ponerlos en la carpeta no los hará visibles para el código hasta donde yo sé

Actualmente estoy usando Ionic 2 para crear mi aplicación y hago lo siguiente:
He agregado archivos de íconos a la carpeta res de ionic, por lo que si ejecuto el comando ionic resources , se crean las imágenes para diferentes tamaños de pantalla.

Esto también agrega las rutas de la imagen al archivo config.xml .

¿Puede alguien dar una respuesta detallada sobre lo que se debe hacer exactamente?

  • Como dónde se deben agregar los archivos en qué carpeta exactamente para Android
  • ¿es necesario agregarlos en el archivo config.xml?
  • ¿Cuál es el tamaño de imagen de los archivos?

No tengo conocimiento del código nativo de Android y la estructura de carpetas, así que responda en consecuencia.

-Gracias

En realidad, como @prantikv , estoy un poco perdido. Yo uso Ionic 1 (pero con el mismo flujo de trabajo). Traté de poner mi ícono en res/drawable/ y usar cordova-custom-config para agregar <meta-data android:name="com.google.firebase.messaging.default_notification_icon" android:resource="@drawable/notification_icon" /> en mi AndroidManifest.xml (en el nodo manifest directamente), pero nada funciona como se esperaba.

@gylippus No entiendo la parte com.google.firebase:firebase-core . ¿Cómo se comprueba la versión?

¡Gracias chicos!

@robertarnesson @gylippus ¿Tiene un ejemplo de trabajo?

Logré hacerlo funcionar con cordova-custom-config

<config-file parent="./application" target="AndroidManifest.xml">
          <meta-data android:name="com.google.firebase.messaging.default_notification_icon" android:resource="@drawable/notification_icon" />
</config-file>

y un platforms/android/res/drawable/notification_icon.png

Muchas gracias por tu ayuda !

Podría ser genial tener un gancho para hacer este trabajo automáticamente (mover el archivo y editar el manifiesto) si hay un notification_icon.png en la carpeta raíz (o resources ) (como lo es para el archivos de configuración). ¿Qué pensó al respecto?

@bckshrk
Intenté agregar el siguiente código como mencionaste

<config-file parent="./application" target="AndroidManifest.xml">
          <meta-data android:name="com.google.firebase.messaging.default_notification_icon" android:resource="@drawable/notification_icon" />
</config-file>

Pero recibo el siguiente error durante el proceso de compilación

:processDebugResources
E:\Development\IONIC 2\allcouriertracking\allcouriertracking5\platforms\android\res\xml\config.xml:57 : AAPT: Error parsing XML: unbound prefix


 FAILED

FAILURE: Build failed with an exception.


:processDebugResources
E:\Development\IONIC 2\allcouriertracking\allcouriertracking5\platforms\android\res\xml\config.xml:57 : AAPT: Error parsing XML: unbound prefix


 FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':processDebugResources'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'I:\DEVELOPMENT PROGRAMS\android-sdk-windows\build-tools\24.0.3\aapt.exe'' finished with non-zero exit value 1

Luego agregué manualmente lo siguiente a AndroidManifest.xml
<meta-data android:name="com.google.firebase.messaging.default_notification_icon" android:resource="@drawable/notification_icon" />

Y funcionó para Android 4.4 Pero no funciona para Android 5.1.

¿Para qué versión construiste?
¿También agregó el archivo notification_icon.png en todas las carpetas drawable o solo en una?

@prantikv ¿Instalaste https://github.com/dpa99c/cordova-custom-config ?

En realidad, uso este enlace https://github.com/driftyco/ionic-package-hooks/blob/master/android_custom_resources.js para mover automáticamente el archivo notification_icon.png a cada carpeta dibujable.

Básicamente tengo esto dentro del nodo <platform name="android"> :

<hook src="hooks/after_prepare/android_custom_resources.js" type="after_prepare"/>
<config-file parent="./application" target="AndroidManifest.xml">
    <meta-data android:name="com.google.firebase.messaging.default_notification_icon" android:resource="@drawable/notification_icon" />
</config-file>

EDITAR

También logré lidiar con el color usando este gancho https://github.com/driftyco/ionic-package-hooks/blob/master/android_custom_values.js y la solución propuesta por @gylippus (¡gracias!)

@blckshrk Sí, instalé el complemento. ¿Puede decirme el tamaño de la imagen que está usando? Las dimensiones de la imagen y el tamaño en KB.
Y la plataforma que lo has probado.

¿Alguna actualización sobre esto? ¿Hace 20 días y todavía no hay solución? ¿No se puede cerrar si sigue siendo un problema?

Tuve el mismo problema y pude resolverlo desde el lado del servidor. Coloqué manualmente el icono en las carpetas dibujables dentro de la carpeta plataforma-android con el nombre notificación_icono.png.
A través de la consola de Firebase sigo viendo el icono incorrecto, pero un servidor propio envío lo siguiente como cuerpo de la solicitud:

$fields = array(
  "registration_ids" => "array of registration ids",
  "notification" => array(
    "body"=>"message to send as a body",
    "icon"=>"notification_icon",
    "color"=>"your color in hex"
  ),
  "priority"=>10
);

Espero que esto ayude

En realidad, después de algunos registros y lecturas, me parece que todo el código de NotificationBuilder en FirebasePluginMessagingService.java/sendNotification es discutible, ya que nunca se ejecuta cuando hay una carga útil de notificación. Aparte del problema del ícono, también comencé a sospechar esto ya que el código de NotificationBuilder hace un .setSound(defaultSoundUri) pero nunca se reproduce cuando las notificaciones llegan a la bandeja.

Esta es la razón por la cual la solución anterior de sergiojup funciona, ya que la notificación no está siendo creada por el código del complemento, sino por el propio FCM, que toma instrucciones de la carga útil de la notificación.

En cuanto al por qué... en Android, onMessageReceived solo se llama cuando:
*) SOLO hay una carga útil de notificación y la aplicación está en primer plano
*) hay una carga útil de notificación Y una carga útil de datos y la aplicación está en primer plano
*) SOLO hay una carga útil de datos y la aplicación está en primer plano o en segundo plano

Entonces, en estos casos, onMessageReceived NO se llama:
*) SOLO hay una carga útil de notificación y la aplicación está en segundo plano
*) hay una carga útil de notificación Y una carga útil de datos y la aplicación está en segundo plano

Mirando el código, la única forma de hacer que el complemento cree la notificación es usar solo la carga útil de datos, que tiene propiedades de título y texto, mientras que la aplicación está en segundo plano.

Gracias @blckshrk !! ¡Finalmente conseguí que funcionara haciendo eso!

Estoy usando Ionic v2 y [email protected] :
Iónico: 2.2.2
Córdoba: 6.5.0
npm: 4.6.1

  1. Instale el complemento de configuración personalizada:
    $ ionic plugin add cordova-custom-config --fetch --save

  2. Descargue https://github.com/driftyco/ionic-package-hooks/blob/master/android_custom_resources.js y https://github.com/driftyco/ionic-package-hooks/blob/master/android_custom_values.js en un nuevo directorio llamado "paquete-ganchos" (o lo que quieras) en la raíz de tu proyecto.
    package-hooks/android_custom_resources.js
    package-hooks/android_custom_values.js

  3. Cree los siguientes directorios y archivos en la raíz de su proyecto (no dentro de las plataformas):
    resources/android/custom/notification_icon.png
    resources/android/values/styles.xml

notification_icon.png es tu icono de notificación Android >= API 21. El mío es de 144x144px y se ve muy bien.

styles.xml contiene:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="red">#FF8614</color>
</resources>
  1. Edite config.xml. Importante : asegúrese de agregar ese espacio de nombres en la etiqueta del widget.
    <widget ... xmlns:android="http://schemas.android.com/apk/res/android">
        <platform name="android">
            <hook src="package-hooks/android_custom_resources.js" type="after_prepare"/>
            <hook src="package-hooks/android_custom_values.js" type="after_prepare"/>
            <config-file parent="./application" target="AndroidManifest.xml">
                <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/red"/>
            </config-file>
        </platform>
    <widget>

¡Y eso es todo!

No entiendo dónde agregar lo siguiente en config.xml? ¿Consejos sobre eso? Además, no estoy muy familiarizado con XML, ¿qué debo agregar exactamente en el espacio de nombres? @shamank

<widget ... xmlns:android="http://schemas.android.com/apk/res/android"> <platform name="android"> <hook src="package-hooks/android_custom_resources.js" type="after_prepare"/> <hook src="package-hooks/android_custom_values.js" type="after_prepare"/> <hook src="package-hooks/android_fixes.js" type="after_prepare"/> <config-file parent="./application" target="AndroidManifest.xml"> <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/red"/> </config-file> </platform> <widget>

@Rockforced Lo siento, no he estado estos días. Eche un vistazo al archivo original (con algunas cosas reemplazadas, por supuesto). Espero eso ayude.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<widget id="com.example" version="1.0.20" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0" xmlns:android="http://schemas.android.com/apk/res/android">
    <name>Test</name>
    <description>Blabla.</description>
    <author email="[email protected]" href="https://example.com/">Example</author>
    <content src="index.html"/>
    <access origin="*"/>
    <allow-navigation href="http://ionic.local/*"/>
    <allow-navigation href="http://192.168.0.1:8100"/>
    <allow-intent href="http://*/*"/>
    <allow-intent href="https://*/*"/>
    <allow-intent href="tel:*"/>
    <allow-intent href="sms:*"/>
    <allow-intent href="mailto:*"/>
    <allow-intent href="geo:*"/>
    <platform name="android">
        <allow-intent href="market:*"/>
        <hook src="package-hooks/android_custom_resources.js" type="after_prepare"/>
        <hook src="package-hooks/android_custom_values.js" type="after_prepare"/>
        <hook src="package-hooks/android_fixes.js" type="after_prepare"/>
        <config-file parent="./application" target="AndroidManifest.xml">
            <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/red"/>
        </config-file>
        <icon density="ldpi" src="resources/android/icon/drawable-ldpi-icon.png"/>
        <icon density="mdpi" src="resources/android/icon/drawable-mdpi-icon.png"/>
        <icon density="hdpi" src="resources/android/icon/drawable-hdpi-icon.png"/>
        <icon density="xhdpi" src="resources/android/icon/drawable-xhdpi-icon.png"/>
        <icon density="xxhdpi" src="resources/android/icon/drawable-xxhdpi-icon.png"/>
        <icon density="xxxhdpi" src="resources/android/icon/drawable-xxxhdpi-icon.png"/>
        <splash density="port-ldpi" src="resources/android/splash/drawable-port-ldpi-screen.png"/>
        <splash density="port-mdpi" src="resources/android/splash/drawable-port-mdpi-screen.png"/>
        <splash density="port-hdpi" src="resources/android/splash/drawable-port-hdpi-screen.png"/>
        <splash density="port-xhdpi" src="resources/android/splash/drawable-port-xhdpi-screen.png"/>
        <splash density="port-xxhdpi" src="resources/android/splash/drawable-port-xxhdpi-screen.png"/>
        <splash density="port-xxxhdpi" src="resources/android/splash/drawable-port-xxxhdpi-screen.png"/>
    </platform>
    <platform name="ios">
        <allow-intent href="itms:*"/>
        <allow-intent href="itms-apps:*"/>
        <icon height="57" src="resources/ios/icon/icon.png" width="57"/>
        <icon height="114" src="resources/ios/icon/[email protected]" width="114"/>
        <icon height="40" src="resources/ios/icon/icon-40.png" width="40"/>
        <icon height="80" src="resources/ios/icon/[email protected]" width="80"/>
        <icon height="120" src="resources/ios/icon/[email protected]" width="120"/>
        <icon height="50" src="resources/ios/icon/icon-50.png" width="50"/>
        <icon height="100" src="resources/ios/icon/[email protected]" width="100"/>
        <icon height="60" src="resources/ios/icon/icon-60.png" width="60"/>
        <icon height="120" src="resources/ios/icon/[email protected]" width="120"/>
        <icon height="180" src="resources/ios/icon/[email protected]" width="180"/>
        <icon height="72" src="resources/ios/icon/icon-72.png" width="72"/>
        <icon height="144" src="resources/ios/icon/[email protected]" width="144"/>
        <icon height="76" src="resources/ios/icon/icon-76.png" width="76"/>
        <icon height="152" src="resources/ios/icon/[email protected]" width="152"/>
        <icon height="167" src="resources/ios/icon/[email protected]" width="167"/>
        <icon height="29" src="resources/ios/icon/icon-small.png" width="29"/>
        <icon height="58" src="resources/ios/icon/[email protected]" width="58"/>
        <icon height="87" src="resources/ios/icon/[email protected]" width="87"/>
        <splash height="1136" src="resources/ios/splash/Default-568h@2x~iphone.png" width="640"/>
        <splash height="1334" src="resources/ios/splash/Default-667h.png" width="750"/>
        <splash height="2208" src="resources/ios/splash/Default-736h.png" width="1242"/>
        <splash height="2048" src="resources/ios/splash/Default-Portrait@2x~ipad.png" width="1536"/>
        <splash height="1024" src="resources/ios/splash/Default-Portrait~ipad.png" width="768"/>
        <splash height="960" src="resources/ios/splash/Default@2x~iphone.png" width="640"/>
        <splash height="480" src="resources/ios/splash/Default~iphone.png" width="320"/>
    </platform>
    <preference name="webviewbounce" value="false"/>
    <preference name="UIWebViewBounce" value="false"/>
    <preference name="DisallowOverscroll" value="true"/>
    <preference name="android-minSdkVersion" value="16"/>
    <preference name="android-targetSdkVersion" value="23"/>
    <preference name="BackupWebStorage" value="none"/>
    <preference name="SplashMaintainAspectRatio" value="true"/>
    <preference name="SplashReloadOnOrientationChange" value="true"/>
    <preference name="SplashScreenDelay" value="3000"/>
    <preference name="FadeSplashScreen" value="false"/>
    <preference name="FadeSplashScreenDuration" value="0"/>
    <preference name="orientation" value="portrait"/>
    <preference name="SplashScreenBackgroundColor" value="0xFFFFFFFF"/>
    <preference name="SplashScreen" value="screen"/>
    <preference name="AutoHideSplashScreen" value="false"/>
    <preference name="KeyboardDisplayRequiresUserAction" value="false"/>
    <preference name="loadUrlTimeoutValue" value="700000"/>
    <feature name="StatusBar">
        <param name="ios-package" onload="true" value="CDVStatusBar"/>
    </feature>
    <feature name="InAppBrowser">
        <param name="ios-package" value="CDVInAppBrowser"/>
        <param name="android-package" value="org.apache.cordova.inappbrowser.InAppBrowser"/>
    </feature>
    <plugin name="cordova-plugin-app-event" spec="~1.2.0"/>
    <plugin name="cordova-plugin-device" spec="~1.1.3"/>
    <plugin name="cordova-plugin-console" spec="~1.0.4"/>
    <plugin name="cordova-plugin-whitelist" spec="~1.3.2"/>
    <plugin name="cordova-plugin-splashscreen" spec="~4.0.2"/>
    <plugin name="cordova-plugin-statusbar" spec="~2.2.2"/>
    <plugin name="ionic-plugin-keyboard" spec="~2.2.1"/>
    <plugin name="cordova-plugin-geolocation" spec="~2.4.1"/>
    <plugin name="cordova-plugin-compat" spec="~1.1.0"/>
    <plugin name="cordova-plugin-inappbrowser" spec="~1.6.1"/>
    <plugin name="cordova-plugin-nativestorage" spec="~2.2.2"/>
    <plugin name="cordova-plugin-firebase" spec="~0.1.20"/>
    <plugin name="cordova.plugins.diagnostic" spec="~3.0.4"/>
    <plugin name="cordova-plugin-googlemaps" spec="~1.4.0">
        <variable name="API_KEY_FOR_ANDROID" value="blabla"/>
        <variable name="API_KEY_FOR_IOS" value="blabla"/>
    </plugin>
    <plugin name="ionic-plugin-deeplinks" spec="~1.0.14">
        <variable name="URL_SCHEME" value="blabla"/>
        <variable name="DEEPLINK_SCHEME" value="https"/>
        <variable name="DEEPLINK_HOST" value="www.blabla.com"/>
        <variable name="ANDROID_PATH_PREFIX" value="/"/>
    </plugin>
    <plugin name="cordova-custom-config" spec="~3.2.0"/>
    <icon src="resources/ios/icon/[email protected]"/>
    <engine name="android" spec="~6.2.2"/>
</widget>

@shamank Muchas gracias por esto. He estado luchando con la versión 0.1.24 todo el día sin tener suerte y su solución funcionó. ¿Puede decirme por qué exactamente esto hace que funcione el icono personalizado? Seguí las instrucciones en Léame muy de cerca y solo mostró un ícono atenuado. Su solución funcionó de inmediato... ¡Me gustaría saber por qué!

@ jskidd3 ¡ Me alegro de que haya ayudado! Es realmente bastante simple. El complemento cordova-custom-config le permite realizar cambios en la configuración final de Cordova para cada plataforma (Info.plist / AndroidManifest.xml). Entonces, en el bloque de archivo de configuración, le dice a la configuración del complemento para Android que busque "default_notification_icon" en el directorio de elementos dibujables con el nuevo nombre de "notification_icon" (el complemento maneja la extensión del archivo si no recuerdo mal). Luego defines el color de fondo en el siguiente bloque (rojo). Ahora necesita una forma de colocar ese archivo (notification_icon.png) en el lugar correcto en el momento de la construcción, por lo que necesita un enlace para hacerlo. Eso es android_custom_resources.js. Toma lo que esté en resources/android/custom/* y lo coloca en los directorios dibujables de la compilación (puede cambiar esto editando el script, pero está bien para esta tarea). Similar con estilos de configuración adicionales. Usted crea este archivo styles.xml; define el color (lo llamé "rojo", pero puede ser lo que quieras) y luego android_custom_values.js lo copia en el directorio creado "platforms/android/res/values". Finalmente, en config.xml vincula estos scripts para que se ejecuten en un momento determinado. Para esta tarea, deben copiarse "después de preparar", lo que significa, después de que Cordova preparó las compilaciones (nuevamente, si recuerdo bien ... puede consultar los documentos de enlaces de paquetes de Ionic para obtener más detalles / eventos).

La respuesta de @alexbonhomme funcionó para mí :) https://github.com/arnesson/cordova-plugin-firebase/issues/53#issuecomment -304573222

La decisión de @shamank me funciona parcialmente.
Estoy usando Angular + Cordova.

Todo funciona excepto una cosa: android_custom_resources.js no creará carpetas (drawable-ldpi, drawable-mdpi, etc.) y no copiará archivos si las carpetas no existen.

Así que eliminé ese script y lo usé en config.xml:

Nota: las rutas pueden ser diferentes debido a cambios personalizados y [email protected] y > tiene la carpeta res/ en otro lugar.

`

    <resource-file src="res/custom/android/notification.png" target="app/src/main/res/drawable-mdpi/notification.png" />

    <resource-file src="res/custom/android/notification.png" target="app/src/main/res/drawable-hdpi/notification.png" />

    <resource-file src="res/custom/android/notification.png" target="app/src/main/res/drawable-xhdpi/notification.png" />

    <resource-file src="res/custom/android/notification.png" target="app/src/main/res/drawable-xxhdpi/notification.png" />

    <resource-file src="res/custom/android/notification.png" target="app/src/main/res/drawable-xxxhdpi/notification.png" />`

De todos modos, ¡gracias @alexbonhomme y @shamank !

Para Ionic 3 (más específicamente para cordova-android@7) en las rutas de solución de @shamank dentro:
package-hooks/android_custom_resources.js package-hooks/android_custom_values.js
se actualizará porque la carpeta res está dentro platforms/android/app/src/main/ ahora.

  1. ve a package-hooks/android_custom_resources.js y actualiza
    var platformDir = 'platforms/android';
    a
    var platformDir = 'platforms/android/app/src/main';

  2. ve a package-hooks/android_custom_values.js y actualiza
    var platformDir = platforms/android/res/values';
    a
    var platformDir = 'platforms/android/app/src/main/res/values';

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

merbin2012 picture merbin2012  ·  4Comentarios

JonSmart picture JonSmart  ·  3Comentarios

dhavalsoni2001 picture dhavalsoni2001  ·  5Comentarios

Zrnik picture Zrnik  ·  3Comentarios

jdla1990 picture jdla1990  ·  4Comentarios