Cordova-plugin-firebase: Icône de la barre d'état Android - Tout blanc

Créé le 13 sept. 2016  ·  25Commentaires  ·  Source: arnesson/cordova-plugin-firebase

Salut,
J'ai essayé de trouver un moyen de changer l'icône qui s'affiche sur une barre d'état Android lorsqu'une notification push est envoyée. Voici un exemple de ce qui se passe :

screenshot_2016-09-13-08-53-22

Comme vous pouvez le voir, l'icône de mon application n'est pas une image transparente. Si je le change en image transparente, l'icône push semble bien, mais l'icône de l'application est maintenant l'image transparente et ce n'est pas ce que je veux. J'ai essayé différentes variantes de noms de fichiers mais rien ne semble fonctionner. En regardant dans le code, src/android/FirebasePluginMessagingService.java à la ligne 73, il y a ceci :
.setSmallIcon(getApplicationInfo().icon)

Ai-je raison de dire que vous ne pouvez pas définir une icône différente de celle de votre application ?
Serait-il possible de définir un fichier différent pour l'icône de la barre d'état ?
Ou d'autres suggestions sur la façon de contourner ce problème?

Commentaire le plus utile

Merci @blckshrk !! J'ai enfin réussi à faire ça !

J'utilise Ionic v2 et [email protected] :
Ionique : 2.2.2
Cordoue : 6.5.0
npm : 4.6.1

  1. Installez le plug-in de configuration personnalisée :
    $ ionic plugin add cordova-custom-config --fetch --save

  2. Téléchargez https://github.com/driftyco/ionic-package-hooks/blob/master/android_custom_resources.js et https://github.com/driftyco/ionic-package-hooks/blob/master/android_custom_values.js dans un nouveau répertoire appelé "package-hooks" (ou ce que vous voulez) à la racine de votre projet.
    package-hooks/android_custom_resources.js
    package-hooks/android_custom_values.js

  3. Créez les répertoires et fichiers suivants à la racine de votre projet (pas à l'intérieur des plates-formes) :
    resources/android/custom/notification_icon.png
    resources/android/values/styles.xml

notification_icon.png est votre icône de notification Android >= API 21. Le mien fait 144x144px et il a fière allure.

styles.xml contient :

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="red">#FF8614</color>
</resources>
  1. Modifiez le fichier config.xml. Important : Assurez-vous d'ajouter cet espace de noms dans la balise du 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>

Et c'est tout!

Tous les 25 commentaires

Je n'ai pas testé cela, mais vous devriez pouvoir définir une icône personnalisée en créant fcm_push_icon.png dans toutes les tailles requises. Par défaut, l'icône de l'application sera utilisée si fcm_push_icon.png n'existe pas. Les icônes doivent se trouver dans l'arborescence des dossiers android/res.

vous pouvez l'utiliser pour générer toutes les différentes tailles : http://romannurik.github.io/AndroidAssetStudio/icons-notification.html

Bonjour, nous sommes confrontés au même problème. Nous avons essayé de placer des icônes fcm_push_icon.png dans l'arborescence des dossiers Android/res, mais l'icône de notification est toujours blanche.

@MikeBateman avez-vous trouvé une solution ?

Bonjour, pour contourner le problème, vous pouvez modifier le SDK cible de votre application, veuillez vérifier ceci , mais bien sûr, ce n'est pas une solution appropriée.

J'ai fait des recherches et j'ai trouvé cette solution:

Accédez à cette route src/android/FirebasePluginMessagingService.java et trouvez cette ligne .setSmallIcon(getApplicationInfo().icon) (comme @MikeBateman mentionné), ajoutez maintenant une condition qui vérifiera si l'application s'exécute dans android lollipop+, si c'est vrai la notification doit utiliser une icône de conception de matériau si ce n'est pas le cas, il utilisera l'icône de l'application par défaut, le code :

...

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

Je pense que le mieux serait simplement de mettre votre icône de conception de matériel dans myappresources et que le plugin fasse ce travail par lui-même, maintenant je ne sais pas comment le faire, si quelqu'un peut le faire, ce serait génial, j'espère que ça aide ! @delphaber

corrigé dans 33c52c7e8a1835d5f595e58eaef43e4f49b4b23a

le plugin utilisera désormais notification_icon dans drawable, s'il existe. sinon, il utilisera l'icône de l'application par défaut

Hey,

Je ne comprends pas. J'essaie de mettre un notification_icon.png dans chaque dossier drawable (pour chaque taille), mais le plugin utilise toujours celui par défaut (icône de l'application). Est-ce que j'ai loupé quelque chose ?

