我目前正在使用Azure Push Notification Service
向Android手机发送消息。根据{{3}},您可以设置GCM消息的优先级,以帮助处理打盹模式下的应用。
以下是我目前使用它的方式:
string content = JsonConvert.SerializeObject(new GCMCarrier(data));
result = await Gethub().SendGcmNativeNotificationAsync(content, toTag);
这里是GCMCarrier
public class GCMCarrier
{
public GCMCarrier(Object _data)
{
data = _data;
}
}
现在如何为邮件添加优先级?发送GCM的构造函数只有一个数据参数?
或者我可以简单地将它与数据一起添加到我的“GCMCarrier”对象中吗?
答案 0 :(得分:2)
尝试某人使用的方式 - 将Priority字段添加到有效负载中。最近在Github存储库as the issue中对此进行了讨论。 Windows Phone在SDK中具有该功能,而Android看起来却没有。但是,通知中心(AFAIK)是传递机制,因此有效载荷将由GCM本身处理。
答案 1 :(得分:0)
您可以增强当前模型并以正确格式添加所需属性,然后将其转换为json有效内容。
public class GcmNotification
{
[JsonProperty("time_to_live")]
public int TimeToLiveInSeconds { get; set; }
public string Priority { get; set; }
public NotificationMessage Data { get; set; }
}
public class NotificationMessage
{
public NotificationDto Message { get; set; }
}
public class NotificationDto
{
public string Key { get; set; }
public string Value { get; set; }
}
现在您可以使用json转换器转换数据,但请记住在JsonConverter中使用小写设置,否则可能会在设备上进行预测。我在LowercaseJsonSerializer类中实现了这个。
private void SendNotification(GcmNotification gcmNotification,string tag)
{
var payload = LowercaseJsonSerializer.SerializeObject(gcmNotification);
var notificationOutcome = _hubClient.SendGcmNativeNotificationAsync(payload, tag).Result;
}
public class LowercaseJsonSerializer
{
private static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
{
ContractResolver = new LowercaseContractResolver()
};
public static string SerializeObject(object o)
{
return JsonConvert.SerializeObject(o,Settings);
}
public class LowercaseContractResolver : DefaultContractResolver
{
protected override string ResolvePropertyName(string propertyName)
{
return propertyName.ToLower();
}
}
}