SlideShare a Scribd company logo
アプリリリース後に後悔しないための
20のこと

曽川 義英
赤峰 義明
チームEGGの紹介

              チームEGG
            個人開発コラボ集団




    よるにゃん     待ち受けトラッパー
よるにゃん
待ち受けトラッパー
ブログ紹介




        EGG 開発ブログ
        http://eggdev.mobaegg.com/
はじめに



       今回紹介するのは一例です

        全てを満たせばいい
・・・というわけではありませんが参考にしてください
アプリリリース後に
後悔しないための
  20のこと
開発者の胸を痛める言葉の数々

   Googleユーザ


   おもしろくない。即刻アンインストールした


   Googleユーザ


   単純すぎ、つまんね。


   Googleユーザ


   \(^o^)/
今日は耳をふさがずに
 聴いていきましょう
後悔しないために
設計・デザインは何を考えれば良い?
Androidぽくない

    Googleユーザ


    Webの方が使いやすい
1.Androidの流儀に従う

                  流儀とは?



               Android Design
  http://developer.android.com/design/index.html
1.Androidの流儀に従う

         こんなことや
1.Androidの流儀に従う

      こんなことを書いてます




            設定    ヘルプ
1.Androidの流儀に従う

     「でも、英語だから読むのつらい」
        「だれか訳してよ。」




           なので作りました。
   Android Design 翻訳 by チームEGG
   http://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ユーザ


   レイアウトが崩れている
4.崩れない画面デザインをする
  解像度と画面比率
          HT-03A     XperiaTM       IS03      GALAXY       HTC J
                     SO-01B                    Note        buttefly




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で統一

                        320dp×480dp
4.崩れない画面デザインをする

2. 大きい画面サイズに合わせる
   ・weightやmatch_parentを利用する

                               360dp×640dp
4.崩れない画面デザインをする

  *Android Designは別の手段で記載
      「Devices and Display」
広告をいれる場所がないんだもの

   Googleユーザ


   広告が邪魔。間違って押してしまう


   Googleユーザ


   ボタンの上に広告が出てきて押せない
5.広告ありの画面で考える

    タイトに組み込まれた広告
       (とにかく広告を入れた)




          ゲーム画面
           広告
          ステージ2へ
           広告
5.広告ありの画面で考える

    タイミングよく(悪く)出る広告
      (とにかくクリック率を上げたい)




           ゲーム画面



           ステージ2へ
           広告ボタン
5.広告ありの画面で考える
        みんな不幸になった
        クリック単価減
        アンインストール
        罵倒コメント
  開発者

        効果が薄い
  広告主

        イライラ
  ユーザ
5.広告ありの画面で考える




      ・はじめから広告含めた
       画面デザインをする

     ・ユーザ操作を邪魔しない
実装するときに気をつけること
自分の端末だと大丈夫だよ?

   Googleユーザ


   アプリが固まります。機種はXXXです。
6.端末性能ごとに確認する

指針1
・代表的な端末でテストする
6.端末性能ごとに確認する

指針2
・よく売れている端末でテストする
 (アプリがターゲットとしている国)
6.端末性能ごとに確認する

指針3
・RAM容量が小さい端末でテストする
いろんな端末で見たよ?

   Googleユーザ


   アプリが固まります。機種はXXXです。
7.GPUごとに確認する

OpenGLやカメラを使う時
         GPU                 代表機種

 Adreno/Snapdragon   EVO 3D, Xperia arc


 PowerVR             Nexus S, GALAXY NEXUS

 Tegra               Nexus 7, XOOM
                     Galaxy S Ⅱ, Galaxy S Ⅲ,
 Mali
                     Nexus 4
この端末じゃきついよね…

   Googleユーザ


   画像を読み込むとアプリが落ちます。機種はXXXです。
8.画像読み込みおさらい




    OutOfMemory
8.画像読み込みおさらい

          ダウンサンプリング
   (BitmapFactory.Options#inSampleSize)
8.画像読み込みおさらい
             いろいろ難しいので
ダウンサンプリングは             どうやって
 実際どうやる?             キャッシュする?



   読み込みを                 ListView内で
 キャンセルしたら?                使うには?




 4.0以前に向けて
                     画面回転したら?
    どうする?
8.画像読み込みおさらい
                       見てください
Caching Bitmaps
http://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おさらい


        Activity




   BroadcastReceiver
9.In-App-Billing v2おさらい

                          速攻データを保存
        Activity        Serviceまたは
                        BroadcastReceiver



        Service



   BroadcastReceiver
9.In-App-Billing v2おさらい

                            Activityは
        Activity          主にUIを処理させる



        Service



   BroadcastReceiver
9.In-App-Billing v2おさらい

                       ダメなパターン
        Activity




   BroadcastReceiver
9.In-App-Billing v2おさらい

                       ダメなパターン
        Activity



      AsyncTask



   BroadcastReceiver
これから作るならv3
 In-App Billing v3の記事(EGG開発ブログ)
               http://p.tl/p0vI
リリースの際に気をつけること
とりあえず入れておけばいいでしょ

   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.多言語対応をする

世界のスマホ利用台数
 1. アメリカ:   2億2000万台
 2. 中国:     2億1000万台
 3. イギリス      4300万台
 4. 韓国:       3000万台
 5. 日本:       2900万台
 6. ドイツ:      2700万台
 7. フランス:     2300万台
 8. ロシア:      2300万台
 9. インド:      1900万台   Source:Flurry
12.多言語対応をする

言語設定に応じたリソース切り替え
● フォルダ名
 ○ 言語コード:「ISO 639-1」
 ○ 地域コード:「ISO 3166-1-alpha-2」
 例:「values-en」、「values-en-rGB」、「values-ja」


● 英語/日本語で対応する場合
 ○ values:英語(デフォルト)
 ○ values-ja:日本語



                                             Source:Flurry
12.多言語対応をする

   Googleおすすめ例(EFIGS+CJK)




                            Source:Flurry
公開後どうすれば?
更新はどうやれば?

   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. 署名済みの次期バージョンアプリを
        コンソールで上書きインストール
       adb install -r [パッケージ名]
 3. 動作確認
    a. 新機能/変更点
    b. プリファレンス
    c. データベース
    d. 課金周り
16.バージョンアップ確認をする

・UI Automator
   Android SDK Tools Rev21でサポート
   新しいUIテストフレームワーク


adakoda
http://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ユーザ


   ファイル保存出来ません。
20.新しいOSの動作差分をチェック




      Android 4.2まとめてみた
          http://p.tl/yVCY
後悔しないためのまとめ
コメントはアプリへの期待?

   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();

More Related Content

アプリリリース後に後悔しないための20のこと