Merci!

@blckshrk cc/ @robertarnesson

J'ai rencontré la même chose alors qu'après avoir mis à jour les fichiers Android src et ajouté tous les fichiers notification_icon.png , je voyais toujours le carré blanc. J'ai fini par suivre les conseils d'ici: http://stackoverflow.com/questions/37325051/notification-icon-with-the-new-firebase-cloud-messaging-system

J'ai d'abord dû mettre à jour mon référentiel Google pour que le dernier SDK Firebase soit le plus à jour sur mon ordinateur. Il s'agit de la version 9.8.0 pour com.google.firebase:firebase-core au moment d'écrire ceci et je le fais fonctionner. (j'étais sur 9.4.0 avant)

Ensuite, j'ai ajouté ceci à mon AndroidManifest.xml :

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

Si vous souhaitez utiliser leur option pour modifier les default_notification_color , vous devez ajouter ce qui suit. Notre icône est une icône blanche avec un fond transparent, nous avons donc ajouté notre propre couleur derrière laquelle est agréable sur l'écran de verrouillage.

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

Vous devez également ajouter un fichier res/values/colors.xml avec les éléments suivants, dont votre propre choix de couleur bien sûr si vous définissez l'arrière-plan :

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

Tout cela fonctionne à partir de Firebase 9.8.0

@blckshrk comment ajoutez-vous la ou les icônes au projet ? vous devez utiliser le fichier config.xml de votre projet pour les ajouter aux ressources. le simple fait de les mettre dans le dossier ne les rendra pas visibles pour le code pour autant que je sache

Actuellement, j'utilise Ionic 2 pour créer mon application et je fais ce qui suit :
J'ai ajouté des fichiers d'icônes au dossier res d'ionic, donc si j'exécute la commande ionic resources , les images pour différentes tailles d'écran sont créées.

Cela ajoute également les chemins d'accès aux images au fichier config.xml .

Quelqu'un peut-il me répondre en détail sur ce qu'il faut faire exactement..

  • Comme où les fichiers doivent être ajoutés dans quel dossier exactement pour Android
  • doivent-ils être ajoutés dans le fichier config.xml
  • quelle est la taille d'image des fichiers

Je n'ai aucune connaissance du code Android natif et de la structure des dossiers, alors répondez en conséquence.

-Merci

En fait comme @prantikv je suis un peu perdu. J'utilise Ionic 1 (mais avec le même workflow). J'ai essayé de mettre mon icône dans res/drawable/ et d'utiliser cordova-custom-config pour ajouter <meta-data android:name="com.google.firebase.messaging.default_notification_icon" android:resource="@drawable/notification_icon" /> dans mon AndroidManifest.xml (dans le nœud manifest directement), mais rien ne fonctionne comme prévu.

@gylippus Je ne comprends pas la partie com.google.firebase:firebase-core . Comment vérifier la version ?

Merci les gars!

@robertarnesson @gylippus Avez-vous un exemple de travail ?

J'ai réussi à le faire fonctionner avec 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>

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

Merci beaucoup pour votre aide !

Il pourrait être intéressant d'avoir un crochet pour faire automatiquement ce travail (déplacer le fichier et modifier le manifeste) si un notification_icon.png est dans le dossier racine (ou resources ) (comme c'est le cas pour le fichiers de configuration). Qu'en avez-vous pensé ?

@blckshrk
J'ai essayé d'ajouter le code suivant comme vous l'avez mentionné

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

Mais j'obtiens l'erreur suivante pendant le processus de construction

: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

J'ai ensuite ajouté manuellement ce qui suit à AndroidManifest.xml
<meta-data android:name="com.google.firebase.messaging.default_notification_icon" android:resource="@drawable/notification_icon" />

Et cela a fonctionné pour Android 4.4 Mais cela ne fonctionne pas pour Android 5.1.

