FirebaseのデータにアクセスするAndroidアプリを作成した結果を備忘録として投稿します。
Firebaseとは
Firebaseは、Googleが提供しているBasSサービスです。リアルタイム通知可能、かつアクセス制御可能なオブジェクトデータベース機能に加え、認証機能も持っています。
ブラウザ(Web), モバイルアプリ(iOS, Android)からFirebaseのデータにアクセスすることができます。
Firebaseの使い方は以下のサイトを参考にしてください。
Androidアプリ
Android Quickstart - Firebaseを参考にして、FirebaseにアクセスするAndroidアプリをAndroid Studioを使って作成しました。
手順
- Firebaseアプリを作成します
- Android Studioで新規プロジェクトを作成します
- Firebase clientライブラリをインストールします
- Android permissionを追加します
- Firebaseへのアクセス処理を追加します
Firebaseアプリ作成
リアルタイム・バックエンドサービス「Firebase」を使ったWebアプリ作成 | infoScoop開発者ブログを参考に、Firebaseアプリを作成してください。
Androidアプリ用新規プロジェクト作成
File-New-New Projectから新規プロジェクトを作成します。Activityを作れるならばどのタイプのテンプレートでもOKです。
Firebase clientライブラリのインストール
Android Atudioでプロジェクトに組み込まれているbuild.grandleを編集します。
dependencies {
...
compile 'com.firebase:firebase-client-android:2.0.3+'
}
ビルドエラーになるので以下の記述も追加します。
android {
packagingOptions {
exclude 'META-INF/LICENSE'
exclude 'META-INF/LICENSE-FIREBASE.txt'
exclude 'META-INF/NOTICE'
}
...
}
Android permissionを追加
AndroidManifest.xmlにインターネット接続用パーミッションを追加します。
<uses-permission android:name="android.permission.INTERNET" />
Firebaseへのアクセス処理を追加します
Activity.onCreateにFirebaseアクセス処理を追加します。
private Firebase mFirebaseRef;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// クライアントライブラリにコンテキスト(Activity)をセットします。
Firebase.setAndroidContext(this);
// Firebaseアプリへの参照を取得します
mFirebaseRef = new Firebase(FirebaseアプリのURI);
// 操作対象の参照を取得します
Firebase child = mFirebaseRef.child(データパス);
}
データ取得
操作対象に対してaddValueEventListenerを追加します。追加した時点でonDataChangeが呼び出されます。2回目以降は、対象データが変更されると呼び出されます。
child.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
// snaphost.getValue()でデータを参照する。
}
@Override
public void onCancelled(FirebaseError error) {
}
});
getValueしたデータは、HashMap形式になっています。
データセット
setValueでデータを追加します。値がnullの場合には項目が削除されます。Listerner登録しておくとセットした結果が通知されます。
Map<String, String> data = new HashMap<String, String>();
data.put("content", "Hello");
child.setValue(data, new CompletionListener() {
public void onComplete(FirebaseError error, Firebase ref) {
};
});
ユーザ認証
Firebaseのデータはデフォルトで誰でも読み書き可能になっています。Ruleを追加することによってアクセス制御することができます。アクセス権がないデータにアクセスするとFirebaseError(Permission error)になります。アクセス制御は以下のページを参照してください。
アプリ実行
Androidアプリはemulator上からもFirebaseにアクセスできます。