OneSignalでWEBサイトにPush通知を実装するサンプル(API編)

このエントリーをはてなブックマークに追加


前記事:OneSignalでWEBサイトにPush通知を実装するサンプル(SDK編)

前記事にて導入からSDKの事まで書きましたが、続けてAPIを使っての送信処理の事などを書いていきます

One Signal
https://onesignal.com/

コントロールパネルのドキュメント
https://documentation.onesignal.com/docs/dashboard

WEB Push SDKのドキュメント
https://documentation.onesignal.com/docs/web-push-sdk

APIのドキュメント
https://documentation.onesignal.com/reference#create-notification

APIによる送信処理もOne Signalの素晴らしいドキュメントを見た方がはやい

今回はPHPからAPIにアクセス、player_idやtagを指定して特定のユーザーにだけ送信する様にしたいと思います

player_idを指定して送信

push.php
function sendMessage(){

$app_id = 'APP_ID';
$title = 'タイトル';
$mess = 'メッセージ';
$link_url = 'リンク先URL';
$icon_url = 'アイコンURL';

$player_ids = array('PLAYER_ID','PLAYER_ID');
$headings = array("en" => $title);
$content = array("en" => $mess);

$fields = array(
'app_id' => $app_id,
'include_player_ids' => $player_ids,
'url' => $link_url,
'chrome_web_icon' => $icon_url,
'headings' => $headings,
'contents' => $content
);

$fields = json_encode($fields);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://onesignal.com/api/v1/notifications");
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json; charset=utf-8',
                     'Authorization: Basic REST API Key'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

$response = curl_exec($ch);
curl_close($ch);

return $response;
}

$response = sendMessage();

$return["allresponses"] = $response;
$return = json_encode( $return);

print("\n\nJSON received:\n");
print($return);
print("\n");
player_idsはjsonで記述、複数指定する事も可能(たぶん1クエリ2000件まで)

tagを指定して送信

push.php
function sendMessage(){

$app_id = 'APP_ID';
$title = 'タイトル';
$mess = 'メッセージ';
$link_url = 'リンク先URL';
$icon_url = 'アイコンURL';

$player_ids = array('PLAYER_ID','PLAYER_ID');
$headings = array("en" => $title);
$content = array("en" => $mess);

$fields = array(
'app_id' => $app_id,
'filters' => array(array("field" => "tag", "key" => "タグ名", "relation" => "=", "value" => "値")),
'url' => $link_url,
'chrome_web_icon' => $icon_url,
'headings' => $headings,
'contents' => $content
);

$fields = json_encode($fields);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://onesignal.com/api/v1/notifications");
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json; charset=utf-8',
                     'Authorization: Basic REST API Key'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

$response = curl_exec($ch);
curl_close($ch);

return $response;
}

$response = sendMessage();

$return["allresponses"] = $response;
$return = json_encode( $return);

print("\n\nJSON received:\n");
print($return);
print("\n");

OneSignalでのtagを指定は単純なタグ検索ではなくかなり自由度が高いですね
データベース検索で出来るそれに近い、記述式も応じて長いけど便利
'filters' => array(array("field" => "tag", "key" => "タグ名", "relation" => "=", "value" => ""))
記入する部分は赤字の部分でそれ以外は固定コード

relationは比較演算子、ドキュメントにて使えるとされるのは『 > 』『 < 』『 = 』『 != 』『exists』『not_exists』

『exists』『not_exists』はそのキーや値が存在するかどうかでの判別だと思います

また{xxxxx}, {"operator": "OR"},{xxxxxx}とする事でOR検索での指定も可能

部分一致とかはどうだろう、あれば複数の値をぶっ込めておけるんだけども、、、

関連したOneSignalコードのサンプル


  • タグを付与るjavaScriptコード

sendTag()
OneSignal.sendTag("key", "value");


  • 複数のタグを付与るjavaScriptコード

sendTag()
 OneSignal.sendTags({
    key: 'value',
    key2: 'value2',
  });


  • player_idを取得するjavaScriptコード

getUserId()
OneSignal.getUserId(function(userId) {
    console.log("OneSignal User ID:", userId);  
  });
または
OneSignal.getUserId().then(function(userId) {
    console.log("OneSignal User ID:", userId);   
  });

0 件のコメント :