とりあえず 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
して
でタイムアウト。