it-swarm.com.de

Push-Benachrichtigungen: Wie kann ich zusätzliche Parameter in Push-Benachrichtigungsdaten senden?

Ich verwende das Modul Push Notifications , um Benachrichtigungen an registrierte Token zu senden.

Ich kann eine Klartextbenachrichtigung erfolgreich über Regeln senden.

Ich suche nach einer Möglichkeit, die Benachrichtigung mit zusätzlichen Feldern zu senden, damit festgestellt werden kann, um welche Art von Benachrichtigung es sich handelt und welche Maßnahmen dies zu ergreifen sind.

Unten ist das Datenbeispiel, in dem ich die Benachrichtigung senden muss:

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

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

Hier ist der Regelexport:

    { 
    "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" } }
    ]
  }
}

Hinweise :

  • Die Aktion "Meine Regeln" entspricht dem Datenbeispiel wie folgt: "Geben Sie Ihre Nachricht ein" wird durch den Wert "[node:title] ".
  • Über dieses "zusätzliche Feld 1" (und "zusätzliches Feld 2"): Wenn ich eine Push-Benachrichtigung sende, On Tap, müssen einige Maßnahmen ergriffen werden, die in diesen zusätzlichen Feldern festgelegt werden, z Ein Beispiel, wenn ich einen Musikartikel anzeigen muss, sende ich "Musik" als Kennung und das zweite Feld ist die Knoten-ID des Inhalts, mit dem das Handy diesen bestimmten Artikel öffnen kann.
1
Puneet

Ausgehend von der Antwort von vgordiya konnte ich das Problem lösen.

Ich habe mein eigenes benutzerdefiniertes Modul mit dependencies[] = Push_notifications Erstellt.

In meiner Regel habe ich den benutzerdefinierten Code PHP in Aktion) hinzugefügt und Code wie folgt übergeben.

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

Meine benutzerdefinierte Modulfunktion, die ich hinzugefügt habe, ist:

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);
}

Der Grund dafür war, den ursprünglichen Modulcode nicht zu ändern, damit der Patch zum Zeitpunkt der Aktualisierung nicht verschwindet.

0
Puneet

Das aktuelle D7-Version des Push Notifications Moduls erlaubt/unterstützt solche zusätzliche Felder (wie in Ihrer Frage) nicht. Im Folgenden finden Sie jedoch einige Vorschläge, um Sie näher zu bringen ...

Integrieren Sie 'Bezeichner' in Ihre Warnmeldung

Sie können 2 Arten von alert Nachrichten erstellen, basierend auf dem Inhaltstyp (= News oder Musik), indem Sie Ihre Regelaktion anpassen. Wenn Sie auch das verfügbare [node:content-type]-Token integrieren, könnte dies ungefähr so ​​aussehen:

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

Bei Verwendung dieses Ansatzes sieht Ihre Nachricht wie eine Art zu verarbeitende Transaktion aus, für die es möglicherweise Lösungen gibt, um sie auf Ihrer Zielplattform weiter zu verarbeiten.

Integrieren Sie "einen Wert" in Ihre Warnmeldung

Mit einem ähnlichen Ansatz könnten Sie dies weiter ausdehnen, um auch den "some value" einzuschließen, der sich auf Ihren "extraField 1" bezieht (wie in Ihrer Frage). Wahrscheinlich möchten Sie dafür das verfügbare [node:nid]-Token verwenden.

Gemäß Ihrem Kommentar (= "es wird {1234 (nid)} / {music (node type)} / The title (The title of the node) angezeigt, was eigentlich nicht gut aussieht.") Möchten Sie jedoch einen anderen Ansatz ausprobieren (wie im nächsten Vorschlag erläutert).

JSON-Nachrichten senden

Ihr Datenbeispiel scheint eine Variation dessen zu sein, was in der Ausgabe über " Senden von JSON-Nachrichten " gezeigt wird, in der die Benachrichtigungsnachricht eine JSON-Zeichenfolge ist, die so aussieht:

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

Kommentar Nr. in dieser Ausgabe bezieht sich auf das Problem mit " Benutzerdefinierte Nutzdaten für Push-Benachrichtigungen ", das ein Patch (aktueller Status = Anforderungen) enthält Rückblick), mit dem Sie es vielleicht irgendwie zum Laufen bringen könnten.

Bevorstehende Verbesserungen in D8

Die Hilfe ist unterwegs, wie in der D8-bezogenen Ausgabe zu " Inhaltsentität für Push-Benachrichtigungen erstellen " beschrieben.

0
Pierre.Vriens

Ich habe bereits vor 2 Jahren das gleiche Problem. Was ich durch die Verwendung von benutzerdefiniertem PHP-Code in der Regelaktion und die Übergabe von Code wie unten gelöst habe.

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

und Anwenden eines Patches, der beigefügt ist hiermit . Der Patch wird nur für Ihr Problem erstellt und hochgeladen.

0
vgoradiya