AndroidアプリでFirestoreを使う

AndroidアプリでFirebaseのデータベースを使う

Firebaseの準備

  1. Android Studioでアプリを作成する
    minimum api levelを21以上にする
  2. Firebaseプロジェクトを作成する
  3. Firestoreデータベースを作成する
  4. Firebaseプロジェクトにアプリを登録する

Firebase 構成ファイルを追加

  1. [Download google-services.json] をクリックしてFirebase Android 構成ファイルを取得する
  2. 取得した構成ファイル(google-services.json)をアプリのモジュール(アプリレベル[app])ディレクトリに移動する

Androidアプリで Firebase プロダクトを有効にする

プロジェクト レベルのGradle ファイル(build.gradle)の編集

buildscript {
    repositories {
    // 次の行が無ければ追加する
    google()  // Google's Maven repository
    }
    dependencies {
    // ...

    // dependencies次の内に行を追加
    classpath 'com.google.gms:google-services:4.3.3'  // Google Services plugin
    }
}

allprojects {
    // ...

    repositories {
    // 次の行が無ければ追加する
    google()  // Google's Maven repository
    // ...
    }
}
 

アプリレベルの Gradle ファイル(app/build.gradle)の編集

apply plugin: 'com.android.application'
// 次の行を追加
apply plugin: 'com.google.gms.google-services'  // Google Play services Gradle plugin
 
android {
    // ...
}

Cloud Firestore Android ライブラリを app/build.gradle ファイルに追加

以下のコードをdependencies に追加する

implementation 'com.google.firebase:firebase-firestore:21.4.0'
implementation 'com.google.firebase:firebase-auth:19.1.0'
implementation 'com.google.android.gms:play-services-auth:17.0.0'

バージョンの確認

Androidの最低バージョンを5以上に設定する(APIレベル21以上)

アプリレベルの Gradle ファイル(app/build.gradle)の編集

android {
    ....

    defaultConfig {
        ....

        minSdkVersion 21

       ....
    }
 

Android Firebase Google認証の追加

Android Firebase Google認証を追加する

データベース ルールの作成(例)

Google認証されている場合、読込許可。ドキュメントの所有者、書込み許可

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read : if request.auth != null;
      allow write: if request.auth.uid == userId;
    }
  }
}

Firestoreのテスト

Firestoreを初期化する

FirebaseFirestore db = FirebaseFirestore.getInstance();

データの追加

        Map<String, Object> accessData = new HashMap<>();
        accessData.put("AccessDate", new Timestamp(new Date()));
        accessData.put("Name", "Tom");
        accessData.put("IdNumber", 10253);

        db.collection("users")
                .add(accessData)
                .addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
                    @Override
                    public void onSuccess(DocumentReference documentReference) {
                        Log.d("myFirestore", "added ID=" + documentReference.getId());
                    }
                })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Log.w("myFirestore", "Error adding document", e);
                    }
                });

簡単に

        Map<String, Object> accessData = new HashMap<>();
        accessData.put("AccessDate", new Timestamp(new Date()));
        accessData.put("Name", "Tom");
        accessData.put("IdNumber", 10253);
        db.collection("users").add(accessData);
 

データの取得

DocumentReference docRef = db.collection("Search").document("JSON");
docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
    @Override
    public void onComplete(@NonNull Task<DocumentSnapshot> task) {
        if (task.isSuccessful()) {
            DocumentSnapshot document = task.getResult();
            if (document.exists()) {
                Log.d("myFirestore", "DocumentSnapshot data: " + document.getData());
            } else {
                Log.d("myFirestore", "No such document");
            }
        } else {
            Log.d("myFirestore", "get failed with ", task.getException());
        }
    }
});
 
DocumentReference docRef = db.collection("Search").document("Name");
docRef.get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
    @Override
    public void onSuccess(DocumentSnapshot documentSnapshot) {
        String json=documentSnapshot.getString("Data");
    }
});
 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください