Cordova-plugin-firebase: Ícone da barra de status do Android - tudo branco

Criado em 13 set. 2016  ·  25Comentários  ·  Fonte: arnesson/cordova-plugin-firebase

Oi,
Eu tenho tentado encontrar uma maneira de alterar o ícone exibido em uma barra de status do Android quando uma notificação por push é entregue. Segue um exemplo do que está acontecendo:

screenshot_2016-09-13-08-53-22

Como você pode ver, o ícone do meu aplicativo não é uma imagem transparente. Se eu mudar para uma imagem transparente, o ícone de push fica bem, mas o ícone do aplicativo agora é a imagem transparente e não é isso que eu quero. Eu tentei diferentes variações de nomes de arquivos, mas nada parece funcionar. Ao olhar para o código, src/android/FirebasePluginMessagingService.java na linha 73, há isto:
.setSmallIcon(getApplicationInfo().icon)

Estou correto em dizer que você não pode definir um ícone diferente do ícone do seu aplicativo?
Seria possível definir um arquivo diferente para o ícone da barra de status?
Ou alguma outra sugestão sobre como contornar este problema?

Comentários muito úteis

Obrigado @blckshrk !! Finalmente consegui fazer isso!

Estou usando Ionic v2 e [email protected] :
Iônico: 2.2.2
cordão: 6.5.0
npm: 4.6.1

  1. Instale o plugin custom-config:
    $ ionic plugin add cordova-custom-config --fetch --save

  2. Baixe https://github.com/driftyco/ionic-package-hooks/blob/master/android_custom_resources.js e https://github.com/driftyco/ionic-package-hooks/blob/master/android_custom_values.js em um novo diretório chamado "package-hooks" (ou o que você quiser) na raiz do seu projeto.
    package-hooks/android_custom_resources.js
    package-hooks/android_custom_values.js

  3. Crie os seguintes diretórios e arquivos na raiz do seu projeto (não dentro das plataformas):
    resources/android/custom/notification_icon.png
    resources/android/values/styles.xml

notification_icon.png é o ícone de notificação do seu Android >= API 21. O meu é 144x144px e parece ótimo.

styles.xml contém:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="red">#FF8614</color>
</resources>
  1. Edite config.xml. Importante : certifique-se de adicionar esse namespace na tag do 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>

E isso é tudo!

Todos 25 comentários

Eu não testei isso, mas você deve ser capaz de definir um ícone personalizado criando fcm_push_icon.png em todos os tamanhos necessários. Como padrão, o ícone do aplicativo será usado se fcm_push_icon.png não existir. Os ícones devem estar na árvore de pastas android/res.

você pode usar isso para gerar todos os tamanhos diferentes: http://romannurik.github.io/AndroidAssetStudio/icons-notification.html

Olá, estamos enfrentando o mesmo problema. Tentamos colocar ícones fcm_push_icon.png na árvore de pastas android/res, mas o ícone de notificação ainda está branco.

@MikeBateman você encontrou uma solução?

Olá, para contornar o problema, você pode alterar o sdk de destino do seu aplicativo, verifique isso , mas é claro que não é uma solução adequada.

Estive pesquisando e obtive esta solução:

Vá para esta rota src/android/FirebasePluginMessagingService.java e encontre esta linha .setSmallIcon(getApplicationInfo().icon) (como @MikeBateman mencionado), agora adicione uma condição que irá verificar se o aplicativo está rodando no android lollipop+, se for verdade a notificação deve usar um ícone do material design, se não for, usará o ícone do aplicativo padrão, o 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;
    }

Acho que o melhor seria apenas colocar o ícone do seu material design no myappresources e o plugin fazer esse trabalho sozinho, agora não sei como fazer isso, se alguém puder seria ótimo, espero que ajude! @delphaber

fixado em 33c52c7e8a1835d5f595e58eaef43e4f49b4b23a

o plugin agora usará notification_icon no drawable, se existir. caso contrário, ele usará o ícone do aplicativo padrão

Ei,

Eu não entendo. Eu tento colocar um notification_icon.png em cada pasta drawable (para cada tamanho), mas o plugin ainda usa o padrão (ícone do aplicativo). Eu perdi alguma coisa?

Obrigado!

@blckshrk cc/ @robertarnesson

Eu encontrei a mesma coisa enquanto depois de atualizar os arquivos src do Android e adicionar todos os arquivos notification_icon.png eu ainda estava vendo o quadrado branco. Acabei seguindo o conselho daqui: http://stackoverflow.com/questions/37325051/notification-icon-with-the-new-firebase-cloud-messaging-system

Primeiro, tive que atualizar meu Google Repository para tornar o SDK do Firebase mais recente no meu computador. Esta é a versão 9.8.0 por com.google.firebase:firebase-core no momento em que escrevo isso e eu fazendo com que funcione. (Eu estava em 9.4.0 antes)

Então eu adicionei isso ao meu AndroidManifest.xml :

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

Se você quiser usar a opção deles para alterar o default_notification_color você precisa adicionar o seguinte. Nosso ícone é um ícone branco com fundo transparente, então adicionamos nossa própria cor atrás do que é legal na tela de bloqueio.

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

