我已经成功地在我的Xamarin iOS应用程序中设置了firebase云消息。当我通过firebase控制台发送消息时,一切都很好。在我的后端,我添加了用于dotnet的Firebase管理SDK,并尝试发送"数据";以这种方式向我的iOS应用程序发送消息:
首先,使用普通消息主题:
var iOSMsg = new Message()
{
Topic = iOSDemoUsersTopic,
Apns = new ApnsConfig
{
Headers = new Dictionary<string, string>
{
{ "priority", "high" }
},
Aps = new Aps
{
ContentAvailable = true,
MutableContent = true
}
},
Data = notificationData.ToDictionary(kv => kv.Key, kv => kv.Value.ToString())
};
var response = await FirebaseMessaging.DefaultInstance.SendAsync(message);
这种方法没有奏效。由于我只有在应用程序打开时才会收到消息,所以当它关闭时,我将不再收到通知。
然后我决定尝试旧的多播消息,跳下去就可以了。我做了如下:
var msg = new MulticastMessage
{
Apns = new ApnsConfig
{
Headers = new Dictionary<string, string>
{
{ "priority", "high" }
},
Aps = new Aps
{
ContentAvailable = true,
MutableContent = true,
}
},
Data = notificationData.ToDictionary(kv => kv.Key, kv => kv.Value.ToString()),
Tokens = iOSTokens.ToList()
};
var response = await FirebaseMessaging.DefaultInstance.SendMulticastAsync(msg);
但是,这个东西的行为仍然是一样的。在android上,我可以在后台接收消息,当应用程序被杀时,它们是数据消息。我已经尝试了一百万种东西,有人能帮忙吗?
最后,我找到了一个解决方案。我的通知发送得很好,但当iOS收到时,没有找到aps
的alert
对象,因此操作系统无法显示通知。
为了使该属性可用;通知"属性也应该在消息中设置。
var msg = new Message
{
Apns = new ApnsConfig
{
Aps = new Aps
{
ContentAvailable = true,
MutableContent = true,
}
},
Notification = new Notification
{
Body = body,
Title = title
},
Data = notificationData.ToDictionary(kv => kv.Key, kv => kv.Value.ToString()),
Topic = iOSDemoUsersTopic
};
因此,在添加通知属性后,一切都很顺利。