全画面広告のOOM対策
自メモ)
最近は普通に入れてるAdのインプレッションだけでは喰っていけないって話で
やたらと全画面広告を導入する流れ。とくにAndroidは凄く顕著
GAに関しても、IOSに関しては実はあんまり入れること強制されてない。
なぜならそれなりに放置してても収益出てるから。*1
試しに昨日の考察通り、カウントダウン前に activityStopで GAを止めて=>プレイ終了後 activityStartで再起動 してみたら若干軽くなった気がする。時間的にはほんの僅かな感じだけど。やはりIO(NWアクセスとスレッド数含む)をどれだけ減らせるか次第なのかも
だけどAndに関してはかなりがっちり入れてる。
理由的には、
どうやってクリックに誘導するか的な分析情報がほしいから
昨日上の人が、スマホ開発で食っていけるかの基準点は1万ダウンロードのアプリを一週間に一本作れるかどうか、トントン(独立してやる)までなら10万ダウンロードまでいかないとインプレッションで食うとかは難しいと言うお話されてた。それが出来てる人はGoogleplayで16人に1人だとか
9patch素材の適応とか既存改修で1?2週間かけてる時点で(業務外でも調べ物してる時点で)この手の話は先が遠いかも。下手に綺麗に書こうとして身構えてしまったり、ちょっと前のコードの挙動分からなくてコメントつけるところからはじめてたりとか(早描きコードはグローバル変数やフラグ満載
- 試したことがあるもの
広告名 | 導入 | 安定性 | 特記 | 資料URL |
---|---|---|---|---|
GameFeat | ◎ | △ | InstallResiverを受信してなんぼなので凄く儲からない*3 | Android Q&A - GAMEFEAT マニュアル |
Adfurikun | ◎ | △ | 出す広告枠の指定の仕方がわかりづらい | ログイン必須 |
AppliPromotion | ◎ | △ | そこそこ。でも結局Wall形式のほうを多用してたりとか(苦笑 | https://www.applipromotion.com/sdk/android |
metaps | ◎ | ? | 今のところこれが収益的には一番っぽい | ログイン必須 |
appC | ? | ? | 単価的に微妙って話で上の人の判断から外れたみたい | ログイン必須? |
GameFeat や ADSTAとか一部の処以外は
基本ユーザ登録しないとドキュメントも見れない状況。
出来ること見られて真似されたりするのがイヤなんだろうな。。。
metapsはパッケージ名と一致しないと広告が出ない*4?
したがってsampleですら表示が出来ない気がするんだかうーん?*5
- △ OOMがでやすい*6
原因的には ARGB8888の画面サイズ8割程度の画像をフルに出したActivityを呼ぶからで
ここらへんはGalaxy S3/Galaxy S4 ででかいサイズのbmpを自前で作っただけでもOOMに苦しめられてる経験があるので
どうにかしないとな‥‥‥という感じ。
アプリで節約するために、画像を9patchにするというのもかなり限界がある
疲れた。クラッシュレポート対応でインタースティシャル広告(全画面広告)出すActivtyでOOMが出るよが沢山来てて対応悩んでる。メインのアプリのメモリ使用量減らすしか対応方法分からない<9patch対応はデザさんのかなり工数使った的な話でryな話だったので、自分で作れないと
@alterakey さんに教えていただいたService化で本体から切り離すOOM対策の方法で全画面Adを切り離してみるのが一番なのかな?(収益化的には技術力今一なところほど営業が強い=>導入するか?的な流れになるので、開発者的に使いやすいのが採用されないのが現実なのが痛い
2014-01-23 20:16:54 via hamoooooon to @alterakey
ユーザさん的にはアプリが落ちないで広告が死ぬだけのほうがいいわけだから
色々と試してみる*7
方針的には以下のように考える)
IntentService だとUIを表示する系は駄目>
UIが絡まないなら処理投げっぱなしで勝手に終了する系のIntentServiceのほうが楽だが。。。
従って通常のServiceで実行する形になる。
Activityを引数としてわたす InterstitialAd が実は多い
Serviceが取得できるのはgetApplication まで
従ってカスタムApplicationクラスを拡張してCurrentActityの参照を保持するように拡張する必要がある
Metaps>
metaps 結構酷いな。。。(汗管理鯖登録済みの package名じゃないと キー(別アプリで動かしてるのを仮でいれる)がたとえあっててもエラーで落とす仕様って。。。(ちなみに収益的にAndは後回しなので会社的放置P) Sampleと同じpackage名にすると動くとは。。
とりあえず他のプロジェクトにキー入れて表示テストしておいて、リリース直前に正式キーもらえる ってルーチンは結構ザラなのでこういうので悩まされると凄く困る><。まあ上の人が申請して渡してくれれば問題無い話では有るんだけどね。。。(汗
AppliPromotion>
initして直ぐshowするintentを発行できるイメージですが
特に終了時に表示するような奴の場合はカスタムApplicationにActivityCallback実装して終了時にstopSelf();
呼ぶイメージになる
Callbackが実装できるIntersAd>
- このタイプは onCreateで並行初期化しておくタイプが多い
- ただログ見てるとrotateAd等のスレッドがぐるぐる回ってるのが低端末だと負荷的にきつそう*8
- 使う所でshowAd等で表示
の形式。
onDissmiss等のタイミングで
stopSelf();
activity.finish()
呼んでやるイメージかなと
9-patchで苦しんだ系メモ)
android うわーん。もうやだ。9patchの画像をちょびちょび入れ替える度にレイアウト修正し直しなんだけど><。今日だけで5回入れ替えorz 今日リリースする気有るんか??
android 9patch指定されてると(指定されてる画像のせいかもしれないけど)、指定されてないコンポネントとのlayout_weightの自動調節が効かなかったり 一定サイズ以下に縮めると9patch画像の固定領域が潰れるのでそのサイズ以下には出来なかったりとか・・
<LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content" > <TextView android:id="@+id/up_sp" android:layout_width="match_parent" android:layout_height="0dp" android:gravity="center" android:layout_weight="1" /> <Button android:id="@+id/btn_test1" android:background="@drawable/test1" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:text="test1" android:textColor="@color/white" android:textSize="20dp" /> <Button android:id="@+id/btn_test2" android:background="@drawable/test2" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:text="test2" android:textColor="@color/white" android:textSize="20dp" /> <Button android:id="@+id/btn_test3" android:background="@drawable/test3" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:text="test3" android:textColor="@color/white" android:textSize="20dp" /> <TextView android:id="@+id/down_sp" android:layout_width="match_parent" android:layout_height="0dp" android:gravity="center" android:layout_weight="1" /> </LinearLayout>
これは均等にならない。。。up_sp/down_sp が存在しない的な認識に鳴る
- OK
<LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content" > <TextView android:id="@+id/up_sp" android:layout_width="match_parent" android:layout_height="30dp" android:gravity="center" android:layout_weight="1" /> <Button android:id="@+id/btn_test1" android:background="@drawable/test1" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:text="test1" android:textColor="@color/white" android:textSize="20dp" /> <Button android:id="@+id/btn_test2" android:background="@drawable/test2" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:text="test2" android:textColor="@color/white" android:textSize="20dp" /> <Button android:id="@+id/btn_test3" android:background="@drawable/test3" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:text="test3" android:textColor="@color/white" android:textSize="20dp" /> <TextView android:id="@+id/down_sp" android:layout_width="match_parent" android:layout_height="30dp" android:gravity="center" android:layout_weight="1" /> </LinearLayout>
android:layout_heightをup_sp/down_sp に指定すれば隙間が開けられる
なかんじ。普通はサイズ均等になるはずなんだけどな。。。*9
一応上記の
@drawable/test1〜test3 は勿論 9patch
あと 9patch pluginで表示すると[9patchではありません]
と表示が出てうまく認識しないものがあるので、convertをおした後に save-asで保存しなおしてる
認識できるものと出来ないものとの差分がいまいちわからない
ファイル名 XXXX.9.png とする以外に別の要素があるのだろうか?
android 角丸とか端を靴先みたいにニュッてしないとそんな見た目カッコ悪いんかな。。。小さい領域の画像として使いたい場合は9patchの元画像自体縮小すればいいん?
@kimukou2628 角丸くらいだったら drawable で shape 作っちゃう派です。
2014-01-23 14:39:38 via TweetDeck to @kimukou2628
@slumbers99 やっぱりそうですよね(汗。今回デザイナーさんに無理して作ってもらって かえってトラブってる感じなので正直きついです(N7とかの大きい端末だと綺麗に表示されてるのですが‥‥‥
2014-01-23 15:12:20 via YoruFukurou to @slumbers99