#そもそもFirebaseってなんですか?
- BaaS(Backend as a Service)と呼ばれる、クライアントの開発だけに集中できるサービスの一つ
- データベースの更新通知機能が強力で変更するとリアルタイムと言っていいほどの感覚でクライアントに通知される
- クライアントからの変更もリアルタイム
- 最近のアップデートで通信回線がない場合でも使えるようになった
- facebook,twitter等のソーシャルログイン機能もあって非常に便利です。
今回はカスタム認証(Custom Authentication)にまつわる話をします
- カスタム認証とは自前サービスのアカウントを使ってFirebaseを操作できるようにする仕組みです。
- すでに用意されているソーシャルログインは1サイト1アカウントになっているので、facebookとtwitterを同じアカウントとして扱うといったことができません
- ユーザーから見るとtwitterやfacebook等で別々に扱われるのは違和感を感じるので、こんなときはカスタム認証の出番です
実際に実装してみた
- https://github.com/codefreak2015/firebase-login-demo-android
- 実装してて使っているApache Commons Codecがあたらしすぎて動かない(http://stackoverflow.com/questions/2047706/apache-commons-codec-with-android-could-not-find-method )との事だったので、Base64エンコードの部分を自前実装して回避してます。
こんな感じですね。
MainActivity.java
Map<String, Object> payload = new HashMap<String, Object>();
payload.put("uid", "custom:1");
payload.put("some", "arbitrary");
payload.put("data", "here");
TokenGenerator tokenGenerator = new TokenGenerator(firebaseSecret);
String token = tokenGenerator.createToken(payload);
mFirebaseRef.authWithCustomToken(token, new AuthResultHandler("custom"));
}
#まとめ
- BaaSは便利なようで、いろいろ制限があるため使えなかった
- Firebaseは最近になってオフライン機能がついたので良さそうです
- アカウント管理はカスタム認証を使えば解決できるでしょう。