web-dev-qa-db-ja.com

プッシュ通知:プッシュ通知データで追加のパラメーターを送信するにはどうすればよいですか?

私は プッシュ通知 モジュールを使用して、登録されたトークンに通知を送信しています。

ルールを介してプレーンテキスト通知を正常に送信できます。

通知のタイプがこれであり、これに対して実行するアクションを識別できるように、追加のフィールドで通知を送信する方法を探しています。

以下は、通知を送信する必要があるデータの例です。

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

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

ルールのエクスポートは次のとおりです。

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

メモ

  • 私のルールアクションは、次のようなデータ例にマップ(対応)します。つまり、「メッセージを入力してください」は、「[node:title]」の値に置き換えられます。
  • その「追加フィールド1」(および「追加フィールド2」)について:プッシュ通知を送信するとき、On Tapでは、追加で決定されるいくつかのアクションを実行する必要がありますたとえば、音楽記事を表示する必要がある場合は、識別子として「music」を送信し、2番目のフィールドは、特定の記事を開くためのモバイルヘルプコンテンツのノードIDになります。
1
Puneet

Vgordiyaの答えから始めて、問題を解決することができました。

dependencies[] = Push_notificationsを使用して独自のカスタムモジュールを作成しました。

私のルールでは、カスタムのPHPコードのアクションを追加し、以下のようなコードを渡します。

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

追加したカスタムモジュール関数は次のとおりです。

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

このようにする理由は、更新時にパッチが消えないように元のモジュールコードを変更しないためです。

0
Puneet

プッシュ通知 モジュールの 現在のD7リリース は、このような追加フィールドを許可/サポートしません(ご質問のとおり)。しかし、以下はあなたを近づけるためのいくつかの提案です...

アラートメッセージに「識別子」を組み込む

コンテンツタイプに基づいて、2つのタイプのalertメッセージを生成できます(=NewsまたはMusic)、ルールアクションを適応させます。これは、利用可能な_[node:content-type]_トークンも統合することにより、次のようになります。

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

このアプローチを使用すると、メッセージは処理されるトランザクションの一種のように見え始めます。そのため、ターゲットプラットフォームでさらに処理するためのソリューションが存在する場合があります)。

アラートメッセージに「何らかの価値」を組み込む

同様のアプローチを使用して、これをさらに拡張して、「_some value_」に関連する「_extraField 1_」を含めることもできます(質問のように)、おそらく使用可能な_[node:nid]_トークン。

ただし、コメント(「実際には見栄えが悪い{1234 (nid)} / {music (node type)} / The title (The title of the node)と表示されます。」)のとおり、別のアプローチを試すこともできます(次の提案で説明します)。

JSONメッセージを送信する

あなたのデータの例は、「 JSONメッセージの送信 」に関する問題に示されているもののバリエーションのようです。通知メッセージは、次のようなJSON文字列です。

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

コメント# この問題は、「 プッシュ通知のカスタムペイロード 」に関する問題を指し、 patch (現在のステータス=ニーズが含まれています)レビュー)何らかの方法で機能させることができます。

D8での今後の改善

プッシュ通知用のコンテンツエンティティの作成 」に関するD8関連の問題で詳しく説明されているように、ヘルプは進行中です。

0
Pierre.Vriens

私は2年前にすでに同じ問題に直面しています。ルールアクションでカスタムphpコードを使用して、以下のようなコードを渡すことで解決しました。

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

そして、添付されているパッチを適用する herewith 。パッチは問題のためだけに作成され、アップロードされます。

0
vgoradiya