Cordova-plugin-firebase: プッシュ通知アむコンの倉曎-2018幎の空癜のAndroidアむコンの問題

䜜成日 2018幎07月06日  Â·  22コメント  Â·  ゜ヌス: arnesson/cordova-plugin-firebase

みなさん、こんにちは。

このプラグむンをcordova8 +で䜿甚しおいる堎合、通知アむコンを倉曎しおも機胜せず、Androidで叀い「通知アむコンは空癜の四角」の問題が発生するこずがありたす。 これは、Androidの通知アむコンが透明な背景にシンプルな1色の圢状である必芁があり、そのようなアむコンを提䟛しおいない堎合、Androidは代わりにアプリケヌションアむコンを䜿甚するために発生したす。 それらはおそらく、透明な背景のない完党でカラフルな正方圢です。

これは、新しいIonic 3プロゞェクトを蚭定し、このプラグむンを䜿甚しようずするずきに非垞に煩わしいものです。

Readme here atmは、アむコンを正しく倉曎するプロセスに぀いおは説明しおいたせん。 アむコンを倉曎するために必芁な手順は次のずおりです。

0グヌグルで髪を匕っ匵るのをやめたす。 この指瀺に埓っおください。そうすれば、それが機胜するようになりたす。私を信じおください。
1透明な背景に1色のみのアプリケヌションアむコンのバヌゞョンを準備したす
2ここに移動したすhttp//romannurik.github.io/AndroidAssetStudio/icons-notification.html#source.type=clipart&source.clipart=ac_unit&source.space.trim=1&source.space.pad=0&name=notification_icon「画像」を抌したす巊䞊にアむコンをアップロヌドし、必芁に応じおアむコンをトリミング/パディングを远加したす
3芋栄えが良い堎合は、右䞊の矢印を抌しお「描画可胜な」フォルダをダりンロヌドしたす。 resフォルダヌが内郚にあるzipず、それぞれアむコンのサむズが異なる5぀のdrawable-xxxフォルダヌが衚瀺されたす。
4これらのドロヌアブルフォルダをプロゞェクトのどこかにコピヌしたす。 私の堎合、アむコンずスプラッシュ画面のリ゜ヌスの暪にそれらをコピヌしたした project-root/resources/android/notification_icon
5 <resource-file />ディレクティブを䜿甚しお、Androidアプリ内にこれらのファむルをコピヌするようにconfig.xmlファむルを構成したす。 crodova 8.x以降、正しいタヌゲットパスはapp/src/main/resこずに泚意しおください。 cordova <8では、 res 以前はリ゜ヌスファむルはplatforms/android/resディレクトリに保存されおいたしたが、珟圚はplatforms/android/app/main/res 。 空癜のAndroid通知アむコンでオンラむンで「解決された」問題のほずんどはそれに぀いお蚀及しおいたせん。

<platform name="android">
(...) 
  <resource-file src="resources/android/notification_icon/drawable-mdpi/notification_icon.png" target="app/src/main/res/drawable-mdpi/notification_icon.png" />
  <resource-file src="resources/android/notification_icon/drawable-hdpi/notification_icon.png" target="app/src/main/res/drawable-hdpi/notification_icon.png" />
  <resource-file src="resources/android/notification_icon/drawable-xhdpi/notification_icon.png" target="app/src/main/res/drawable-xhdpi/notification_icon.png" />
  <resource-file src="resources/android/notification_icon/drawable-xxhdpi/notification_icon.png" target="app/src/main/res/drawable-xxhdpi/notification_icon.png" />
  <resource-file src="resources/android/notification_icon/drawable-xxxhdpi/notification_icon.png" target="app/src/main/res/drawable-xxxhdpi/notification_icon.png" />
</platform>

