2011年05月

iPhone・AndroidアプリにGoogle Analytics for Mobileを設定して出来る事

 アプリをより良く使ってもらう為には、ユーザーが実際どのようにアプリを利用しているか調べる必要があります。Google AnalyticsはWebアクセス解析として有名ですが、スマートフォン向けアプリに組み込む事も可能です。これにより、様々な事が測定可能になります。今回は私のアプリを例に、何が調査できるのかを見てみましょう。


■この記事のまとめ
・ユーザー数などを調べるのは非常に簡単
・どのページが見られたか、どのボタンが押されたか、もきちんと設定すれば調べられる
・今すぐアプリにGoogle Analyticsを設置してみるべき


■設置方法
 設置方法はAndroidiPhoneで基本的に同じです。ライブラリの追加、必要なものをimport、トラッキングコードを追記、AndroidならAndroidManifest.xmlへの追記、iPhoneならFrameworkの追加、です。


■すぐに測定できること
 まずは、適当にトラッキングコードを書くだけで何が測定できるのかを見て行きます。ここではチェックトレンド(Android版iPhone版)を例に結果を見て行きましょう。

○ユーザー数
google_analytics_user_summary
ユニークユーザー数、訪問数、直帰率、新規訪問数、がわかります。

○画面の解像度
Android(左)とiPhone版(右)
google_analytics_android_screen_resolution google_analytics_iphone_screen_resolution
Androidならばユーザーの画面の解像度、iOSならばiPhone・iPod・iPad(多分)のどれからアクセスされたかわかります。(iPadからアクセスされた事が無いので、そこは未検証)

○サービス プロバイダ
google_analytics_iphone_service_provider
通信事業社名です。どのキャリアからアクセスされているかの他に、無線LAN経由のアクセスについてもわかります。おそらく、NTTドコモは「ntt docomo inc. 」、KDDIは「kddi corporation 」、ソフトバンクは「japan nation-wide network of softbank bb corp.」、と表示されるようです。

○アクセス元の国
google_analytics_android_country
どの国からアクセスされたかがわかります。

○総評
ウェブ版のGoogle Analyticsのように、ある程度の情報を簡単に測定する事が可能です。しかし、アプリの操作に関する情報は集められない為、この情報をアプリ開発にフィードバックするのは難しいのでは。現状把握や概要を掴むのに向いています。


■きちんとトラッキングコードを設置すると測定できること
 ここからは、自分でトラッキングコードをきちんと設定すれば測定できる項目です。基本的に、1つの画面でPVを測定、ボタンやメニューでEventを測定、と考えましょう。私のアプリを例に、いくつか例を見て行きます。

○ボタンやメニューが押された回数
google_analytics_iphone_event_tracking_category_clicks
イベントというものを測定することにより、どのボタンが何回押されたか、メニューボタンは何回押されたか、等を自由に測定可能です。

○画面が見られた回数
google_analytics_iphone_contents_summary
ページビューを測定することにより、どの画面が何回見られたかを測定可能です。
注意して欲しいのは、いつトラッキングコードが読み込まれるかを考えないと正しく測定できないという事です。この画像の例だと、iPhoneアプリでtabbarを使い、それぞれのviewDidLoadにtrackPageviewを書いた為、アプリが起動するたびに全てのtrackPageviewが記録されてしまっています。

○端末が縦か横か
カスタム変数を使う事で、取得する値を自由に設定する事ができます。先日のGoogle I/OではAndroid端末が縦か横かを調べるのに
tracker.setCustomVar(1,"Screen Orientation","orientation",2); //(Orientationにはlandscapeかportraitが入ってる)
という書き方が使われていました。このように書くと、Google Analyticsのカスタム変数の項目に「Screen Orientation」というのができ、そこにlandscapeとportraitの回数が記録されていきます。

○総評
イベントトラッキングはコードが呼ばれた回数を記録するので、これ以外にも色々と応用できます。また、カスタム変数を使えばより細かく自由な測定が可能です。これらの測定により、アプリのどの機能がよく使われているのか把握でき、開発の参考となるでしょう。