Pour quelle version avez-vous créé ?
Avez-vous également ajouté le fichier notification_icon.png dans tous les dossiers drawable ou un seul ?

@prantikv Avez-vous installé https://github.com/dpa99c/cordova-custom-config ?

En fait, j'utilise ce crochet https://github.com/driftyco/ionic-package-hooks/blob/master/android_custom_resources.js pour déplacer automatiquement le fichier notification_icon.png dans chaque dossier pouvant être dessiné.

Fondamentalement, j'ai ceci à l'intérieur du nœud <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>

ÉDITER

J'ai aussi réussi à gérer la couleur en utilisant ce hook https://github.com/driftyco/ionic-package-hooks/blob/master/android_custom_values.js et la solution proposée par @gylippus (merci !)

@blckshrk Oui, j'ai installé le plugin..Pouvez-vous me faire savoir la taille de l'image que vous utilisez..Les dimensions de l'image ainsi que la taille en Ko.
Et la plate-forme que vous avez testée.

Des mises à jour à ce sujet ? 20 jours maintenant et toujours pas de solution ? Il ne peut pas être fermé s'il y a toujours un problème ? !

J'ai eu le même problème et j'ai pu le résoudre côté serveur. J'ai placé manuellement l'icône dans les dossiers drawable à l'intérieur du dossier platform-android avec le nom notification_icon.png.
Grâce à la console Firebase, je continue à voir la mauvaise icône, mais un propre serveur, j'envoie ce qui suit dans le corps de la requête :

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

J'espère que cette aide

En fait, après quelques enregistrements et lectures, il me semble que tout le code notificationBuilder dans FirebasePluginMessagingService.java / sendNotification est sans objet car il n'est jamais exécuté lorsqu'il y a une charge utile de notification. Mis à part le problème d'icône, j'ai également commencé à le soupçonner car le code notificationBuilder fait un .setSound (defaultSoundUri) mais il n'est jamais lu lorsque les notifications arrivent dans la barre d'état.

C'est pourquoi la solution de sergiojup ci-dessus fonctionne, car la notification n'est pas construite par le code du plugin mais par FCM lui-même qui prend les instructions de la charge utile de notification.

Quant au pourquoi... sur Android, onMessageReceived n'est appelé que lorsque :
*) il y a UNIQUEMENT une charge utile de notification et l'application est au premier plan
*) il y a une charge utile de notification ET une charge utile de données et l'application est au premier plan
*) il y a UNIQUEMENT une charge utile de données et l'application est au premier plan ou en arrière-plan

Donc, dans ces cas, onMessageReceived n'est PAS appelé :
*) il y a UNIQUEMENT une charge utile de notification et l'application est en arrière-plan
*) il y a une charge utile de notification ET une charge utile de données et l'application est en arrière-plan

En regardant le code, la seule façon pour le plugin de créer la notification est d'utiliser uniquement la charge utile de données, qui a à la fois des propriétés de titre et de texte, tandis que l'application est en arrière-plan.

Merci @blckshrk !! J'ai enfin réussi à faire ça !

