Ruby
GoogleAnalytics
staccato

GoogleAnalyticsのscreenviewをruby/staccatoから送る

この記事は

  • GoogleAnalyticsへのhitを生成するrubyのgemライブラリにstaccatoというものがあります
  • このライブラリからscreenviewのhitを送出するのが最初うまくいかなかったのでメモです

screenview

  • GoogleAnalyticsへの記録全般はhitと呼ばれます
  • hitには種類がありもっとも一般的なのはpageviewというWebページを開いた時を示すもので、他にもボタンが押されたなどの動きを示すeventなどがよく使われます
  • screenviewはhitの一種ですが、上記とは異なりスマホアプリ内での画面表示を示します
  • 通常PCからscreenviewを飛ばすことは少ないのですが、コンバージョンの都合上どうしてもscreenviewを飛ばす必要が出てくる場合があります

staccatoのscreenview(失敗)

  • はじめこのあたりを見ていたら普通にscreenviewに対応しているメソッドが準備されていたのでこれは余裕だと踏んでいました
  • が、実際には呼び出してもうんともすんとも言わず。。200が返ってきてるけど。。
tracker = Staccato.tracker('UA-xxxxxxxxxx-x', nil, ssl:true)
tracker.screenview({screen_name: 'xxxx'})
#=> #<Net::HTTPOK 200 OK readbody=true>

デバッグ

  • READMEを見ていたらどうもstaccatoにはアダプタという機構があって、そこでリクエストが正常かチェックできるみたいです
  • なのでその機構を使ってエラーを出力してみました。
tracker = Staccato.tracker('UA-xxxxxxzxx-x') do |c|
  c.adapter = Staccato::Adapter::Validate.new  
end
tracker.screenview({screen_name: 'xxx'})

#=> "{\n  \"hitParsingResult\": [ {\n    \"valid\": false,\n    \"parserMessage\": [ {\n      \"messageType\": \"ERROR\",\n      \"description\": \"A value is required for parameter 'an'. Please see http://goo.gl/a8d4RP#an for details.\",\n      \"messageCode\": \"VALUE_REQUIRED\",\n      \"parameter\": \"an\"\n    } ],\n    \"hit\": \"/debug/collect?v=1\\u0026tid=UA-xxxxxxxxxxx-x\\u0026cid=e2c41d47-e335-403a-bc7c-e7a868875f54\\u0026t=screenview\\u0026cd=xxx\"\n  } ],\n  \"parserMessage\": [ {\n    \"messageType\": \"INFO\",\n    \"description\": \"Found 1 hit in the request.\"\n  } ]\n}\n"

修正

# app_nameというオプションでanパラメータを渡せる様に拡張
Staccato::Screenview::FIELDS[:app_name] = 'an'

tracker = Staccato.tracker('UA-xxxxxxzxx-x') do |c|
  c.adapter = Staccato::Adapter::Validate.new  
end
tracker.screenview({screen_name: 'xxx', app_name: 'app1'})

#=> "{\n  \"hitParsingResult\": [ {\n    \"valid\": true,\n    \"parserMessage\": [ ],\n    \"hit\": \"/debug/collect?v=1\\u0026tid=UA-xxxxxxxxxx-x\\u0026cid=e2c41d47-e335-403a-bc7c-e7a868875f54\\u0026t=screenview\\u0026cd=xxx\\u0026an=app1\"\n  } ],\n  \"parserMessage\": [ {\n    \"messageType\": \"INFO\",\n    \"description\": \"Found 1 hit in the request.\"\n  } ]\n}\n"
  • おお!うまくいきました!

終わりに

  • これバグか仕様変更に追随できないかどっちかっぽいですね
  • そのうちプルリク出しときます