■まとめ
 全体として、このようなデータが取れます。Android(左)とiPhone版(右)。(iPhone版はgoogle Analyticsを最近組み込んだのでこのようになっています。)
 google_analytics_android google_analytics_iphone
 使ってみた感想としては、非常にシンプルに色々な情報が集められるな、というのが第一です。しかし、ボタンの押された回数等を測定するには自分で考えて設定する必要があり、複雑なアプリでは面倒な作業。何を調べたいのかを設定しておくのが大事そうです。


■補足
・プログラムがどのように動いているか、その状態遷移をきちんと把握していないと正確な測定ができません。例えばGoogle Analyticsでは平均滞在時間の測定も可能ですが、これを正確に知りたければ、いつどのような条件でアプリが終了or中断されるか、どう再開されるか、知らなければなりません。
・Google Analytics for Mobileではアプリがオフラインの時もデータを保存し、次にオンラインになった時にデータを送ってくれます。自分から通信しないアプリでも、いつ送信するか制御可能です。
・文中でGoogle I/Oに言及しましたが、先日のGoogle I/Oでも講演がありました。その後の報告会でもこのトピックが紹介されたようで、アプリへのGoogle Analyticsの導入はますます進んでいくでしょう。 該当講義のYoutubeはこちら:YouTube - Google I/O 2011: Optimizing Android Apps with Google Analytics。日本での報告会の報告はこちら: GTUG主催Google I/O報告会レポート: 一流モバイル開発者を夢見るブログ。Youtube動画は機能の紹介に終始していたので、あんまり面白く無いです。でもカスタム変数の使い方は面白かったかも。

iPhoneアプリをブラウザでテストできるPieceable Viewerを試しました

■概要  
Pieceableとは、プログラミング無しでiPhoneアプリケーションを作成できるサービスです。現在「Pieceable」はまだ提供されておらず、「Pieceable Viewer」が提供されています。こちらは、iPhoneアプリケーションをWeb上で動作させてくれる、というもの。Flashにより実現しており、アプリのβテストや動作デモとして面白そうです。今回はこのPieceable Viewerを試してみましょう。


■動作するアプリの条件
・iOS Simulatorで動作するものなら基本的に動かせる。
・UIKitは動作するが、OpenGLとMapViewは動くものの表示されない。これらは今後対応していくとのこと。
・iPadアプリも今後対応していくらしい。


■登録方法
※ここでは無料のTRIAL版を使った場合について説明します

・まずappファイルを見つけます。Xcode3では、プロジェクトが置いてあるディレクトリのbuild/Debug-iphonesimulatorにappファイルがあります。拡張子が表示されていないかもしれませんが、ファイルの種類がアプリケーションになっています。(Xcode4でのやり方がわかりません。私の環境だとbuildディレクトリが空になっています)
・ターミナルを起動し、「$ ditto -cj build/Debug-iphonesimulator/YourApp.app - | curl -F "email=you@somewhere.com" -F "file=@-" http://www.pieceable.com/view/publish」と入力。アプリのディレクトリとメールアドレスは適宜変更して下さい。
・入力すると、ターミナルにはこのように表示されます。
hogehoge:~ hoge$ ditto -cj アプリ.app  - | curl -F "email=you@メルアド" -F "file=@-" http://www.pieceable.com/view/publish 
            ___ _                     _     _      
           / _ (_) ___  ___ ___  __ _| |__ | | ___ 
          / /_)/ |/ _ \/ __/ _ \/ _` | '_ \| |/ _ \
         / ___/| |  __/ (_|  __/ (_| | |_) | |  __/
         \/    |_|\___|\___\___|\__,_|_.__/|_|\___|
                                                   
.
     
  Hi you@メルアド!  You need to confirm your email address before
  you can publish.  Go check your email - we just sent you a link.
・ここで入力したメールアドレスにメールが届くので、書かれたURLをクリック。「Confirmed! Now just go back to your terminal and upload again to publish.」と表示されたら登録完了です。
・再びターミナルに戻って、先程と同じコマンドを入力します。
hogehoge:~ hoge$ ditto -cj アプリ.app  - | curl -F "email=you@メルアド" -F "file=@-" http://www.pieceable.com/view/publish 
            ___ _                     _     _      
           / _ (_) ___  ___ ___  __ _| |__ | | ___ 
          / /_)/ |/ _ \/ __/ _ \/ _` | '_ \| |/ _ \
         / ___/| |  __/ (_|  __/ (_| | |_) | |  __/
         \/    |_|\___|\___\___|\__,_|_.__/|_|\___|
                                                   
