LoginSignup
18
19

More than 5 years have passed since last update.

超簡単にブラウザPush通知を実装する方法【サーバー編】

Last updated at Posted at 2016-04-08

追記

特定のユーザーにブラウザPush通知を送信する方法を書きました(4/10)

はじめに

前回はOneSignalの基本的な設定とOneSignalの管理画面上からPush通知を送るところまでを書きました。
今回は前回の記事の設定が終わっている前提で話を進めますので、まだの方は以下からどうぞ。
超簡単にブラウザPush通知を実装する方法【ブラウザ編】

前回の続き

毎回Push通知を手動で送るのはさすがに面倒ですよね。更にセグメントを切って送るとなるともっと面倒で収集がつかないですよね。
というわけで今回はシステム的にOneSignalのAPIをサーバーから叩いて、Push通知を送ってみましょう。
尚、セグメントを切る方法は今回やろうと思ったのですが、ちょっとまとめきれなかったので次回にさせて頂きます。
すみません^^;

今回のゴール

ruby web_push.rbコマンドでWebPush通知を送れるようになることをゴールとします。

必要なもの

  • 前回の承認まで一通り終わってること
  • OneSignalから発行されるOneSignal App ID(これは前回取得したものと同じものです)
  • OneSignalから発行されるREST API Key
  • サーバーサイドのプログラミング
  • Railsが動く環境

1.OneSignalの準備

まずOneSignalのAppIDとREST API Keyを取得します。
画像を見てもらえればわかると思いますが、OneSignalの左メニューにあるApp Settings > Keys & IDsを選択してください。
スクリーンショット_2016-04-08_21_13_17.png
これでOneSignalの準備は完了です。

2.プログラミング

次にサーバーサイドのプログラミングです。
..が、OneSignalはとても優しいですね。このページのExamplesに色々な言語のサンプルコードがありますので是非参考にしてみてください。
今回のこの記事ではRubyを扱います。

以下サンプルコードです。Productionで使ってるコードを一部使い回してるので若干の冗長さや不要な場所はあるかと思いますが、多めに見てくださいw

web_push.rb
require 'active_support/core_ext'
require 'active_support/json'
require 'net/http'

module WebPush
  ProductionOneSignalAppId="1 で取得したOneSignalAppID"
  ProductionSignalRestAPIKey="1 で取得したREST API Key"

  def notification!
    params = {
      app_id: ProductionOneSignalAppId,
      rest_api_key: ProductionSignalRestAPIKey,
      headings: {en: "notification test", ja: "通知テストですよ"},
      contents: {en: "This is notification test", ja: "通知のテストですよ"},
      included_segments: ["All"]
    }
    one_signal_web_push(params)
  end

  def one_signal_web_push(params)
    raise "AppId or RestAPIKey is required" if params[:app_id].blank? || params[:rest_api_key].blank?
    raise "ContentsIsNone" if params[:contents].blank?
    params[:isChromeWeb] = true
    uri = URI.parse('https://onesignal.com/api/v1/notifications')
    http = Net::HTTP.new(uri.host, uri.port)
    http.use_ssl = true
    request = Net::HTTP::Post.new(uri.path,
                              'Content-Type' => 'application/json',
                              'Authorization' => "Basic #{params[:rest_api_key]}")
    request.body = params.as_json.to_json
    return http.request(request)
  end
end

include WebPush
notification!

ソースコードの説明は特別行ないませんが、include WebPushとnotification!メソッドでプッシュ通知が送られます。
ちなみになるべく使い回しが効くようにmoduleにしておくので必要でしたらご活用ください。Railsなら最後の二行を消せば普通に使い回せるとは思います。

3.実行

ruby web_push.rbを実行してください。
そうすると・・・。

スクリーンショット_2016-04-08_21_52_04.png

届きましたね。
これでサーバーサイドから好きなタイトルと本文を送信することは出来るようになりました。
オプションを変えればアイコンや遷移先のURLも変更可能ですし、セグメントを切って送ることもできます。
また、どれだけ長い文章を送っても、このウィンドウが大きくなるだけで文章が途中で強制的に切られるということはなさそうなので、ご安心ください(?)
今回は以上です、お疲れさまでした。
次回こそはセグメントを切って送る方法を書きます!

18
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
19