私は プッシュ通知 モジュールを使用して、登録されたトークンに通知を送信しています。
ルールを介してプレーンテキスト通知を正常に送信できます。
通知のタイプがこれであり、これに対して実行するアクションを識別できるように、追加のフィールドで通知を送信する方法を探しています。
以下は、通知を送信する必要があるデータの例です。
{
"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]
」の値に置き換えられます。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);
}
このようにする理由は、更新時にパッチが消えないように元のモジュールコードを変更しないためです。
プッシュ通知 モジュールの 現在の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文字列です。
_{"title": "my title",
"message": "my message",
"additionalData": { "key": "value", ... }}
_
コメント# この問題は、「 プッシュ通知のカスタムペイロード 」に関する問題を指し、 patch (現在のステータス=ニーズが含まれています)レビュー)何らかの方法で機能させることができます。
「 プッシュ通知用のコンテンツエンティティの作成 」に関するD8関連の問題で詳しく説明されているように、ヘルプは進行中です。
私は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 。パッチは問題のためだけに作成され、アップロードされます。