Help us understand the problem. What is going on with this article?

RxFirebaseでRxJava + Firebaseを手軽に始める

はじめに

RxJavaを簡単な例(OkHttpとか)で触っているうちは、OkHttpやその補助ライブラリで容易にRx化できるかと思います。
ただし、いざ、自分で他のライブラリと組み合わせて書いていこうとすると、辛い部分が多く存在します。

特に、Firebaseと組み合わせようとすると、RxJavaに慣れていないうちは

  • どう書けばいいかがわからないこと
  • 記事が圧倒的に少ない

ためにつらい思いをすると思います。

(たとえばこちらの記事にのっています)

そこで

RxFirebaseというライブラリを使うことで
簡単にRxJava+Firebaseを始めることができます。

実際に使ってみる

ここからは実際のプロジェクトでの使用方法を説明していきます。
また、Firebaseなどの呼び出しはモジュールとして切り出している例を紹介します。

インストール方法

RxFirebaseのREADMEに書いている通りに導入していきます。

build.gradle
dependencies {
  compile 'com.github.FrangSierra:RxFirebase:1.5.6'
}
build.gradle
allprojects {
    repositories {
        ...
        maven { url "https://jitpack.io" }
    }
}

FirebaseAuthの場合

今回は単純なemailでの認証を考えます。

FirebaseAuthService.kt
object FirebaseAuthService: AuthService {
    val auth: FirebaseAuth
    init {
        auth = FirebaseAuth.getInstance()
    }
    override fun signIn(email: String, password: String): Maybe<AuthResult?> {
        return RxFirebaseAuth.signInWithEmailAndPassword(auth, email, password)
    }
}

例えば、emailでのシンプルな認証の場合、RxFirebaseが用意しているメソッドsignInWithEmailAndPassword
Firebaseのインスタンスを噛ませるだけでできます。

これをもし、自分でやる場合は、自分でSingleやObservableを作ったりと、なれていないとわかりづらいところが多々あります。

あとは、Observerを加えるだけですが、MainActivityで呼び出したりするとき

MainActivity.kt
FirebaseAuthService.signIn(email, password)
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
        .subscribe(object : MaybeObserver<AuthResult?> {
            override fun onSuccess(t: AuthResult) {
               // うまくいったときー
            }
            override fun onComplete() {
              // 完了したときー
            }
            override fun onSubscribe(d: Disposable) {
              // こうどくしはじめたときー
            }
            override fun onError(e: Throwable) {
              // エラーがでちゃったとき
            }
        })

というふうに呼び出してやるだけで簡単に使えます。

最後に

最近のAndroid開発ではRxJavaがよく出てきますがとっつきづらい部分が多々あると思います。
今回のように、RxFirebaseを用いることで、初心者にとって実装が難しい部分をライブラリに任せるながら
FirebaseとRxJavaを利用することができるため、「ちょっとRxJavaをさわってみようかな」といった方には
ベターな選択肢だと思います。

また、今回のようにサービス層側の実装をきれいに書いてあげることで、
RxJavaに慣れてからRxFirebaseに依存しないものに置き換えることも簡単であり、
RxFirebaseを利用するもの、しないものの共存もできるので、非常に便利です。

それでは、RxFirebaseでよきRxJava Lifeを!!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away