.   
  
  Application loaded!
  
  Name: CheckTrendJ
  ID: アプリの識別子
  Size: 0.61M
  SHA: SHAが表示
  URL: http://www.pieceable.com/view/qb/c4b4b3791794951b030d8be34009e6bd7182e530
・このように表示されれば成功です。返ってきたURLにアクセスしてみましょう。


■動作結果
・私のアプリはこちら。TRIALで動かした場合は1時間という時間制限がつくので、もう動いていません。以下はその時のスクリーンショットです。英語版なので、日本向けのアプリ画面とは少し違います。
PVImage
・動かした感じだと、私のようにシンプルなアプリなら何も問題無いようです。凄い。(ちなみに動かしたアプリはこちらです)
・特徴は、シミュレータの言語設定は英語、ちょっと重たい、WebViewも正常に動作、sharekitフレームワークからtwitterへの投稿も成功、といった感じ。
・Pieceableが用意しているデモはこちらとか。このように、iOS Simulatorの感覚で操作できます。


■使用場面
・サイトでは、クライアントとのアプリの共有、ベータ版の配布、プレゼン、デバイスID無しでのデモの配布、と書かれています。ベータ版の配布には便利かもしれません。ただ、肝心のタッチの具合がわからないので、動作や仕様の確認までに適していそうです。