Você também precisa adicionar um arquivo res/values/colors.xml com o seguinte, que é sua própria escolha de cor, é claro, se você estiver configurando o plano de fundo:

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

Tudo isso funciona a partir do Firebase 9.8.0

@blckshrk como você adiciona os ícones ao projeto? você precisa usar o config.xml do seu projeto para adicioná-los aos recursos. apenas colocá-los na pasta não os tornará visíveis para o código até onde eu sei

Atualmente estou usando o Ionic 2 para criar meu aplicativo e fazendo o seguinte:
Eu adicionei arquivos de ícone à pasta res do ionic, portanto, se eu executar o comando ionic resources as imagens para diferentes tamanhos de tela serão criadas.

Isso também adiciona os caminhos da imagem ao arquivo config.xml .

Alguém pode, por favor, dar uma resposta detalhada sobre o que exatamente precisa ser feito ..

  • Como onde os arquivos precisam ser adicionados em qual pasta exatamente para Android
  • eles precisam ser adicionados no arquivo config.xml
  • qual é o tamanho da imagem dos arquivos

Não tenho conhecimento do código nativo do Android e da estrutura de pastas, portanto, responda de acordo.

-Obrigado

Na verdade, como @prantikv , estou um pouco perdido. Eu uso Ionic 1 (mas com o mesmo fluxo de trabalho). Eu tentei colocar meu ícone em res/drawable/ e usar cordova-custom-config para adicionar <meta-data android:name="com.google.firebase.messaging.default_notification_icon" android:resource="@drawable/notification_icon" /> no meu AndroidManifest.xml (no nó manifest diretamente), mas nada funciona como esperado.

@gylippus Eu não entendo a parte com.google.firebase:firebase-core . Como você verifica a versão?

Obrigado rapazes!

@robertarnesson @gylippus Você tem um exemplo prático?

Eu consegui fazê-lo funcionar com 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>

e platforms/android/res/drawable/notification_icon.png

Muito obrigado por sua ajuda !

Pode ser ótimo ter um gancho para fazer este trabalho automaticamente (mover o arquivo e editar o manifesto) se um notification_icon.png estiver na pasta raiz (ou resources ) (como é para o arquivos de configuração). O que achou disso?

@blckshrk
Eu tentei adicionar o seguinte código como você mencionou

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

Mas recebo o seguinte erro durante o processo de compilação

: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

Em seguida, adicionei manualmente o seguinte ao AndroidManifest.xml
<meta-data android:name="com.google.firebase.messaging.default_notification_icon" android:resource="@drawable/notification_icon" />

E funcionou para o Android 4.4 Mas não está funcionando para o Android 5.1.

Para qual versão você construiu?
Você também adicionou o arquivo notification_icon.png em todas as pastas drawable ou apenas uma?

@prantikv Você instalou https://github.com/dpa99c/cordova-custom-config ?

Na verdade, eu uso este gancho https://github.com/driftyco/ionic-package-hooks/blob/master/android_custom_resources.js para mover automaticamente o arquivo notification_icon.png para cada pasta desenhável.

Basicamente eu tenho isso dentro do nó <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

Também consegui lidar com a cor usando este gancho https://github.com/driftyco/ionic-package-hooks/blob/master/android_custom_values.js e a solução proposta por @gylippus (obrigado!)

@blckshrk Sim, eu instalei o plugin.. Você pode me informar o tamanho da imagem que você está usando.. As dimensões da imagem, bem como o tamanho em KB.
E a plataforma que você testou.

Alguma atualização sobre isso? 20 dias agora e ainda sem solução? Não pode ser fechado se ainda for um problema?!

Eu tive o mesmo problema e consegui resolvê-lo do lado do servidor. Coloquei manualmente o ícone nas pastas drawable dentro da pasta platform-android com o nome notification_icon.png.
Pelo console do Firebase continuo vendo o ícone errado, mas em um servidor próprio eu envio o seguinte como corpo da requisição:

$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 esta ajuda

Na verdade, depois de algum registro e leitura, parece-me que todo o código notificationBuilder em FirebasePluginMessagingService.java / sendNotification é discutível, pois nunca é executado quando há uma carga útil de notificação. Além do problema do ícone, também comecei a suspeitar disso, pois o código do notificationBuilder faz um .setSound(defaultSoundUri), mas nunca é reproduzido quando as notificações chegam na bandeja.

É por isso que a solução do sergiojup acima funciona, pois a notificação não está sendo construída pelo código do plugin, mas pelo próprio FCM, que recebe instruções da carga de notificação.

Quanto ao porquê.. no Android, onMessageReceived só é chamado quando:
*) existe APENAS uma carga útil de notificação e o aplicativo está em primeiro plano
*) há uma carga útil de notificação E carga útil de dados e o aplicativo está em primeiro plano
*) existe APENAS uma carga útil de dados e o aplicativo está em primeiro plano ou em segundo plano

