web-dev-qa-db-ja.com

Firebase Cloud Messaging:Androidで通知アイコンを設定する方法は?

Android studio。の通知アイコンの設定に問題があります。

次のように描画可能なフォルダーを設定します。

enter image description here

また、AndroidManifest.xmlファイルにデフォルトアイコンを設定しました。

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

そして、ここでアイコンフィールドを_notification_icon_に設定しています: https://developers.google.com/cloud-messaging/http-server-ref#downstream-http-messages-json (ps私はそれがGCMであることを知っていますが、それは動作します。アイコン以外のすべての通知を受信して​​います)

私は何が欠けていますか?私が見るのは灰色の円の中の白い正方形だけです。

これは私のバックエンドコードです:Pushex.Push(%{title: user.name, body: "message goes here", badge: 1, sound: "default", icon: "notification_icon"}, to: user.fcm_token, using: :gcm)https://github.com/tuvistavie/pushex

11
bigpotato

このコードを確認してください。それはあなたを助けるかもしれません。

 public class MyFirebaseMessagingService extends FirebaseMessagingService {
            private static final String TAG = "FCM Service";

            @Override
            public void onMessageReceived(RemoteMessage remoteMessage) {       
                Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
                            Intent intent = new Intent(getApplicationContext(), YourClass.class);
                    PendingIntent contentIntent = PendingIntent.getActivity(getApplicationContext(), NotificationID.getID(), intent,
                            PendingIntent.FLAG_UPDATE_CURRENT);
                    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(getApplicationContext())
                            .setSmallIcon(getNotificationIcon())
                            .setContentTitle(remoteMessage.getData().get("title"))
                            .setContentText(remoteMessage.getData().get("body"))
                            .setAutoCancel(true)
                            .setSound(defaultSoundUri)
                            .setStyle(new NotificationCompat.BigTextStyle().bigText(remoteMessage.getData().get("body")))
                            .setContentIntent(contentIntent);
                    NotificationManager notificationManager =
                            (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
                    notificationManager.notify(NotificationID.getID(), notificationBuilder.build());
            }
            private int getNotificationIcon() {
                boolean useWhiteIcon = (Android.os.Build.VERSION.SDK_INT >= Android.os.Build.VERSION_CODES.Lollipop);
                //If the build version is higher than KitKat we need to create Silhouette icon. 
                return useWhiteIcon ? R.mipmap.ic_notification : R.mipmap.ic_launcher;
            }

            public static class NotificationID {
                private static final AtomicInteger c = new AtomicInteger(0);

                public static int getID() {
                    return c.incrementAndGet();
                }
            }
        }

ビルドバージョンがキットカットよりも高い場合、Silhouetteアイコンを作成する必要があります。そのオンラインツールについては、参照してください: https://romannurik.github.io/AndroidAssetStudio/icons-notification.html

3
EKN

ただし、SDK 9.8.0では、デフォルトをオーバーライドできます! 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/google_blue" />

そして

<manifest>
<application 
    Android:icon="@drawable/icon" 
    Android:label="@string/app_name">

    <!-- Add your meta-data here-->

    <activity 
        Android:name=".MainActivity" 
        Android:label="@string/app_name">

        <intent-filter>
            <action Android:name="Android.intent.action.MAIN" />
            <category Android:name="Android.intent.category.LAUNCHER" />
        </intent-filter>

    </activity>

</application>

それを修正した...これはとても愚かです。この答えに触発されました: https://stackoverflow.com/a/28387744/1555312

通知アイコンをアプリアイコンにしました:

<meta-data
    Android:name="com.google.firebase.messaging.default_notification_icon"
    Android:resource="@mipmap/ic_launcher" />

そして、Android/app/build.gradle...

defaultConfig {
    targetSdkVersion 20 // this has to be < 21
    ...
}

誰かの命を何時間も節約したい

2
bigpotato

私は FCMプラグイン を使用していますが、これが私にとって有効なものです(2019年9月):1. Inconfig.xml(yourapp/config.xml)末尾のタグに次を追加しますxmlns:Android="http://schemas.Android.com/apk/res/Android"

次のようになります。

<widget id="com.mydomain.app" version="1.0.0" 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">

または、上記の行をコピーし、ウィジェットIDの値を独自の値に置き換えます。

  1. 同じconfig.xmlファイル:に対応するタグの直前に、これを追加します。
<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/fcm_Push_icon" />
</config-file>
  1. 次のリンクにアクセスしてください。 通知アイコンジェネレーター

白のバージョン(単色)のロゴを透明な背景にアップロードします。色付きのバージョンをアップロードすると、暗い灰色のアイコンが表示され、見た目が悪くなります。ロゴの白色バージョンがない場合は、設計してください。残りの設定はそのままにします。 [名前]テキストボックスの値として、fcm_Push_iconを入力します。次に、青色の丸いボタンをクリックしてZipファイルをダウンロードします。

  1. 上記の手順でダウンロードしたZipファイルを解凍し、その内容をフォルダーに抽出します。 resフォルダーが含まれていることがわかります。このフォルダーを開くと、次の名前の他のフォルダーが含まれます。

    • drawable-hdpi
    • drawable-mdpi
    • drawable-xhdpi
    • drawable-xxhdpi
    • drawable-xxxhdpi

これらの各フォルダーには、「fcm_Push_icon.png」という名前のPNGアイコンが含まれます。これらの異なるフォルダのアイコンの唯一の違いは、サイズです。

  1. アプリで次のファイルパスを開きます(存在しない場合は、以下に示すように作成します)。

yourApp/platforms/Android/app/src/main/res

上記のポイント4にリストされている5つのフォルダーすべてを、すぐ上に示されている場所にコピーします。つまり、resフォルダーに、つまりyourApp/platforms/Android/app/src/main/res

それでおしまい!次に、アプリをビルドします。通知を受け取るたびに、通知にアプリアイコンが表示されます(少なくともAndroidの場合)。

Android通知に色付きのアイコンを表示する方法を見つけた人は、ソリューションを共有してください。

1
Devner