Firebase云消息传递:如何在Android上设置通知图标?

时间:2017-06-30 11:50:52

标签: android firebase react-native firebase-cloud-messaging

我在android studio上设置通知图标时遇到问题。

我设置了drawable文件夹,如下所示:

enter image description here

我还在AndroidManifest.xml文件中设置了默认图标:

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

在这里我将图标字段设置为notification_iconhttps://developers.google.com/cloud-messaging/http-server-ref#downstream-http-messages-json(ps我知道这是GCM,但它确实有效。我收到的通知除了图标之外的所有内容)< / p>

我错过了什么?我只看到一个灰色圆圈内的白色方块。

这是我的后端代码: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

4 个答案:

答案 0 :(得分:3)

检查此代码。它可能对你有帮助。

 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();
                }
            }
        }

如果构建版本高于kitkat,我们需要创建Silhouette图标。因为这个在线工具可用         参阅:https://romannurik.github.io/AndroidAssetStudio/icons-notification.html

答案 1 :(得分:2)

但是,使用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>

答案 2 :(得分:2)

修正了......这太愚蠢了。受到这个答案的启发: 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
    ...
}

希望我节省其他人的生命时间

答案 3 :(得分:1)

我正在使用FCM plugin,这是对我有用的方法(2019年9月):

  1. config.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. 访问以下链接: Notification Icon Generator

在透明背景上上传徽标的白色版本(单色)。如果您上传彩色版本,则会看到一个深灰色的图标,看起来很讨厌。如果您的徽标没有白色版本,请进行设计。其余设置保持不变。对于“名称”文本框值,输入: 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通知中显示彩色图标,请分享您的解决方案。