Пользовательский формат IOS Push Notification
Я новичок во всех доменах уведомлений iOS. Я пробовал базовое push-уведомление, используя следующий код, и он отлично работает. Я использую "использование JdSoft.Apple.Apns.Notifications;" для этого. Здесь код:
Notification alertNotification = new Notification(testDeviceToken);
alertNotification.Payload.Alert.Body = "Hello World";
alertNotification.Payload.Sound = "default";
alertNotification.Payload.Badge = 1;
Это дает вывод для iPhone в следующей структуре:
{
aps = {
alert = "Hello World";
badge = 1;
sound = default;
};
}
Теперь у меня появилось требование добавить пользовательский тег следующим образом:
{
"aps": {
"alert": "Hello World",
"sound": "default",
"Person": {
"Address": "this is a test address",
"Name": "First Name",
"Number": "023232323233"
}
}
}
Мне трудно получить "Person" внутри "aps". Я также знаю, что вы можете добавить пользовательский атрибут, используя следующий код:
alertNotification.Payload.AddCustom( "Person", Newtonsoft.Json.JsonConvert.SerializeObject(stat));
Но приведенный выше код не добавляется с тегом aps. Скажите, пожалуйста, как это можно достичь?
Ответы
Ответ 1
Вам не разрешено помещать пользовательские теги внутри тега aps. В каких документах говорится об этом:
Поставщики могут указывать пользовательские значения полезной нагрузки вне пространства имен APS, зарезервированных Apple. Пользовательские значения должны использовать структурированные и примитивные типы JSON: словарь (объект), массив, строку, число и логическое значение.
Итак, в вашем случае вы должны сделать что-то вроде:
{
"aps": {
"alert": "Hello World",
"sound": "default"
},
"Person": {
"Address": "this is a test address",
"Name": "First Name",
"Number": "023232323233"
}
}
Поэтому вы можете прочитать свою пользовательскую полезную нагрузку, ища ее ключ в основном JSON, а не в "aps":
NSLog(@"%@",notification['Person']['Address']);
Выше будет выводиться:
это тестовый адрес
Вы можете найти больше о пользовательских полезных нагрузках, а также некоторые примеры в Apple docs.
С уважением,
Христо
Ответ 2
Я использую библиотеку Push Sharp.
public static JObject CreatePayload(APNSNotification apnsNotification, object content, int Ntype)
{
var payload = new Dictionary<string, object>();
var aps = new Dictionary<string, object>();
if ((int)NotificationType.CONFERENCE == Ntype)
{
var confNotification = new ConferenceNotification();
confNotification = (ConferenceNotification)content;
aps.Add("alert", confNotification.title);
aps.Add("subtitle", confNotification.body);
aps.Add("badge", confNotification.badgeCount);
payload.Add("aps", aps);
payload.Add("confId", confNotification.confId);
payload.Add("pageFormat", confNotification.pageFormat);
payload.Add("pageTitle", confNotification.pageTitle);
payload.Add("webviewURL", confNotification.webview_URL);
payload.Add("notificationBlastID", confNotification.notificationBlastID);
payload.Add("dataValue", confNotification.dataValue);
payload.Add("pushtype", "Events");
}
else if ((int)NotificationType.NEWS == Ntype)
{
var newsNotification = new NewsNotification();
newsNotification = (NewsNotification)content;
aps.Add("alert", newsNotification.title);
aps.Add("subtitle", newsNotification.subtitle);
aps.Add("badge", newsNotification.badgeCount);
payload.Add("aps", aps);
payload.Add("articleId", newsNotification.articleId);
payload.Add("msgcnt", newsNotification.msgcnt);
payload.Add("type", newsNotification.type);
payload.Add("pushtype", "News");
}
return JObject.Parse(Newtonsoft.Json.JsonConvert.SerializeObject(payload));
}