6描画可胜なリ゜ヌスずしおアプリケヌションにアむコンが衚瀺されたので、アプリケヌションにそれを䜿甚させる必芁がありたす。 ここでreadmeに䜕が曞かれおいるかに関係なく、「notification_icon」ず呌ばれる描画可胜なリ゜ヌスの自動怜出は機胜したせんでした。 https://github.com/arnesson/cordova-plugin-firebase/blob/master/src/android/FirebasePluginMessagingService.java#L140のコヌドベヌスにあるように芋えるので、理由は正確にはわかりたせんが、私はAndroidの最新バヌゞョンでのリ゜ヌス怜出で䜕かが倉曎されたず掚枬したす。
7そのため、私が䜿甚できる他の唯䞀の解決策は、Firebaseにプッシュ通知を送信するずきにバック゚ンドからiconパラメヌタヌを送信するこずでした。 ペむロヌドのnotificationずandroid郚分を正しくマヌゞする際に問題があるため、APIはおそらくいく぀かの倉曎が行われおいるこずに泚意しおください。 そのため、jsonのnotification郚分にアむコンパラメヌタを远加する必芁がありたす。 android固有のパラメヌタを䜿甚しおも機胜したせん。

そのため、バック゚ンドからFirebaseに送信する通知ペむロヌドは、次のようになっおいる必芁がありたす。これが機胜する唯䞀のバヌゞョンです。

{
  notification: {
    body: 'Imma push your notification if you know what i mean!',
    icon: 'notification_icon',
  },
  data: { someExtraData: 'goes_here' }
}

繰り返しになりたすが、2018幎7月の時点では、Android固有のパラメヌタの䜿甚はFirebaseでは機胜したせん-以䞋の機胜ず通知アむコンは、ドキュメントの内容に関係なく倉曎されたせん

{
  notification: {
    body: 'Imma push your notification if you know what i mean!'
  },
  data: { someExtraData: 'goes_here_if_you_need_it' },
  android: { 
    icon: 'notification_icon'
  } 
}

8すべおの手順が完了するず、新しいアむコンをテストする準備が敎いたす。 アンドロむド゚ミュレヌタヌ内でテストするこずを匷くお勧めしたす-いく぀かのアンドロむドスキンは通知バヌを匕き継ぎ、蚭定内容に関係なくアプリケヌションアむコンを䜿甚したす぀たり、xiaomiのMIUI。 たた、アむコンがキャッシュされるこずもありたす。 そのため、新しく䜜成したAVDのシミュレヌタヌでテストするのが最も安党な方法です。 テストの実行の間にアプリを手動で削陀し、キャッシュの問題を回避するためにシミュレヌタヌ/デバむスを再起動したす。

小さな10x10アむコンを倉曎するために盎面​​しなければならないハヌドルの量は、単に高くするこずであるため、この長い蚘事が将来他の人に圹立぀こずを願っおいたす...

最も参考になるコメント

このコヌドをconfig.xml <platform name="android">タグに远加するず、デフォルトの通知アむコンずしおアむコンが远加されるかどうかをテストしおください。

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

これは、Firebase CloudMessagingパネルたたはペむロヌドにアむコンがないバック゚ンドで送信する堎合に機胜したす。
ここにフィヌドバックを投皿しおください。
それが機胜する堎合、このコヌドに远加されたチュヌトリアルは倚くの人々を助け、それをREADMEに远加するためにPRを開く必芁がありたす。

党おのコメント22件

このコヌドをconfig.xml <platform name="android">タグに远加するず、デフォルトの通知アむコンずしおアむコンが远加されるかどうかをテストしおください。

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

これは、Firebase CloudMessagingパネルたたはペむロヌドにアむコンがないバック゚ンドで送信する堎合に機胜したす。
ここにフィヌドバックを投皿しおください。
それが機胜する堎合、このコヌドに远加されたチュヌトリアルは倚くの人々を助け、それをREADMEに远加するためにPRを開く必芁がありたす。

ありがずう@madsheep !! あなたは私の呜を救いたした 

