アプリリリース後に後悔しないための20のこと
DESCRIPTION
ユーザからのコメントを有効に活用し、アプリを効率よく運営していく方法。TRANSCRIPT
アプリリリース後に後悔しないための
20のこと
曽川 義英赤峰 義明
チームEGGの紹介
チームEGG個人開発コラボ集団
待ち受けトラッパーよるにゃん
よるにゃん
待ち受けトラッパー
はじめに
今回紹介するのは一例です
全てを満たせばいい・・・というわけではありませんが参考にしてください
アプリリリース後に後悔しないための
20のこと
開発者の胸を痛める言葉の数々
Googleユーザ
おもしろくない。即刻アンインストールした
Googleユーザ
単純すぎ、つまんね。
Googleユーザ
\(^o^)/
今日は耳をふさがずに聴いていきましょう
後悔しないために
設計・デザインは何を考えれば良い?
Androidぽくない
Googleユーザ
Webの方が使いやすい
1.Androidの流儀に従う
流儀とは?
Android Designhttp://developer.android.com/design/index.html
1.Androidの流儀に従う
こんなことや
1.Androidの流儀に従う
設定 ヘルプ
こんなことを書いてます
1.Androidの流儀に従う
「でも、英語だから読むのつらい」「だれか訳してよ。」
なので作りました。Android Design 翻訳 by チームEGGhttp://android-design.mobaegg.com/
OSバージョンを考えてなかった
Googleユーザ
インストールできません。早く対応してください。
Googleユーザ
OSをバージョンアップしたら起動できなくなくなった
2.バージョンを決める
minSdkVersion● サポートする最小のバージョン● シェア見ながら決める
2.バージョンを決める
targetSdkVersion● 「テストした」バージョン● 「変えちゃっても大丈夫でしょ」はまずい
○ 11以上:configChangeにsmallestScreenSizeと uiModeが追加 (縦横切替に影響)
○ 13以上:AsyncTaskがシリアル実行される (非同期処理に影響)
○ 17以上:デフォルトでexported=falseになる (アプリ連携に影響)
これはほんの一例
2.バージョンを決める
maxSdkVersion● 基本的に指定しない
2.バージョンを決める
ビルドターゲットバージョン● 最新バージョンで行う● 開発時にAPI差分を認識する
あ、タブレットを忘れてた
Googleユーザ
タブレットなのに横向きにできない
3.縦画面・横画面を考える
Android Design「Multi-pane Layouts」
4パターン
こんな画面サイズあるの?
Googleユーザ
レイアウトが崩れている
HT-03A XperiaTM
SO-01BIS03 GALAXY
NoteHTC Jbuttefly
density 1 (mdpi) 1.5 (hdpi) 2 (xhdpi) 2 (xhdpi) 3 (xxhdpi)
解像度 320×480 480×854 640×960 800×1280 1080×1920
DPI 320×480 320×570 320×480 400×640 360×640
比率 2:3 9:16 2:3 10:16 9:16
4.崩れない画面デザインをする
解像度と画面比率
1. 最小の画面サイズ(320dp×480dp)でデザイン
・単位はdpで統一
4.崩れない画面デザインをする
320dp×480dp
2. 大きい画面サイズに合わせる
・weightやmatch_parentを利用する
4.崩れない画面デザインをする
360dp×640dp
*Android Designは別の手段で記載
「Devices and Display」
4.崩れない画面デザインをする
広告をいれる場所がないんだもの
Googleユーザ
広告が邪魔。間違って押してしまう
Googleユーザ
ボタンの上に広告が出てきて押せない
5.広告ありの画面で考える
ゲーム画面
ステージ2へ
タイトに組み込まれた広告(とにかく広告を入れた)
広告
広告
5.広告ありの画面で考える
ゲーム画面ゲーム画面
ステージ2へ広告ボタン
タイミングよく(悪く)出る広告(とにかくクリック率を上げたい)
5.広告ありの画面で考える
クリック単価減アンインストール罵倒コメント
みんな不幸になった
イライラ
効果が薄い
広告主
ユーザ
開発者
5.広告ありの画面で考える
・はじめから広告含めた画面デザインをする
・ユーザ操作を邪魔しない
実装するときに気をつけること
自分の端末だと大丈夫だよ?
Googleユーザ
アプリが固まります。機種はXXXです。
6.端末性能ごとに確認する
指針1・代表的な端末でテストする
6.端末性能ごとに確認する
指針2・よく売れている端末でテストする (アプリがターゲットとしている国)
6.端末性能ごとに確認する
指針3・RAM容量が小さい端末でテストする
いろんな端末で見たよ?
Googleユーザ
アプリが固まります。機種はXXXです。
7.GPUごとに確認する
GPU 代表機種
Adreno/Snapdragon EVO 3D, Xperia arc
PowerVR Nexus S, GALAXY NEXUS
Tegra Nexus 7, XOOM
Mali Galaxy S Ⅱ, Galaxy S Ⅲ,Nexus 4
OpenGLやカメラを使う時
この端末じゃきついよね…
Googleユーザ
画像を読み込むとアプリが落ちます。機種はXXXです。
8.画像読み込みおさらい
OutOfMemoryOutOfMemory
8.画像読み込みおさらい
ダウンサンプリング(BitmapFactory.Options#inSampleSize)
8.画像読み込みおさらい
いろいろ難しいので
ダウンサンプリングは実際どうやる?
読み込みをキャンセルしたら?
4.0以前に向けてどうする?
画面回転したら?
ListView内で使うには?
どうやってキャッシュする?
8.画像読み込みおさらい
見てくださいCaching Bitmapshttp://developer.android.com/training/displaying-bitmaps/cache-bitmap.html
Y.A.Mの雑記帳http://y-anz-m.blogspot.jp/2012/08/android.html
8.画像読み込みおさらい
どういう動きになるか
「よるにゃん」をインストール
http://p.tl/HjjO「まえのねこ」を選択 サムネイル読み込み
ほぼちゃんと動いてたのに
Googleユーザ
課金が反映されない。
9.In-App-Billing v2おさらい
BroadcastReceiver
Activity
9.In-App-Billing v2おさらい
BroadcastReceiver
Service
速攻データを保存 Serviceまたは
BroadcastReceiverActivity
9.In-App-Billing v2おさらい
BroadcastReceiver
Activity
Service
Activityは主にUIを処理させる
9.In-App-Billing v2おさらい
BroadcastReceiver
ActivityActivityダメなパターン
9.In-App-Billing v2おさらい
BroadcastReceiver
Activity
AsyncTaskAsyncTask
ダメなパターン
リリースの際に気をつけること
とりあえず入れておけばいいでしょ
Googleユーザ
なんでXXXの取得権限があるの?こわい。
Googleユーザ
アプリをインストールすると、個人情報を抜かれます。
10.パーミッションの見直し
● できるだけ少なく○ Intent連携で機能見直し○ ユーザーの誤解防止
● 必要なものだけ追加○ 不必要なパーミッション削除
● 利用の明記○ GooglePlay記載
10.パーミッションの見直し
【参考】 Google I/O 2012 - Ten Things Game Developers Should Know
そんなことしてないのにな…
Googleユーザ
ウイルスです。
Googleユーザ
このアプリを入れたらデータが消えました
11.セキュアな証明をする
セキュアなコーディング・日本スマートフォンセキュリティ協会(JSSEC) http://www.jssec.org/ - セキュア設計・セキュアコードガイド
- ネットワークセキュリティ実装ガイド
11.セキュアな証明をする
アンドロイダーの利用 - 公認デベロッパー制度
・アプリのパーミッションチェック
・ウイルススキャン
https://androider.jp/
11.セキュアな証明をする
英語が得意じゃない
Googleユーザ
ニホンゴよめない。エイゴおねがい。
12.多言語対応をする
世界のスマホ利用台数
Source:Flurry
1. アメリカ:
2. 中国:
3. イギリス
4. 韓国:
5. 日本:
6. ドイツ:
7. フランス:
8. ロシア:
9. インド:
2億2000万台
2億1000万台
4300万台
3000万台
2900万台
2700万台
2300万台
2300万台
1900万台
12.多言語対応をする
Source:Flurry
言語設定に応じたリソース切り替え● フォルダ名
○ 言語コード:「ISO 639-1」○ 地域コード:「ISO 3166-1-alpha-2」例:「values-en」、「values-en-rGB」、「values-ja」
● 英語/日本語で対応する場合○ values:英語(デフォルト)○ values-ja:日本語
12.多言語対応をする
Source:Flurry
Googleおすすめ例(EFIGS+CJK)
公開後どうすれば?
更新はどうやれば?
Googleユーザ
全然更新されない。
Googleユーザ
バグはいつ直りますか?
13.アプリ更新おさらい
1.パッケージ名を変更しない - 別のパッケージは別アプリ
- 一度公開したものは削除不可
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.egg.sample" android:versionCode="1" # バージョン番号
android:versionName="1.0.0" # バージョン名> ...</manifest>
13.アプリ更新おさらい
2.バージョン番号(versionCode)を上げる - 前回の数字より大きいもの(1 ⇒ 2) - バージョン名(versionName)は自由 例:<major>.<minor>.<point> <?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.egg.sample" android:versionCode="2" # バージョン番号
android:versionName="1.0.0" # バージョン名> ...</manifest>
13.アプリ更新おさらい
3.同じキーストアで署名 - キーストアは再発行できない
- パスワードを忘れると署名できない
キーストアの管理・バックアップ
いっぱい起動してもらおう
Googleユーザ
通知がいっぱい来るので邪魔です。アンインストールします。
14.通知を知る
通知(ノーティフィケーション)の役割
● 重要なイベントを通知するもの● 発生したイベントを追うログ● 通知情報によって優先度を使い分ける(JB)
14.通知を知る
通知OK● タイムセンシティブ(期限がある)
○ カレンダーのイベント
● ほかの人が関係する○ チャット着信
中断するほど重要な情報か?1. 選択権を与える(ON/OFF)2. 優先度フラグを調整
14.通知を知る
通知NG● ユーザに向けられていない情報● 同様の通知が存在する場合(スタックさせる)● ほっておいても解決するもの● アプリを広告するため● ブランド浸透のため
不要な通知は失望とユーザ離れを起こす詳しくは『ノーティフィケーション』(Android Design)
いちゃもんつけられた
Googleユーザ
全然面白くない。即刻アンインストール
Googleユーザ
ゲーム内容が簡単すぎる。単純。
Googleユーザ
\(^o^)/
15.気持ちを強く穏やかに
厳しいレビューは覚悟 - いちゃもんに思うが、そう思われたのは事実
- コメントに感謝
- ユーザの声に耳を傾ける
アプリバージョンアップ時は?
アップデートのテストをしてなかった
Googleユーザ
アプリをバージョンアップしたら動かなくなった。
Googleユーザ
起動しない。早く対応しろ!
Googleユーザ
昨日まで使えてたのに…
16.バージョンアップ確認をする
・上書きインストールの確認1. Google Playから現行バージョンをインストール2. 署名済みの次期バージョンアプリを
コンソールで上書きインストール
3. 動作確認a. 新機能/変更点b. プリファレンスc. データベースd. 課金周り
adb install -r [パッケージ名]
16.バージョンアップ確認をする
・UI AutomatorAndroid SDK Tools Rev21でサポート新しいUIテストフレームワーク
adakodahttp://www.adakoda.com/adakoda/2012/12/android-uiautomator-2.html
16.バージョンアップ確認をする
ガイドラインチェック・Androidアプリ品質ガイドラインhttp://googledevjp.blogspot.jp/2013/01/core.html
・タブレット向けアプリ品質チェックリストhttp://googledevjp.blogspot.jp/2013/01/tablet.html
・公開後にアプリ品質を向上させるhttp://googledevjp.blogspot.jp/2013/01/app-quality.html
アプリに応じたテスト項目
テストをちゃんとやったのに
Googleユーザ
アプリをバージョンアップしたら動かなくなった。
Googleユーザ
起動しない。早く対応しろ!
Googleユーザ
昨日まで使えてたのに…
炎上中
17.不具合を追跡する
テストを行っても防ぎきれない。 ⇒問題はボヤのうちに鎮火させる 煙は『GoogleAnalytics』で追跡
17.不具合を追跡する
17.不具合を追跡する
17.不具合を追跡する
テスト漏れは防ぎきれない。 ⇒問題はボヤのうちに鎮火させる 煙は『GoogleAnalytics』で追跡
【参考】・GoogleAnalytics:
http://www.google.co.jp/intl/ja/analytics/
・Google Analytics V2 翻訳 (EGG 開発ブログ)http://goo.gl/saeWY
・Google Analytics V1 を利用した追跡 (EGG 開発ブログ)http://goo.gl/pHJcg
17.不具合を追跡する
機種の動作差分も注意○ T-01C、IS04
独自フォントが使えない
○ L-05D Notification#DEFAULT_LIGHTSを 指定するとWAKE_LOCKが必要
他にもいろいろあります
使いやすいUIに直したのに
Googleユーザ
変わりすぎて使いづらい。ダウングレードしたい。
Googleユーザ
改悪
18.ユーザに合わせる
大きな変化は戸惑うユーザに合ったスピードで更新する
18.ユーザに合わせる
ユーザの反応を見ながら - 例:アップデート1回目 (レイアウト変更)
18.ユーザに合わせる
ユーザの反応を見ながら - 例:アップデート2回目 (アクションバー追加)
18.ユーザに合わせる
ユーザの反応を見ながら - 例:アップデート3回目 (オーバーフロー追加)
18.ユーザに合わせる
ユーザの反応を見ながら - 例:アップデート4回目 (タブ追加)
更新が早くて、
使いやすくなった
Googleユーザ
18.ユーザに合わせる
GoogleAnalyticsで変更前後の行動分析
新しいAndroidが発表されたら?
自分に関係ないと思ってた
Googleユーザ
OSバージョンをあげてから使えなくなりました。
Googleユーザ
ファイル保存出来ません。
19.APIを使い分ける
・Activity#showDialog →DialogFragment・Gallery →HorizontalScrollView →ViewPager・SlidingDrawer →オープンソースをコピペ
・DefaultHttpConnection(2.2↓) ⇔HttpURLConnection(2.3↑)
今まで動いてたから大丈夫
Googleユーザ
OSバージョンをあげてから使えなくなりました。
Googleユーザ
ファイル保存出来ません。
後悔しないためのまとめ
コメントはアプリへの期待?
Googleユーザ
面白い!XXXもできたら星5です!
Googleユーザ
すばらしい!
まずはコメントをもらう
ファンを作る
NEW
ご清聴ありがとうございました
補足
4.崩れない画面デザインをする
3. 画面の特性でリソースを切り替える
a.画面サイズ
修飾子 説明
small smallサイズ画面用リソース
normal normalサイズ画面用のリソース(ベースサイズ)
large largeサイズ画面用のリソース
xlarge extra largeサイズ画面用のリソース
4.安全な画面デザインを作る
3. 画面の特性でリソースを切り替える
b.密度
修飾子 説明
ldpi low密度画面用のリソース (~120dpi)
mdpi medium密度画面用のリソース (~160dpi) (ベース密度)
hdpi high密度画面用のリソース (~240dpi)
xhdpi extra high密度画面用のリソース (~320dpi)
xxhdpi extra extra high密度画面用のリソース (~480dpi)
nodpi 画面密度に関係なく、スケールされないリソース
4.安全な画面デザインを作る
3. 画面の特性でリソースを切り替える
c.画面向き
修飾子 説明
land 横画面方向の画面用リソース
port 縦画面方向の画面用リソース
6.端末性能ごとに確認する
Compatibility Definition Document(CDD)OSバージョンごとの端末メーカが最低限満たすべき要件
http://source.android.com/compatibility/downloads.html
8.画像読み込みおさらい
以下はあまり効果がない・SoftReference<Bitmap>(2.3以降)・WeakReference<Bitmap>(2.3以降)・System.gc();