Я просто решил эту проблему, загрузив изображение, пока получаю данные изображения из FCM. Вот мой код.
void SendNotification(string messageBody, IDictionary<string, string> data, RemoteMessage message)
{
var intent = new Intent(this, typeof(MainActivity));
intent.AddFlags(ActivityFlags.ClearTop);
foreach (var key in data.Keys)
{
intent.PutExtra(key, data[key]);
}
var pendingIntent = PendingIntent.GetActivity(this,
MainActivity.NOTIFICATION_ID,
intent,
PendingIntentFlags.OneShot);
//var test = message.GetNotification().Body;
string title = data["title"];
string body = data["body"];
string imageReceived = data["image"]; //It contains image URL.
GetImageBitmapFromUrl(imageReceived); // This method will download image from URL.
var notificationBuilder = new NotificationCompat.Builder(this, MainActivity.CHANNEL_ID)
.SetSmallIcon(Resource.Drawable.logo)
.SetContentTitle(title)
.SetContentText(body)
.SetStyle(new NotificationCompat.BigPictureStyle().BigPicture(imageBitmap)) //// This will show the image in system tray.
.SetAutoCancel(true)
.SetContentIntent(pendingIntent);
var notificationManager = NotificationManagerCompat.From(this);
notificationManager.Notify(MainActivity.NOTIFICATION_ID, notificationBuilder.Build());
}
Код для загрузки изображения, если есть ссылка в ключе изображения в Data IDictionary.
Bitmap imageBitmap = null;
Bitmap roundedImage = null;
public Bitmap GetImageBitmapFromUrl(string url)
{
using (var webClient = new System.Net.WebClient())
{
var imageBytes = webClient.DownloadData(url);
if (imageBytes != null && imageBytes.Length > 0)
{
imageBitmap = BitmapFactory.DecodeByteArray(imageBytes, 0, imageBytes.Length);
roundedImage = Bitmap.CreateScaledBitmap(imageBitmap, 300, 300, false);
//roundedImage = getRoundedShape(resizedImage);
}
webClient.Dispose();
}
return roundedImage;
}
Данные, которые я отправляю в FCM через REST API. Благодаря @Harikrishnan, сначала я использовал объект nofitication, он работал, но в нем не было данных изображения.
var data = new
{
to = "/topics/ALL", // Recipient device token
data = new {
title = "Test",
body = "Message",
image = "https://cdn.pixabay.com/photo/2015/05/15/14/38/computer-768608_960_720.jpg"
},
};