1

Я использую концентратор уведомлений с FCM для отправки уведомлений в приложение для Android. Я хочу установить приоритет сообщения и время, чтобы жить собственностью дополнительно с каждым уведомлением, но центр уведомлений ожидает jsonpayload и теги в методе SendGcmNativeNotificationAsync на HubClinet. Я не уверен, как добавить эти дополнительные свойства в полезную нагрузку.Как установить время для работы с полезной нагрузкой GCM/FCM в концентраторе уведомлений

ответ

3

Мы можем добавить эти свойства в нашу пользовательскую модель в правильном формате, а затем преобразовать их в полезную нагрузку 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; } 
} 

метод вызова SendNotification анс передать ваши model.Now вы можете конвертировать ваши данные в формате JSON конвертер, но помните использовать строчную настройку в JsonConverter иначе может быть expection на устройстве. У меня есть реализация этого в классе 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(); 
      } 
     } 
    }