LoginSignup
28
27

More than 5 years have passed since last update.

RxAndroidを使ってInapp Billing v3 を試す

Last updated at Posted at 2014-10-26

最近完全にAndroidアプリをメンテするおじさんと化している駄猫です、こんにちは

今回はRxAndroid便利ですね、というお話

なお件のものに関してはとりあえず動いているものがこっちに

あ、subscriptionはほんとにお金かかるはずなので、試さないように

なぜ突然RxAndroid使おうと思ったか

なぜ課金周りか

  • 非同期で動かす前提
  • 購入結果は onActivityResult にCallbackされる

てな感じで練習用に良かった

良かった点

非同期処理が楽

  • とりあえず処理書く
  • Observableで包む
  • subscribeOnで実行スレッド決める

すっごい適当に書くとこんな感じ

Observable.create(...)
    .subscribeOn(Schedulers.newThread())
    .subscribe(s -> log.debug(s));

非同期処理が複数でも楽

mergeしたりflatMapしたりできて楽

final Observable<A> o1 = Observable.create(...);
final Observable<B> o2 = Observable.create(...);

o1.flatMap(o1Result -> o2)
    .subscribeOn(Schedulers.newThread())
    .subscribe(s -> log.debug(s));

こんなんで、o1の処理成功したらo2の処理やってくれて楽

UIThreadで動かさなければならない時も楽

observeOn で以降の動作Threadを切り替えられるので本家のサンプルのように書くだけ

よくわからない点

callbackの消し方

消し方っていうと語弊がありそうですけど…

Inapp Billingの場合、購入時にonActivityResultで結果が返ってくるのがネックなイメージ

(まあ言い出したらそれ以外にもなんでこんな仕様なの…的なものは…)

わかりやすいのは

Result result = Iab.buy(item);
// result 見れば答えがわかる!

だと思うんですよね

こういう感じにするために、今回はonActivityResult呼び出し時にPublishSubject#onNextを使いました

実際の購入処理のところでは

という書き方が可能になります

なのでメソッド呼び出し側から見れば、「購入メソッドを叩いたら購入結果が得られた」みたいな感じになって主に自分が嬉しいですね

という結果になりました

ただまあ…他にも(もっと楽で簡潔な)方法があるんじゃないかなぁ…とも思っています

詳しい人教えてください

個人的な感想

28
27
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
28
27