web-dev-qa-db-fra.com

Format personnalisé de notification push iOS

Je suis nouveau dans tous les domaines de notification push iOS. J'ai essayé une notification Push de base en utilisant le code suivant et cela fonctionne parfaitement. J'utilise "using JdSoft.Apple.Apns.Notifications;" pour y parvenir. Voici le code:

Notification alertNotification = new Notification(testDeviceToken);

alertNotification.Payload.Alert.Body = "Hello World";           
alertNotification.Payload.Sound = "default";
alertNotification.Payload.Badge = 1;

Cela donne la sortie à l'iPhone dans la structure suivante:

{
    aps =     {
        alert = "Hello World";
        badge = 1;
        sound = default;
    };
}

J'ai maintenant l'obligation d'ajouter une balise personnalisée comme suit:

{
    "aps":   {
        "alert": "Hello World",
        "sound": "default",
    "Person":     {
            "Address": "this is a test address",
            "Name": "First Name",
            "Number": "023232323233"
          
    }  
  }
}

J'ai du mal à mettre "Person" dans "aps". Je sais également que vous pouvez ajouter un attribut personnalisé à l'aide du code suivant:

alertNotification.Payload.AddCustom ("Personne", Newtonsoft.Json.JsonConvert.SerializeObject (stat));

Mais le code ci-dessus n'ajoute pas de balise "aps". Veuillez me dire comment cela peut être réalisé?

21
Pavan Welihinda

Vous n'êtes pas autorisé à mettre des balises personnalisées à l'intérieur de la balise aps . Voici ce qu'en disent les documentations:

Les fournisseurs peuvent spécifier des valeurs de charge utile personnalisées en dehors de l'espace de noms aps réservé à Apple. Les valeurs personnalisées doivent utiliser les types structurés et primitifs JSON: dictionnaire (objet), tableau, chaîne, nombre et booléen.

Donc, dans votre cas, vous devriez faire quelque chose comme:

{
    "aps": {
        "alert": "Hello World",
        "sound": "default"
    },
    "Person": {
        "Address": "this is a test address",
        "Name": "First Name",
        "Number": "023232323233"
    }
}

Par conséquent, vous pouvez lire votre charge utile personnalisée en recherchant sa clé dans le JSON principal, plutôt que dans "aps":

NSLog(@"%@",notification['Person']['Address']);

Ci-dessus sortira:

c'est une adresse de test

Vous pouvez trouver plus d'informations sur les charges utiles personnalisées, ainsi que quelques exemples dans Apple docs .

Cordialement, HrisTo

39
hris.to

Vous pouvez ajouter Titre, Sous-titre, corps et bien d'autres clés comme

{
  "aps": {
    "alert": {
      "title": "Hey!???? Checkout my custom notification",
      "subtitle": "Custom notification subtitle",
      "body": "Description of custom notification"
    },
    "sound": "default",
    "category": "CustomPush",
    "badge": 1,
    "mutable-content": 1
  },
  "Employee": {
    "Name": "John Doe",
    "Designation": "Manager"
  }
} 

Employé est une charge utile personnalisée où vous pouvez définir vos propres données selon les besoins

2
Siddhesh Bhide

J'utilise la bibliothèque 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));
        }
0
user11662710