JapanAbemaTVでiOSエンジニアをしている@funzinです。5名のエンジニアが登壇しました。2019で井原さん(@nonchalant0303)が発表された「動画アプリの投げ銭機能における消耗型課金の仕組みと実装」についてレポートしていきます。さんは、AbemaTVに消耗型課金を導入したことについて登壇されました。Twitterでは技術のことはあまりつぶやかず、趣味のツイートが多いそうです。サブスクリプション非更新サブスクリプション非消耗型の例としては、広告の非表示、消耗型の例として、ソシャゲの魔法石などがあげられます。AbemaTVでは、自動更新サブスクリプションと消耗型課金の2種類のApp内課金を使用しており、今回のセッションでは消耗型課金についての説明がメインでした。消耗型課金の実装時に注意しなければいけない点として、消耗型では何回でもコンテンツを購入できるため、購入するたびに購入履歴が上書きされてしまいます。Storeによる購入は完了しているものの、コンテンツが配布されないといった不整合が発生する場合があります。不整合が発生するケースとしては、以下の2つが考えられます。サーバー側からレシート(購入情報)を送るときに失敗するコンテンツを付与したサーバーからのレスポンスが受け取れない不整合の対策そのため、未完了のトランザクション(購入取引)が存在する場合は、リトライする機能を追加することで対応しました。リトライ処理のタイミングとしては以下の3つを組み入れています。アプリ起動時バックフォア時コイン残高表示時これらの対策によって、万が一未完了のトランザクション存在していても、リトライ処理が実行されるため消耗型課金が正しく処理されます。Storeで購入が完了したが、コンテンツが配信されない)を見た目で判断することが難しく、検証項目を作成しにくい問題がありました。そこでMindMeisterを使用することで認識を合わせ、デバッグモードで失敗するケースを用意することで対応をしました。まとめこれらの発表からユーザー側が消耗型コンテンツを購入したときに失敗する可能性があるためリトライ機能を実装することの重要性がわかりました。消耗型課金を実装しようとしている方はぜひ参考にしてみてください。AbemaTViOSiOSエンジニアfunzin2019年新卒入社。AbemaTVでiOSアプリ開発に携わっています。