如何使用Azure通知中心

时间:2016-05-12 05:36:44

标签: azure google-cloud-messaging azure-notificationhub

我目前正在使用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”对象中吗?

2 个答案:

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