Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Recommend Widgetを作った話

Recommend Widgetを作った話

potatotips #61 (iOS/Android開発Tips共有会)のLT資料です。

mahiguch

May 15, 2019
Tweet

More Decks by mahiguch

Other Decks in Programming

Transcript

  1. Masahiro Higuchi / 樋口雅拓 • グリーグループのリミア株式会社で、LIMIA という住まい領域のメディアを 作っています。ゲーム会社ですが、最近はメディアに力を入れています。 • 機械学習のエンジニアですが、iOS,

    Android,JSなどもやっている何でも屋 です。4歳の娘のパパ。twitter: @mahiguch1 • https://limia.jp/ • https://arine.jp/ • https://aumo.jp/ • https://www.mine-3m.com/mine/
  2. RecommendWidget実装1 想像通り、サーバから取得しているコンテンツを表示している。 serverIdeaClient.callGetIdeaRecommendation(object : RequestListener<List<IdeaCompactDto>> { override fun onSuccess(data: List<IdeaCompactDto>?)

    { iIdeaDetailView?.showRecommendationIdeas(data?.let { convertFromDtoList(data, ContentViewModel.ListType.RECOMMENDATION) }) } } override fun showRecommendationIdeas(list: List<IContentView>?) { ideaDetailRecyclerAdapter?.addItems(IdeaDetailRecyclerAdapter.LayoutType.IDEA_RECOMMENDATION, list) } fun addItems(type: LayoutType, list: List<IContentView>?) { contentLst.addAll(list) }
  3. RecommendWidget実装2 指定枠(3, 6, 9枠目)には、コンテンツとは別に広告を広告システムか ら取得して表示している。 private fun loadAdvertisement(order: SspViewModel, h:

    RecyclerView.ViewHolder, position: Int) { adsViewManager.houseAdManager.callAdvertisement(object : LimiaHouseAdViewManager.RequestListener{ override fun onSuccess(houseAdDto: HouseAdDto) { model.houseAdDto = houseAdDto holder.intoView(context, model, object: HouseAdClickListener { 広告取得部分の詳細については、potatotips#60のLT資料で解説しています https://speakerdeck.com/mahiguch/firestorewoshi-tutechun-guang-gao-pei-xin-ji-neng-wozuo-tutahua
  4. CTRとは? CTR(Click Through Rate) = タップ数 / 表示回数 【表示回数の定義】 ・広告が視聴可能なスクリーンに表示されていること

    ・広告の一定面積以上が見える状態にあること ・広告が一定の時間以上見える状態であること ・広告が人間によって視聴されていること つまり、一覧表示のChild/Cellが画面上に表示したうち、タップされた割合。 タップ数は簡単に取れるが、スクリーンに表示された回数はどう取れば良いのか?
  5. スクリーンに表示されたログ送信(Android)1 AndroidではRecyclerView.layoutManagerのpositionを取得する ことで実現した。 (obtainRecyclerView()?.layoutManager as? LinearLayoutManager)?.let { val first =

    it.findFirstVisibleItemPosition() val last = it.findLastVisibleItemPosition() if (first >= 0 && last >= 0) { for (position in first..last) { ログ送信 https://developer.android.com/reference/android/support/v7/widget/LinearLayoutManager.html#findFirstVisibleItemPositio n()