こんにちは、道埳的なサポヌトに感謝し、この混乱に終わったのは私だけではないずいう気持ちを私に䞎えおくれたした。 しかし、残念ながら、私は前のステップ0に匕き戻され、途䞭で髪を倱いたした。

http / postメ゜ッドを䜿甚しお通知を送信しようずするず、FirebaseAPIからjsonが無効であるずいう゚ラヌが衚瀺されたす。 私は䞡方の方法を詊したした

これは、アむコンをmessage: { notification: { icon: 'notification_icon', ... }, ... }ずしお含めるず埗られるものです。

Error code=400, message=Invalid JSON payload received. Unknown name "icon" at 'message.notification': Cannot find field., status=INVALID_ARGUMENT, details=[@type=type.googleapis.com/google.rpc.BadRequest, fieldViolations=[field=message.notification, description=Invalid JSON payload received. Unknown name "icon" at 'message.notification': Cannot find field.]]

これは、アむコンをmessage: { android: { icon: 'notification_icon' }, ... }ずしお含めたずきに衚瀺されるメッセヌゞです。

Error code=400, message=Invalid JSON payload received. Unknown name "icon" at 'message.android': Cannot find field., status=INVALID_ARGUMENT, details=[@type=type.googleapis.com/google.rpc.BadRequest, fieldViolations=[field=message.android, description=Invalid JSON payload received. Unknown name "icon" at 'message.android': Cannot find field.]]

ただし、これを間違ったコンテキストで䜿甚しおいる可胜性がありたすFirebaseクラりドメッセヌゞングを䜿甚しおクラむアントアプリに通知を送信するバック゚ンドクラりドコヌド。

これは私にずっおはうたくいきたしたFirebase関数を䜿甚しお通知を送信したす
const payload = { notification: { title: ........, body: ........., icon: 'notification_icon' } };

おかげで、それは私にずっお2぀の゚ラヌの最初の結果になりたす。 JavaScript /リク゚ストラむブラリを介しおRESTサヌビスを䜿甚しおおり、 https//firebase.google.com/docs/cloud-messaging/js/first-messageの圢匏で送信しおいhttps://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages#Notificationで説明されおいるず思い

実際、これを読んだずき、これはアむコンがmessage.android.notification.icon 、぀たり1レベル深いはずであるこずを瀺唆しおいたす。

私はちょうど詊したした、そしおこれは実際に私のために働きたす したがっお、ペむロヌドをどのように構成するかは、serverprotocolに䟝存するず思いたす...

皆さん、この議論に感謝したす。 ぀いに髪の毛を抜くのをやめたした...

解決されたずおりに閉じる

@madsheep動䜜しおいたせん。 クラりド機胜の通知の䞋に「アむコン」を远加するず、次の゚ラヌが発生したす。

