我在android studio上设置通知图标时遇到问题。
我设置了drawable文件夹,如下所示:
我还在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,但它确实有效。我收到的通知除了图标之外的所有内容)< / 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)
答案 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月):
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的值。
<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>
在透明背景上上传徽标的白色版本(单色)。如果您上传彩色版本,则会看到一个深灰色的图标,看起来很讨厌。如果您的徽标没有白色版本,请进行设计。其余设置保持不变。对于“名称”文本框值,输入: fcm_push_icon 。然后单击蓝色圆形按钮以下载zip文件。
在上述步骤中解压缩刚刚下载的zip文件,然后将其内容提取到文件夹中。您会注意到它包含一个 res 文件夹。如果您打开此文件夹,它将包含其他具有以下名称的文件夹:
每个文件夹都将包含一个名为“ fcm_push_icon.png”的PNG图标。这些不同文件夹中的图标之间的唯一区别是它们的大小。
yourApp/platforms/android/app/src/main/res
只需将以上第4点中列出的所有5个文件夹复制到正上方显示的位置,即复制到 res 文件夹中,即复制到yourApp/platforms/android/app/src/main/res
就是这样!现在,只需构建您的应用程序即可。每当您收到通知时,您都会在通知中看到您的应用程序图标(至少在Android上如此)。
如果有人知道如何在Android通知中显示彩色图标,请分享您的解决方案。