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 :
[node:title]
".À 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.
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 ...
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).
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).
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.
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 ".
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.