Portanto, nesses casos, onMessageReceived NÃO é chamado:
*) existe APENAS uma carga útil de notificação e o aplicativo está em segundo plano
*) há uma carga útil de notificação E carga útil de dados e o aplicativo está em segundo plano

Olhando para o código, a única maneira de fazer o plugin construir a notificação é usar apenas a carga útil de dados, que tem propriedades de título e texto, enquanto o aplicativo está em segundo plano.

Obrigado @blckshrk !! Finalmente consegui fazer isso!

Estou usando Ionic v2 e [email protected] :
Iônico: 2.2.2
cordão: 6.5.0
npm: 4.6.1

  1. Instale o plugin custom-config:
    $ ionic plugin add cordova-custom-config --fetch --save

  2. Baixe https://github.com/driftyco/ionic-package-hooks/blob/master/android_custom_resources.js e https://github.com/driftyco/ionic-package-hooks/blob/master/android_custom_values.js em um novo diretório chamado "package-hooks" (ou o que você quiser) na raiz do seu projeto.
    package-hooks/android_custom_resources.js
    package-hooks/android_custom_values.js

  3. Crie os seguintes diretórios e arquivos na raiz do seu projeto (não dentro das plataformas):
    resources/android/custom/notification_icon.png
    resources/android/values/styles.xml

notification_icon.png é o ícone de notificação do seu Android >= API 21. O meu é 144x144px e parece ótimo.

styles.xml contém:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="red">#FF8614</color>
</resources>
  1. Edite config.xml. Importante : certifique-se de adicionar esse namespace na tag do 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>

E isso é tudo!

Eu não entendo onde adicionar o seguinte em config.xml? Dicas sobre isso? Além disso, não estou muito familiarizado com XML, o que devo adicionar exatamente no namespace? @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 Desculpe, eu não estive por aqui esses dias. Dê uma olhada no arquivo original (com algumas coisas substituídas, é claro). Espero que ajude.

<?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 Muito obrigado por isso. Tenho lutado com a versão 0.1.24 o dia todo sem sorte e sua solução funcionou. Você pode me informar por que exatamente isso faz com que o ícone personalizado funcione? Eu segui as instruções no leia-me muito de perto e ele só mostrou um ícone acinzentado. Sua solução funcionou imediatamente... Eu só gostaria de saber o porquê!

@jskidd3 Que bom que ajudou! É realmente muito simples. O plug-in cordova-custom-config permite fazer alterações na configuração final do Cordova para cada plataforma (Info.plist / AndroidManifest.xml). Então, no bloco config-file, você diz à configuração do plug-in para Android para procurar por "default_notification_icon" no diretório drawables sob o novo nome de "notification_icon" (o plug-in lida com a extensão do arquivo, se bem me lembro). Então você define a cor de fundo no próximo bloco (vermelho). Agora você precisa de uma maneira de colocar esse arquivo (notification_icon.png) no lugar certo no momento da construção, então você precisa de um gancho para fazer isso. Isso é android_custom_resources.js. Ele pega o que estiver em resources/android/custom/* e coloca nos diretórios drawable do build (você pode mudar isso editando o script, mas está ok para esta tarefa). Semelhante com estilos de configuração adicionais. Você cria este arquivo styles.xml; defina a cor (eu a chamei de "vermelho", mas pode ser o que você quiser) e então android_custom_values.js copia para o diretório construído "platforms/android/res/values". Por fim, no config.xml você vincula esses scripts para serem executados em um determinado momento. Para esta tarefa, eles precisam ser copiados "after_prepare", o que significa que, depois que o Cordova preparou as compilações (novamente, se bem me lembro... você pode verificar os documentos de ganchos de pacotes do Ionic para mais detalhes/eventos).

A resposta de @alexbonhomme funcionou para mim :) https://github.com/arnesson/cordova-plugin-firebase/issues/53#issuecomment -304573222

A decisão de @shamank funciona para mim parcialmente.
Estou usando Angular + Cordova.

Tudo funciona, exceto uma coisa: android_custom_resources.js não criará pastas (drawable-ldpi, drawable-mdpi etc.) e não copiará arquivos se as pastas não existirem.

Então eu removi esse script e usei no config.xml:

Nota: os caminhos podem ser diferentes devido a alterações personalizadas e [email protected] e > possui a pasta res/ em outro local.

`

    <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 qualquer forma, obrigado @alexbonhomme e @shamank !

Para Ionic 3 (mais especificamente para cordova-android@7) nos caminhos de solução do @shamank dentro:
package-hooks/android_custom_resources.js package-hooks/android_custom_values.js
deve ser atualizado porque a pasta res está dentro platforms/android/app/src/main/ agora.

  1. vá para package-hooks/android_custom_resources.js e atualize
    var platformDir = 'platforms/android';
    para
    var platformDir = 'platforms/android/app/src/main';

  2. vá para package-hooks/android_custom_values.js e atualize
    var platformDir = platforms/android/res/values';
    para
    var platformDir = 'platforms/android/app/src/main/res/values';

Esta página foi útil?
0 / 5 - 0 avaliações