J'utilise Ionic v2 et [email protected] :
Ionique : 2.2.2
Cordoue : 6.5.0
npm : 4.6.1

  1. Installez le plug-in de configuration personnalisée :
    $ ionic plugin add cordova-custom-config --fetch --save

  2. Téléchargez https://github.com/driftyco/ionic-package-hooks/blob/master/android_custom_resources.js et https://github.com/driftyco/ionic-package-hooks/blob/master/android_custom_values.js dans un nouveau répertoire appelé "package-hooks" (ou ce que vous voulez) à la racine de votre projet.
    package-hooks/android_custom_resources.js
    package-hooks/android_custom_values.js

  3. Créez les répertoires et fichiers suivants à la racine de votre projet (pas à l'intérieur des plates-formes) :
    resources/android/custom/notification_icon.png
    resources/android/values/styles.xml

notification_icon.png est votre icône de notification Android >= API 21. Le mien fait 144x144px et il a fière allure.

styles.xml contient :

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="red">#FF8614</color>
</resources>
  1. Modifiez le fichier config.xml. Important : Assurez-vous d'ajouter cet espace de noms dans la balise du 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>

Et c'est tout!

Je ne comprends pas où ajouter ce qui suit dans config.xml ? Des conseils là-dessus ? De plus, je ne suis pas vraiment familier avec XML, que dois-je ajouter exactement dans l'espace de noms ? @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 Désolé, je n'ai pas été là ces jours-ci. Jetez un œil au fichier d'origine (avec quelques éléments remplacés, bien sûr). J'espère que ça aide.

<?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 Merci beaucoup pour cela. J'ai lutté avec la version 0.1.24 toute la journée sans avoir de chance et votre solution a fonctionné. Pouvez-vous me dire pourquoi exactement cela fait fonctionner l'icône personnalisée ? J'ai suivi de très près les instructions du lisez-moi et il n'y a jamais eu qu'une icône grisée. Votre solution a fonctionné immédiatement... J'aimerais juste savoir pourquoi !

@ jskidd3 Heureux que cela ait aidé ! C'est vraiment très simple. Le plug-in cordova-custom-config vous permet d'apporter des modifications à la configuration finale de Cordova pour chaque plate-forme (Info.plist / AndroidManifest.xml). Ainsi, dans le bloc config-file, vous dites à la configuration du plugin pour Android de rechercher "default_notification_icon" dans le répertoire drawables sous le nouveau nom de "notification_icon" (le plugin gère l'extension de fichier si je me souviens bien). Ensuite, vous définissez la couleur de fond dans le bloc suivant (rouge). Maintenant, vous avez besoin d'un moyen d'obtenir ce fichier (notification_icon.png) au bon endroit au moment de la construction, vous avez donc besoin d'un crochet pour le faire. C'est android_custom_resources.js. Il prend tout ce qui se trouve dans resources/android/custom/* et le place dans les répertoires drawable de build (vous pouvez changer cela en éditant le script, mais c'est ok pour cette tâche). Similaire avec des styles de configuration supplémentaires. Vous créez ce fichier styles.xml ; définissez la couleur (je l'ai nommé "rouge" mais cela peut être ce que vous voulez) puis android_custom_values.js le copie dans le répertoire construit "platforms/android/res/values". Enfin, dans config.xml, vous liez ces scripts pour qu'ils s'exécutent à un certain moment. Pour cette tâche, ils doivent être copiés "after_prepare", ce qui signifie qu'après que Cordova a préparé les builds (encore une fois, si je me souviens bien... vous pouvez consulter la documentation des crochets de package d'Ionic pour plus de détails/événements).

La réponse de @alexbonhomme a fonctionné pour moi :) https://github.com/arnesson/cordova-plugin-firebase/issues/53#issuecomment -304573222

La décision de @shamank fonctionne partiellement pour moi.
J'utilise Angular + Cordova.

Tout fonctionne sauf une chose : android_custom_resources.js ne créera pas de dossiers (drawable-ldpi, drawable-mdpi etc.) et ne copiera pas de fichiers si les dossiers n'existent pas.

J'ai donc supprimé ce script et utilisé dans config.xml :

Remarque : les chemins peuvent être différents en raison de modifications personnalisées et [email protected] et > ont le dossier res/ à un autre endroit.

`

    <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" />`

Quoi qu'il en soit, merci @alexbonhomme et @shamank !

Pour Ionic 3 (plus spécifiquement pour cordova-android@7) dans les chemins de solution de @shamank à l'intérieur :
package-hooks/android_custom_resources.js package-hooks/android_custom_values.js
doit être mis à jour car le dossier res #$1$#$ se trouve maintenant dans platforms/android/app/src/main/ .

  1. aller à package-hooks/android_custom_resources.js et mettre à jour
    var platformDir = 'platforms/android';
    à
    var platformDir = 'platforms/android/app/src/main';

  2. aller à package-hooks/android_custom_values.js et mettre à jour
    var platformDir = platforms/android/res/values';
    à
    var platformDir = 'platforms/android/app/src/main/res/values';

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

michaelreiser picture michaelreiser  ·  5Commentaires

ghost picture ghost  ·  3Commentaires

matthitachi picture matthitachi  ·  5Commentaires

stephan-nordnes-eriksen picture stephan-nordnes-eriksen  ·  5Commentaires

arunkatariaoodles picture arunkatariaoodles  ·  4Commentaires