/var/log/messages

debugging with sixth sense

Rails で GCM してみた

とりあえず gem i rails かららしい。

その後、Gemfile を無理やり作成。

$ cat << EOS >> Gemfile
source "http://rubygems.org"
gem "rails", "4.1.1"
EOS

で、bundle install --path vendor/bundle なのかな。で、その後 rails プロジェクトを作るのか。

$ bundle exec rails new GCMSample --skip-bundle

そしていくつかのファイルを削除します。

$ rm -rf .bundle Gemfile Gemfile.lock vendor

その後、プロジェクトなディレクトリに入って

$ cd GCMSample

例のアレを kickoff するのか。なかなかメタな感じがアレです。

$ bundle install --path vendor/bundle

これが終わったらとりあえずリポジトリを作るのかな。

$ git init

して .gitignore を以下に。

$ cat .gitignore
# Ignore bundler config.
/.bundle

# Ignore bundler gems.
vendor/bundle

# Ignore the default SQLite database.
/db/*.sqlite3
/db/*.sqlite3-journal

# Ignore all logfiles and tempfiles.
/log/*.log
/tmp

# Ignore other unneeded files.
doc/
*.swp
*~
.project
.DS_Store
.idea
.secret

で、commit を作ります。

$ git add .
$ git commit -m 'initial commit'

とりあえず

先に端末側をでっち上げます。Github のリポジトリが以下。

で、でっちあげてから分かったのですが、これってちょっとした動作確認程度だと AP サーバの実装は不要なんですね。

$ curl --header "Authorization: key=<API Key>" --header Content-Type:"application/json" \n
https://android.googleapis.com/gcm/send \n 
-d "{\"registration_ids\":[\"<registration ID>\"],\"data\":{\"message\":\"Hello\"}}"

色々情報整理して、AP サーバ側実装に着手の方向。

参考にさせて頂いたのは以下のエントリです。感謝を込めて。

必要なコントローラ

ええと以下かな。

  • 端末側から ID 送信
  • サーバサイドから通知発信

面頭なので必要な属性を洗い出して scaffold で作るか。必要な属性は

登録 ID の登録

  • 登録 ID

通知発信

  • 登録 ID な ID
  • メッセージ

ということでコマンドどうだっけ (を

以下か。

$ bundle exec raile generate scaffold Register registerid:string

で、とりあえず DB を。

$ bundle exec rake db:migrate

中身とか確認してません。そして関連付けする場合は以下になるんかな。

$ bundle exec rails generate scaffold Notification message:string Register:belongs_to

む、model 見たら message な属性が無いな。とりあえず rake db:migrate して DB 確認というか db/migration 配下のテキスト確認か。一応カラムは用意されている模様。ガワはできたので POST なソレを弄れば良いのかな。

ID 登録機能

POST なパラメータをどう渡すんかな。なんか create メソドで以下な記述になってて

    def create
      @register = Register.new(register_params)

register_params て何、って思ったら同じ Controller の中で定義されてました。

      def register_params
        params.require(:register).permit(:registerid)
      end

これ、register という form は registerid という属性 (と言って良いのか?) のみを持つ、ということを保証するものらしい。この場合 params[:register] は

{:registerid => 'abcdefg'}

というナニになってりゃ良いのか成程。Volley だと以下なカンジなのかどうか。

try {
    String URL = "http://hoge/fuga";
    String requestStr = "{\"registerid\":\"example\"}"";
    JSONObject jsonBody = new JSONObject(requestStr);
    new JsonObjectRequest(URL, jsonBody, new Response.Listener<JSONObject>() { ... });

通知の投稿

色々見てたら Rpush という gem があることを確認。使ってみます。参考にしたの以下のコンテンツです。

初期化は

$ bundle exec rpush init

でした。で、db:migrate した後は config/initiaizers/rpush.rg 見れとあります。あと rpush help も見てみてねとのこと。とりあえず

  • seed_fu な gem 導入
  • mkdir db/fixture
  • db/fixture/app.rb を追加

以下なカンジにて。

Rpush::Gcm::App.seed do |s|
  s.name = "android_app"
  s.auth_key = "fugahoge"
  s.connections = 1
end

これで rake db:seed_fu するとデータが格納されるのかどうか。作成されました。とりあえず記述を以下に変更。

Rpush::Gcm::App.seed_once do |s|

あとは notify の POST にて更新成功したら

n = Rpush::Gcm::Notification.new
n.app = Rpush::Gcm::App.find_by_name("android_app")
n.registration_ids = ["token", "..."]
n.data = { message: "hi mom!" }
n.save!

みたいなカンジのソレを追加しておけば良い模様。

そして

なんかできたみたいなんだけど、ここからどうするのかw とりあえず Heroku にアプリを作って登録云々まですすめてみるのかどうか。

Heroku の用意

heroku-toolbelt 入ってませんでした。

 $ brew install heroku-toolbelt

鍵とかも登録しなきゃ、なのか。って brew install できないな。仕方無いので http://toolbelt.heroku.com から download してみて導入完了。あとは

  • heroku login して
  • heroku keys:add して

でタイムアウト。

Comments