前人未踏の領域へ アプリ開発編

Android, iOSアプリ開発に関する調査メモ置き場。ほとんどAndroid。はてなダイアリーから移行したため古い記事にはアプリ以外も含まれます。

AdMobメディエーションリワード動画広告調査メモ

  • onRewardedイベントでは リワード typeとamountのみ。IDやどのリワード動画サービスかは分からない
  • カスタムリワード動画以外はSDKが提供されているので基本設定で使う分には特殊な実装は不要
  • テスト時にはテスト端末登録が必要
  • テスト端末登録を行うとAdMobからのメディエーション動画広告の取得は常にエラーになる。
  • メディエーション広告のテストにはメディエーションテストスイートが必要
  • メディエーションではない)AdMob自体の動画広告を表示するためにはテスト用のユニット広告IDを使う。
  • テスト用のユニット広告IDはメディエーション動画とは紐付いていないためメディエーション動画広告は表示されない

参考

Firebase AnalyticsでBigQueryを使った場合の調査メモ

挙動に関して不明な箇所があったので実際にやってみたメモ

  • DebugViewはユーザープロパティの削除が反映されない(BigQueryには反映されている)
  • DebugViewはユーザープロパティの追加が反映されないことがある(BigQueryには反映されている)
    • 連続して2つセットしてもDebugViewには1つしか出ないなど
  • 比較的すぐにBigQueryに結果が反映される。
    • 但しプレビューテーブルへの反映は即時ではなさそう
  • user_properties, event_paramsの展開にはUNNESTを使う
  • BigQueryのクエリー価格は $5.00 per TB 毎月 1 TB まで無料
    • SQLを書くと使用容量が分かる
    • 1クエリーは30kb 〜 500kbくらい(対象データ量、取得カラム数により増減)
    • テスト環境なら惜しまずクエリー投げて問題ない
  • 一度セットしたユーザープロパティはアプリを終了しても送信される
    • なのでログイン者情報などはログイン時にセットすればOK
  • アプリをアンインストール後に再インストールするとセットしていたユーザープロパティは消える。

RecyclerView内のアイテムが表示されたタイミングを取得する

課題

RecyclerView内のあるViewTypeのアイテムが表示されたタイミングでImpressionイベントを計測したい。

対応

RecyclerView.Adapter.onViewAttachedToWindow() メソッドをオーバーライドする。

    override fun onViewAttachedToWindow(holder: RecyclerView.ViewHolder) {
        super.onViewAttachedToWindow(holder)

        if (holder.itemViewType == TYPE_HOGE) {
            if (BuildConfig.DEBUG) {
                Log.d(TAG, "onViewAttachedToWindow called")
            }
            sendGooleAnalyticsEvent()
        }
    }

注意点

AdapterのnotifyDataSetChanged()が呼ばれると画面表示中でもに見えても実際には再描画が発生してonViewAttachedToWindowが呼ばれてしまう。 notifyItemChangedを使い、かつRecyclerViewのitemAnimatorをnullにしておく必要がありそう。

感想

これまでは ViewTreeObserver.onPreDrawListener を使っていたけれど、ちゃんとremoveしてあげないと メモリーリークの心配があったりonBindViewが一度しか呼ばれないようなケース(再利用が発生しない) ではそもそもonPreDrawListenerがセットできないなど問題があったが、これでまるっと解決した気がする。