Подтвердить что ты не робот

Пользовательский формат 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. Скажите, пожалуйста, как это можно достичь?

4b9b3361

Ответ 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));
        }