web-dev-qa-db-fra.com

Notifications push: comment envoyer des paramètres supplémentaires dans les données de notification push?

J'utilise le module Push Notifications pour envoyer une notification aux jetons enregistrés.

Je peux envoyer une notification en texte brut avec succès via les règles.

Je cherche un moyen d'envoyer la notification avec des champs supplémentaires afin de pouvoir identifier le type de notification et les mesures à prendre.

Voici l'exemple de données dans lequel je dois envoyer la notification:

{
   "aps":{
      "alert": "Enter your message",
      "badge":1,
      "sound":"default",

     "extraField 1":"some value",
     "extraField2":"identifier"
   }
}

Voici l'exportation des règles:

    { 
    "rules_Push_notification" : {
    "LABEL" : "Push Notification",
    "PLUGIN" : "reaction rule",
    "OWNER" : "rules",
    "REQUIRES" : [ "rules", "Push_notifications" ],
    "ON" : { "node_insert" : [] },
    "IF" : [
      { "node_is_of_type" : {
          "node" : [ "node" ],
          "type" : { "value" : { "music" : "music", "news" : "news" } }
        }
      }
    ],
    "DO" : [
      { "Push_notifications_send_message_bulk" : { "message" : "[node:title]", "target_group" : "authenticated" } }
    ]
  }
}

Remarques :

  • Mes règles d'action mappent (correspondent) à l'exemple de données comme ceci: que "Entrez votre message" serait remplacé par la valeur de "[node:title] ".
  • À propos de ce "champ supplémentaire 1" (et "champ supplémentaire 2"): Lorsque j'envoie une notification Push, On Tap il faut prendre certaines mesures qui sont décidées dans ces champs supplémentaires, par exemple un exemple si j'ai besoin de montrer un article de musique, j'enverrai "musique" comme identifiant et le deuxième champ sera l'identifiant du nœud de l'aide au contenu mobile pour ouvrir cet article particulier.
1
Puneet

À partir de la réponse donnée par vgordiya, j'ai pu résoudre le problème.

J'ai créé mon propre module personnalisé avec dependencies[] = Push_notifications.

Dans ma règle, j'ai ajouté le code personnalisé PHP en action et en passant quelque chose comme ci-dessous).

$uids = array('1');
$message = array(
             'alert'=>'Enter your message',
             'badge'=>1,
             'sound'=>'default',
             'extraField1'=>'some value',
             'extraField2'=>'identifier'
           );
cusotm_module_send_message($uids,$message);

Ma fonction de module personnalisé que j'ai ajoutée est:

function cusotm_module_send_message($recipients, $message) {
    if (!is_array($recipients) || !is_array($message)) {
        return FALSE;
    }

    if (!module_exists('Push_notifications')) {
        watchdog('cusotm_module', t('Push Notification Module not found'));
        return false;
    }

    // Shorten the message characters / 8 bit.
    $message = truncate_utf8($message, Push_NOTIFICATIONS_APNS_PAYLOAD_SIZE_LIMIT, TRUE, TRUE);

    // Convert the payload into the correct format for delivery.
    $payload = $message;

    // Determine if any of the recipients have one or multiple tokens stored.
    $tokens = array();
    foreach ($recipients as $uid) {
        $user_tokens = Push_notification_get_user_tokens($uid);
        if (!empty($user_tokens)) {
          $tokens = array_merge($tokens, $user_tokens);
        }
    }

    // Stop right here if none of these users have any tokens.
    if (empty($tokens)) {
        return FALSE;
    }

    // Send a simple alert message.
    Push_notifications_send_alert($tokens, $payload);
}

La raison de cette procédure était de ne pas modifier le code du module d'origine afin que le correctif ne disparaisse pas au moment de la mise à jour.

0
Puneet

Le module version D7 actuelle du module Notifications push ne permet pas/ne prend pas en charge de tels champs supplémentaires (comme dans votre question). Cependant, voici quelques suggestions pour vous rapprocher ...

Intégrez 'identifiant' dans votre message d'alerte

Vous pouvez produire 2 types de messages alert, en fonction du type de contenu (= News ou Musique), en adaptant votre action de règles. Ceci en intégrant également le jeton [node:content-type] disponible, cela pourrait ressembler à ceci:

      { "Push_notifications_send_message_bulk" :
        { "message" : "[node:content-type] notification: [node:title]",
          "target_group" : "authenticated" } }

En utilisant cette approche, votre message commence à ressembler à une sorte de transaction à traiter, pour laquelle il pourrait y avoir des solutions pour le traiter davantage sur votre plate-forme cible).

Intégrez "une certaine valeur" dans votre message d'alerte

En utilisant une approche similaire, vous pouvez étendre cela pour inclure également le "some value" lié à votre "extraField 1" (comme dans votre question), vous voudrez probablement utiliser le jeton [node:nid] disponible pour cela.

Cependant, selon votre commentaire (= "il apparaîtra {1234 (nid)} / {music (node type)} / The title (The title of the node) qui ne semble pas bien en fait."), Vous voudrez peut-être essayer une autre approche (comme expliqué dans la suggestion suivante).

Envoyer des messages JSON

Votre exemple de données semble être une variante de ce qui est indiqué dans le problème concernant " envoi de messages JSON ", dans lequel le message de notification est une chaîne JSON qui ressemble à ceci:

{"title": "my title",
 "message": "my message",
 "additionalData": { "key": "value", ... }}

Commentaire # dans ce numéro fait référence au problème concernant " Payloads personnalisés pour les notifications push ", et qui comprend un patch (état actuel = besoins examen) avec lequel vous pourriez le faire fonctionner d'une manière ou d'une autre.

Améliorations à venir dans D8

L'aide est en route, comme détaillé dans le problème lié à D8 sur " Créer une entité de contenu pour les notifications Push ".

0
Pierre.Vriens

Je suis déjà confronté au même problème avant 2 ans en arrière. Ce que j'ai résolu en utilisant du code php personnalisé dans l'action des règles et en passant du code comme ci-dessous.

$uids = array('1');
$message = array(
             'alert'=>'Enter your message',
             'badge'=>1,
             'sound'=>'default',
             'extraField1'=>'some value',
             'extraField2'=>'identifier'
           );
Push_notifications_send_message($uids,$message);

et appliquer le patch qui est attaché ci-joint . Le correctif est composé et téléchargé juste pour votre problème.

0
vgoradiya