■その他
・Titanium iOS appsにも対応しているらしい(Titanium iOS apps and Pieceable Viewer! - Pieceable's Blog
4月12日の記事に「数週間後には、Androidもサポートされるそうだ」と書いてあるのですが、まだ対応していないようです。
・利用料金はTRIAL、BASIC、PROの3通り用意されています。TRIALでは1つのアプリを1時間までしかテストできないので、ほんとにTRIAL用にのみ使えます。BASICでは5つのアプリをずっと動作させられるので、本格的に利用するならば有料のBASIC以上を考える必要があります。


■参考:
iPhone/AndroidアプリのデモをWebブラウザ上で提供するサービスPieceable Viewer

Android向け広告、AdMob、AdLantis、AdMakerを比較

[追記]
初稿から2年以上経過し、内容が古くなっています。現状と乖離した箇所が増えてきました。
広告システムは日々進化しています。今の状況を知るには改めて調べた方が良いでしょう。
(2013.05.13追記)

スマートフォン向けの広告にその将来性を見込み様々な会社が参入して来ていますが、どれを選べば良いのでしょうか。いくつかの広告を比較してみましょう。

■AdMob
設置マニュアル:Google AdMob Ads Android Fundamentals - Google AdMob Ads SDK - Google Code

○メリット
・揺れはあるが、30~70%の表示率(google adsenseが表示されるようになり、表示率が上がった)
・まあまあ簡単に設置できる。
・広告に対して「android:layout_height="wrap_content"」が設定できるので、取得に失敗すると自動でそのレイアウトごと無かったことにできる。
・どんなジャンルの広告を出すか設定可能。
・自社広告を表示させる設定もできる(表示割合もを選択できる)
・海外向けアプリにも設置できる
・広告取得に失敗した時にonFailedToReceiveAdを呼べば色々便利。
・広告に色が設定できる。これにより、広告とアプリの雰囲気を合わせる事ができる。
例:チェックトレンドの場合
AdMobにグラデーションの色を設定した例

○デメリット
・表示率があまり高くない
・英語しか書いてない広告が出る時がある
・google adsense広告の表示ができるものの、文字だけで味気ない、ジャンプするのに2回クリックが必要、PCサイトに飛ばされる事が多い、と、良い広告とは言えないのではないか。(yahoo!モバゲーというPCからしか利用できないサイトに飛ばそうとする広告まである。これは広告出稿者にとっても損な話だ。)

○その他
・AdMobはGoogleの子会社(Google、モバイル広告大手のAdMobを7億5000万ドルで買収 - ITmedia News
・AdMobは「AdMob Mobile Analytics」というサービスもやっているが、googleも同様のGoogle Analytics for Mobileを提供しているので、今後どうなるのかはわからない。

○総評
・広告システムは優秀ですが、表示率の低さ、特に国内向け広告の表示率の低さが気になります。iPhoneとAndroidでも事情は違うようですが、Androidにおいて表示率は低いのでは。システム面の優秀さから、他の広告と組み合わせやすいのも特徴でしょう。




■AdLantis
設置方法:AdLantis Android SDK - AdLantis TechNote

○メリット
・広告の設置方法が簡単(xmlに追記は必要だが、javaのソースコードに追記が必要無い)
・広告の表示率が日本において結構高い(同じ広告が多いが、とりあえず表示される)
・横に長い広告も用意されている(特に設定しなくても自動的に表示される)

○デメリット
収益の受け取り方はどこに書いてあるんでしょう。他のサイト見ると毎月請求書を書かないといけないらしいんですけど、それすらAdLantisのサイト上に記述してないですね。今は普通に銀行口座を登録して振込してくれます。
・広告をLinearLayoutで囲っても「android:layout_height="wrap_content"」が設定できない。
・広告取得に失敗した時に何も呼ばれない(AdMobにおけるonFailedToReceiveAdのようなものがAndroid版だと無い)
・つまり、「取得できなければxmlのレイアウトごと消す」という動作ができない。
・ソースコードから広告呼び出しタイミングを制御できないので、制御しづらい。
・結構な割合で同じ広告。
・「キャッシングの広告は出したく無い」と思っても、そういった広告制限の設定はできない。(アダルト広告配信のみON/OFFが設定できる)
・インプレッション数は公表されているが、リクエスト数は公表されていないので表示率がわからない。

○その他
・AdLantisはGREEの子会社になった。ちなみにCAやDeNAもスマートフォン向けの広告会社を設立したりと、この辺りは日々変化している。(株式会社アトランティス ≫ プレスリリース ≫ グリー株式会社による当社子会社化についてサイバーエージェントとDeNA、スマートフォン向け広告会社設立 - ケータイ Watch

○総評
・端末を横にした時のレイアウトがあるなど、期待できる部分もかなりあります。が、現状ではシステム面や広告の制御があまりできず、扱いづらいです。

※補足
・AdLantis広告を一時的に消すには、AdLantisのレイアウトをLinearLayoutで囲み、android:visibility="gone"を設定してやれば良い。この時LinearLayoutにandroid:layout_height="wrap_content"を指定してしまうと、広告が画面一杯のサイズになってしまう。(AdMobのように自動で適切なサイズにはなってくれない。)
・報酬の支払いに関しては規約に「弊社は、原則として、報酬を毎月末締め、翌々月末日に媒体オーナーが別途指定する銀行口座へ振込むことにより支払います。」とあるので銀行振込だと思ったのですが、どこにも書いてありません。要するに問い合わせとかしないとわからない状況。
・画面横にした場合の広告はこのような感じになる。xmlファイルを2つ用意すれば端末の向きに合わせたレイアウトを設定できるので、そうすれば隙間無いように配置できるはず。以下にスクリーンショット。
adlantis001 adlantis002




■AdMaker (mediba ad powered by AdMaker)
設置方法:ログインしないと資料は見れません。広告設置にはjarファイルのインポート、xmlレイアウトへの追記、ソースコードへの追記、AndroidManifestへの追記、が必要。

○メリット
・日本国内において高い広告表示率(国により異なる。自社広告が表示されるのはテストの時だけ?)
・他社との業務提携により、海外配信もMojivaなどを通して行っているらしい(海外のアプリがMojivaを設置すると日本語の広告が配信されるらしいのは見た事があるが、AdMakerを設置した場合海外でどうなるかはわからない)
・設置はそれなりに簡単
・広告取得失敗時にonFailedToReceiveAdMakerを呼べば色々便利(SDK Ver1.1から実装)。(2011.05.29追記)
・自社広告も設定可能(広告掲載の審査があるので時間がかかる。どういう風に自社広告が設定できるのか不明)(審査があるのを知らずに、適当に作った画像upしてしまったが、キャンセル方法はweb上には用意されていない。後日丁寧にも「広告内容が表示されておりません」というメールが届きました、すみません・・・)

○デメリット
・登録時にメールで送られてくるパスワードの変更方法が無い、過去に収益の表記を間違えた事がある等、運営体制に疑問がある。
・アプリを申請してから広告が設定されるまでの間に人の手が入るので、登録に時間がかかる。
広告取得に失敗した時に何も呼ばれない(AdMobにおけるonFailedToReceiveAdのようなものがAndroid版だと無い)
・つまり、「取得できなければ別の広告を呼ぶ」という動作ができない。(方法はあるらしいがわからない。何かしらの工夫が必要)
SDK Ver1.1にてonFailedToReceiveAdMakerが実装されました。(2011.05.29追記)
・収益が表示されても、収益の表記が表示箇所によりずれがあり結局いくらなのかわからない時がある。
・最近は広告システムが不安定になりがち。収益表示が0になったり。(2011.05.29追記)

○総評
パスワードの件とかもあり不安な部分はあります。しかし表示率は高い為、そこは魅力と言えるでしょう。プログラム内での制御はそれなりに可能ですが、広告が呼べなかった時の扱いなどはまだ補強して欲しい部分。(2011.05.29修正)後は広告管理システムが不安定なのが不安材料か。

※補足
・名称変更がありました。「AdMaker」は「「mediba ad powered by AdMaker」」となります。(「mediba ad powered by AdMaker」をサービス展開 | 2011年 | 株式会社medibaTwitter / @kiyokb: 事業効率を高めるために、サービスの統合を進めていきま ...)(2011.09.01追記)




■まとめ
表にしてみました。
項目 AdMob AdLantis AdMaker
表示率 30~70%程度。
国・言語により異なる。国内は低い印象
高め 高め
クリック単価 $0.02~$0.14くらい
(レートにもよるが2円~11円くらい)
7.5円? 3~9円くらい?(単価は不明、平均値から推測)
収益の受け取り方法 paypal、振込(海外からの送金になるのでSWIFTコードのある銀行口座が必要) こちらから請求する?受け取り方法は不明 振込
対応地域 日本、海外
地域により表示率が異なる
日本 日本、海外(海外に配信してる会社と連携。実際どの程度表示されるかは不明)
広告の配信設定 配信する言語、広告の種類、自社広告表示割合、を設定可能 アダルト要素を含む広告配信の有無のみ設定可能 自社広告表示を設定可能(どう設定できるのかは不明)
広告自体の設定 広告の色、サイズが設定できる(AdSense等は適用外。あくまで一部の広告) 無し 無し
プログラム xmlとjavaから制御可能、エラー時に呼ばれるメソッドがある xmlのみで制御(簡単だとも言えるが制御しづらい場合もある) xmlとjavaから制御可能
xmlとjavaから制御可能、エラー時に呼ばれるメソッドがある。(2011.05.29に文章修正)


■コメント
・使ってみた感触だとAdMobが使いやすいです、それ以外のAdLantisとAdMakerではAdMakerの方が扱いやすそうですが、システム面がまだかなり不十分です不安定です。どの会社の広告も様々なアプリで使用されているようなので実績はあるようですが、不安なのも事実。(2011.05.29一部修正)
・私自身はAdMobを基本的に使っています。アプリのデザインに合わせて色を設定できるのが素晴らしいです。ただ表示率が低いのが難点。Google adsenseにはあまり魅力を感じませんが、とりあえず表示させています。
・AndroidでもiPhoneでもそうですが、何種類かの広告を組み合わせる事も可能なので、優先順位を決めて組み合わせるのが最も安定する方法なのかもしれません。

Android開発 AdMobが表示されなかった時に他の会社の広告を表示する

AdMobの表示率はあまり高く無いので、AdMobが呼ばれなかった時に他の広告を呼ぶ方法を考えます。今回はAdLantisで説明しますが、AdMakerの場合もほぼ同じです(ちょっと書く事が増える)。

○手順
やり方は以下の通りです。
1.AdLantisのXMLレイアウトをLinearLayoutで囲んでおく
2.あらかじめそのLinearLayoutを消しておく
3.java側でAdMobを普通に呼ぶ
4.AdMobを呼ぶのに失敗したら、AdLantisのXMLレイアウトを表示するよう変更する
以上です。AdMobは広告が呼ばれなかった時にonFailedToReceiveAdが呼ばれるので、ここで他の広告の呼び出しを行います。なお、この方法はAdLantisだけでなく、AdMaker等ほかの広告にも適用可能です。

○ソースコード
XML側
<LinearLayout android:id="@+id/adLantisLayout"
	android:layout_width="fill_parent"
	android:layout_height="wrap_content"
	android:orientation="vertical"
	android:layout_below="@+id/adLantisOutsideLayout"
	android:visibility="gone">
	<jp.Adlantis.Android.AdlantisView
		android:id="@+id/adView"
		android:layout_width="fill_parent" 
    		android:layout_height="50dp"
    		android:layout_centerVertical="true"
    		android:layout_centerHorizontal="true" 
    		android:gravity="center"
	/>
</LinearLayout>


そしてjava側では
public class checktrend extends ListActivity implements AdListener{
	@Override
	public void onCreate(Bundle savedInstanceState) {
		//色々書く。
	}
	@Override
	public void onReceiveAd(Ad arg0) {
		//広告が読み込まれた
	}
	@Override
	public void onFailedToReceiveAd(Ad arg0, ErrorCode arg1) {
		//広告が読み込めなかった
		//AdLantisを表示(xmlで非表示になってるのを表示に変更)
		LinearLayout layoutAdlantis = (LinearLayout)checktrend.this.findViewById(R.id.adLantisLayout);  
        layoutAdlantis.setVisibility(View.VISIBLE); 
	}
	@Override
	public void onPresentScreen(Ad arg0) {
		//画面の前に広告が出たら呼ばれる?
	}
	@Override
	public void onDismissScreen(Ad arg0) {
		//フルスクリーン広告が呼べなかった時に呼ばれる?
	}
	@Override
	public void onLeaveApplication(Ad arg0) {
		//広告により別のActivityが呼ばれると呼ばれる
	}

みたいにすれば良いのでは。適宜変更して下さい。

○コメント
・このやり方はAdMakerでも使えます。onFailedToReceiveAdにて広告レイアウトをVISIBLEにして、かつ広告を読み込めばokです(AdMaker.setActivity(this);とかを書く)。
・もっとシンプルにできそうですが、とりあえず動いてるので大丈夫ではないでしょうか。

Evernoteに過去のメールをインポートする方法

以前にもこのテーマで記事を書いたのですが、今回良いやり方がわかりました。Applescriptを使ってメールを一気にEvernoteへインポートします。

■環境条件
Macにて、Mail、Applescript、Evernoteクライアント、が動く環境

■手順
1.Mailでメールを受信
2.EvernoteにインポートしたいメールをMail上で選択
3.AppScriptを起動
4.こちらのスクリプトを貼付けて実行
Apple Mail to Evernote Applescript
5.どのノートに入れるか選択し、終わるまで待つ
以上。

■注意点
・まれに止まるので、たまに様子を見る必要があります。
・HTMLメールはテキストに変換されます。
・添付ファイルはインポートされないので、後から手動でインポートする必要があります。
・アカウントの容量に注意。
・最初は適当にアカウントを作成して、そこで実験するのが良い方法だと思います。

■コメント
この方法で、1万通近くのメールをEvernoteにインポートする事ができました。特定のメールでフリーズするらしく、30通近くはインポートを諦めましたが、それ以外は正常にインポートできて満足です。

■その他
最新のベータ版ではHTMLメールや添付ファイルにも対応しているようですが、私の環境では動かす事はできたものの、ほんの一部のHTMLメールしかインポートできませんでした。MailTagsなど他のソフトのインストールも必要です。どうしてもHTMLメールでインポートしたい方は試してみると良さそうです。
Apple Mail to Evernote Importer - BETA

Androidアプリを出す為にやった事まとめ

先日、チェックトレンドのAndroid版をリリースしました。私にとって初となるAndroidアプリです。この記事はそれまでにやった事や調べた事のまとめです。

続きを読む
このサイトは
 Webアプリケーション開発のことや、iPhone・Android向けアプリ開発の話題がメインです。技術情報を取り扱っています。
 管理:えんたつ。twitter: @tattyamm
mimage
カテゴリ別アーカイブ
RSS
リンク
プログラミング本
アプリを作る時などに読んだ本
iPhoneプログラミングUIKit詳解リファレンス iPhoneプログラミングUIKit詳解リファレンス Android Layout Cookbook アプリの価値を高める開発テクニック パーフェクトPHP (PERFECT SERIES 3) JavaプログラミングBlack Book 2nd Edition (Black Bookシリーズ)
表記
当サイトではGoogle Analyticsを使用しております。詳細はこちらを御覧ください