{ Error: Invalid JSON payload received. Unknown name "icon" at 'message.notification': Cannot find field

errorInfo
{コヌド 'メッセヌゞング/無効な匕数'、
メッセヌゞ '無効なJSONペむロヌドを受信したした。 'message.notification'の䞍明な名前 "icon"フィヌルドが芋぀かりたせん。 }、
codePrefix 'メッセヌゞ'}

しおみおくださいmessage.android.notification.iconの代わりにmessage.notification.icon 。

@madsheep @guilhermehtkそれは私のために働いた どうも。

このコヌドをconfig.xml <platform name="android">タグに远加するず、デフォルトの通知アむコンずしおアむコンが远加されるかどうかをテストしおください。

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

これは、Firebase CloudMessagingパネルたたはペむロヌドにアむコンがないバック゚ンドで送信する堎合に機胜したす。
ここにフィヌドバックを投皿しおください。
それが機胜する堎合、このコヌドに远加されたチュヌトリアルは倚くの人々を助け、それをREADMEに远加するためにPRを開く必芁がありたす。

あなたはちょうど私の日を䜜りたした、

ビルドで問題が発生した堎合

AAPT゚ラヌバむンドされおいないプレフィックス。

次に、を远加しおみおください

xmlnsandroid = " http://schemas.android.com/apk/res/android "

属性をルヌトに远加する必芁がありたすconfig.xml内のタグ

あなたは私の日を救った

2019幎にAndroidビルド7.1.1でこの問題に盎面しおいる人にずっおは、リ゜ヌスフォルダヌが倉曎されたようです!!

Android Studioず生成されたファむルを確認するず、次のようになりたす。

<resource-file src="resources/android/notification/notification_icon.png" target="app/src/main/res/drawable/notification_icon.png" />
<config-file parent="/manifest/application/" target="app/src/main/AndroidManifest.xml">
            <meta-data android:name="com.google.firebase.messaging.default_notification_icon" android:resource="@drawable/notification_icon" />
</config-file>

1行目は私にずっお間違っおいたので重芁な郚分です。

@alarv䞀郚のAndroidスマヌトフォンではアむコンが衚瀺されたせん。ヘルプが必芁な堎合は、こちらをご芧ください。

ねえ@bioyeneyeどのモデル 圌らはどのバヌゞョンのAndroidを実行しおいたすか 圚庫か他か

@bioyeneyeすべおのAndroidデバむスでアむコンを機胜させるための
アむコンにpngではなくXMLを䜿甚しおいたす。 私はこれを次のdirsに含めるためにフックを䜿甚しおいたす

'res/drawable-hdpi',
'res/drawable-mdpi',
'res/drawable-xhdpi',
'res/drawable-xxhdpi',
'res/drawable-xxxhdpi',
'res/mipmap-hdpi',
'res/mipmap-mdpi',
'res/mipmap-xhdpi',
'res/mipmap-xxhdpi',
'res/mipmap-xxxhdpi'

ファむルの䟋を䜜成したす。
android_notification_resources.js

この新しいフックファむルに次を远加したす。


// 始める
const fs = require "fs";
const path = require "path";
const Q = require "q";

var sourceDir = 'resources / android / notify_icon'; //これはあなたのアむコンがある堎所です
var platformDir = 'platforms / android / app / src / main /';
var resourceDirs = [
'res / drawable-hdpi'、
'res / drawable-mdpi'、
'res / drawable-xhdpi'、
'res / drawable-xxhdpi'、
'res / drawable-xxxhdpi'、
'res / mipmap-hdpi'、
'res / mipmap-mdpi'、
'res / mipmap-xhdpi'、
'res / mipmap-xxhdpi'、
'res / mipmap-xxxhdpi'
];

module.exports = functionctx{

ifctx.opts.platforms.indexOf 'android'<0{
戻る;
}

var deferred = Q.defer;
var androidPlatformDir = path.joinctx.opts.projectRoot、platformDir;
var customResourcesDir = path.joinctx.opts.projectRoot、sourceDir;

関数copysrc、dest{
var deferred = Q.defer;

fs.stat(src, function(err, stats) {
  if (err || !stats.isFile()) {
    return deferred.reject(err);
  }

  fs.stat(path.dirname(dest), function(err, stats) {
    if (err || !stats.isDirectory()) {
      return deferred.reject(err);
    }

    var rs = fs.createReadStream(src);

    rs.on('error', function(err) {
      console.error(err.stack);
      deferred.reject(err);
    });

    var ws = fs.createWriteStream(dest);

    ws.on('error', function(err) {
      console.error(err.stack);
      deferred.reject(err);
    });

    ws.on('close', function() {
      deferred.resolve();
    });

    rs.pipe(ws);
  });
});

return deferred.promise;

}

fs.statcustomResourcesDir、functionerr、stats{
iferr ||stats.isDirectory{
deferred.resolve;を返したす。
}

fs.readdir(customResourcesDir, function(err, files) {
  var copies = [];

  for (var i in files) {
    for (var j in resourceDirs) {
      var filePath = path.join(ctx.opts.projectRoot, sourceDir, files[i]);
      var destPath = path.join(androidPlatformDir, resourceDirs[j], files[i]);

      copies.push([filePath, destPath]);
    }
  }

  copies.map(function(args) {
    return copy.apply(copy, args);
  });

  Q.all(copies).then(function(r) {
    deferred.resolve();
  }, function(err) {
    console.error(err.stack);
    deferred.reject(err);
  });
});

};

deferred.promiseを返したす。
}
// 終わり


config.xmlに次の行を远加しお、フックを含めたす。

フックが行うこずは、リ゜ヌスフォルダヌからアむコンをコピヌし、それを別のドロヌアブルフォルダヌに远加するこずです。 これは、すべおのデバむスで機胜するこずを確認するために行いたした。 ここたでは順調ですね。

それがあなたのために働いたかどうか私に知らせおください 也杯

@RobinGielありがずう、私はionic 3を䜿甚しおいたすが、これは機胜したすか

こんにちは@Flucadetena
Android 9
Cordovaプラットフォヌムandroid 7.1.1

@bioyeneye私もむオン3を䜿甚しおいたす。 すべおをチェックしおお知らせしたす。 ;

@bioyeneyeはい、そうなりたす。フックから数行を倉曎する必芁がありたす。

var sourceDir = 'resources / android / notify_icon';
var platformDir = 'platforms / android';

そしお倚分constQ = require "q";を䜿甚する代わりにその行を削陀しお、ここで䜿甚したす。䟋

module.exports = functionctx{

ifctx.opts.platforms.indexOf 'android'<0{
戻る;
}

var Q = ctx.requireCordovaModule 'q'; //ここで䜿甚したす
var deferred = Q.defer;
var androidPlatformDir = path.joinctx.opts.projectRoot、platformDir;
var customResourcesDir = path.joinctx.opts.projectRoot、sourceDir;


同じフックbefore_buildずbefore_runの䟋を呌び出すconfig.xmlを远加したす。

<hook type="before_run"         src="hooks/android_notification_resources.js" />
<hook type="before_build"       src="hooks/android_notification_resources.js" />

このコヌドをconfig.xml <platform name="android">タグに远加するず、デフォルトの通知アむコンずしおアむコンが远加されるかどうかをテストしおください。

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

これは、Firebase CloudMessagingパネルたたはペむロヌドにアむコンがないバック゚ンドで送信する堎合に機胜したす。
ここにフィヌドバックを投皿しおください。
それが機胜する堎合、このコヌドに远加されたチュヌトリアルは倚くの人々を助け、それをREADMEに远加するためにPRを開く必芁がありたす。

あなたはちょうど私の日を䜜りたした、

ビルドで問題が発生した堎合

AAPT゚ラヌバむンドされおいないプレフィックス。

次に、を远加しおみおください

xmlnsandroid = " http://schemas.android.com/apk/res/android "

config.xml内のルヌトタグに属性を远加する必芁がありたす

これは私にずっおはうたくいきたすが、アむコンは信じられないほど小さいようです。䜿甚する必芁のあるファむルの適切なサむズはどれくらいですか

線集256x256を远加したしたが、ステヌタスバヌに小さな点が衚瀺されたす。 ステヌタスバヌを䞀番䞋にドラッグするず、少し倧きいステヌタスバヌが衚瀺されたす

これは

あなたは私の呜の恩人です ありがずう
ノヌト
アむコンの色に倉曎するために、通知セクションに色を远加したす 'e50012'あなたの色に倉曎しおください。
元
{{
"名前" "my_notification"、
"お知らせ" {
「本䜓」「通知本䜓」、
"タむトル" "通知タむトル"、
"色" "e50012"
}、
"デヌタ"{ ... }
}

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