অফলাইনে ডেটা অ্যাক্সেস করুন

ক্লাউড ফায়ারস্টোর অফলাইন ডেটা দৃist়তা সমর্থন করে। এই বৈশিষ্ট্যটি ক্লাউড ফায়ারস্টোর ডেটার একটি অনুলিপি ক্যাশে করে যা আপনার অ্যাপ সক্রিয়ভাবে ব্যবহার করছে, যাতে ডিভাইসটি অফলাইনে থাকলে আপনার অ্যাপ ডেটা অ্যাক্সেস করতে পারে। আপনি ক্যাশেড ডেটা লিখতে, পড়তে, শুনতে এবং জিজ্ঞাসা করতে পারেন। যখন ডিভাইসটি অনলাইনে ফিরে আসে, ক্লাউড ফায়ারস্টোর ক্লাউড ফায়ারস্টোর ব্যাকএন্ডে আপনার অ্যাপ দ্বারা করা যেকোনো স্থানীয় পরিবর্তনকে সিঙ্ক্রোনাইজ করে।

অফলাইন দৃist়তা ব্যবহার করার জন্য, ক্লাউড ফায়ারস্টোর ডেটা অ্যাক্সেস করার জন্য আপনি যে কোডটি ব্যবহার করেন তাতে আপনার কোনও পরিবর্তন করার দরকার নেই। অফলাইন অধ্যবসায়ের সাথে সক্ষম, ক্লাউড ফায়ারস্টোর ক্লায়েন্ট লাইব্রেরি স্বয়ংক্রিয়ভাবে অনলাইন এবং অফলাইন ডেটা অ্যাক্সেস পরিচালনা করে এবং ডিভাইসটি অনলাইনে ফিরে এলে স্থানীয় ডেটা সিঙ্ক্রোনাইজ করে।

অফলাইন দৃist়তা কনফিগার করুন

যখন আপনি ক্লাউড ফায়ারস্টোর আরম্ভ করেন, আপনি অফলাইন অধ্যবসান সক্ষম বা অক্ষম করতে পারেন:

  • অ্যান্ড্রয়েড এবং আইওএসের জন্য, অফলাইন দৃist়তা ডিফল্টরূপে সক্ষম করা হয়। নিষ্ক্রিয় অধ্যবসায় করতে, সেট PersistenceEnabled করার অপশন false
  • ওয়েবের জন্য, অফলাইন দৃist়তা ডিফল্টরূপে নিষ্ক্রিয় করা হয়। অধ্যবসায় সক্রিয় করার জন্য, কল enablePersistence পদ্ধতি। ক্লাউড ফায়ারস্টোরের ক্যাশে সেশনের মধ্যে স্বয়ংক্রিয়ভাবে সাফ করা হয় না। ফলস্বরূপ, যদি আপনার ওয়েব অ্যাপটি সংবেদনশীল তথ্য পরিচালনা করে, তবে ব্যবহারকারীকে জিজ্ঞাসা করতে ভুলবেন না যে তারা দৃab়তা সক্ষম করার আগে একটি বিশ্বস্ত ডিভাইসে আছে কিনা।

ওয়েব সংস্করণ 9

import { enableIndexedDbPersistence } from "firebase/firestore"; 

enableIndexedDbPersistence(db)
  .catch((err) => {
      if (err.code == 'failed-precondition') {
          // Multiple tabs open, persistence can only be enabled
          // in one tab at a a time.
          // ...
      } else if (err.code == 'unimplemented') {
          // The current browser does not support all of the
          // features required to enable persistence
          // ...
      }
  });
// Subsequent queries will use persistence, if it was enabled successfully

ওয়েব সংস্করণ 8

firebase.firestore().enablePersistence()
  .catch((err) => {
      if (err.code == 'failed-precondition') {
          // Multiple tabs open, persistence can only be enabled
          // in one tab at a a time.
          // ...
      } else if (err.code == 'unimplemented') {
          // The current browser does not support all of the
          // features required to enable persistence
          // ...
      }
  });
// Subsequent queries will use persistence, if it was enabled successfully
সুইফট
let settings = FirestoreSettings()
settings.isPersistenceEnabled = true

// Any additional options
// ...

// Enable offline data persistence
let db = Firestore.firestore()
db.settings = settings
উদ্দেশ্য গ
FIRFirestoreSettings *settings = [[FIRFirestoreSettings alloc] init];
settings.persistenceEnabled = YES;

// Any additional options
// ...

// Enable offline data persistence
FIRFirestore *db = [FIRFirestore firestore];
db.settings = settings;

জাভা

FirebaseFirestoreSettings settings = new FirebaseFirestoreSettings.Builder()
        .setPersistenceEnabled(true)
        .build();
db.setFirestoreSettings(settings);

কোটলিন+কেটিএক্স

val settings = firestoreSettings {
    isPersistenceEnabled = true
}
db.firestoreSettings = settings

ক্যাশের আকার কনফিগার করুন

যখন দৃist়তা সক্ষম হয়, ক্লাউড ফায়ারস্টোর ব্যাকএন্ড থেকে প্রাপ্ত প্রতিটি নথিকে অফলাইন অ্যাক্সেসের জন্য ক্যাশে করে। ক্লাউড ফায়ারস্টোর ক্যাশের আকারের জন্য একটি ডিফল্ট থ্রেশহোল্ড সেট করে। ডিফল্ট অতিক্রম করার পরে, ক্লাউড ফায়ারস্টোর সময় সময় পুরনো, অব্যবহৃত নথি পরিষ্কার করার চেষ্টা করে। আপনি একটি ভিন্ন ক্যাশে আকারের থ্রেশহোল্ড কনফিগার করতে পারেন বা পরিষ্কার-পরিচ্ছন্নতার প্রক্রিয়াটি সম্পূর্ণরূপে অক্ষম করতে পারেন:

ওয়েব সংস্করণ 9

import { initializeFirestore, CACHE_SIZE_UNLIMITED } from "firebase/firestore";

const firestoreDb = initializeFirestore(app, {
  cacheSizeBytes: CACHE_SIZE_UNLIMITED
});

ওয়েব সংস্করণ 8

firebase.firestore().settings({
    cacheSizeBytes: firebase.firestore.CACHE_SIZE_UNLIMITED
});
সুইফট
// The default cache size threshold is 100 MB. Configure "cacheSizeBytes"
// for a different threshold (minimum 1 MB) or set to "FirestoreCacheSizeUnlimited"
// to disable clean-up.
let settings = Firestore.firestore().settings
settings.cacheSizeBytes = FirestoreCacheSizeUnlimited
Firestore.firestore().settings = settings
উদ্দেশ্য গ
// The default cache size threshold is 100 MB. Configure "cacheSizeBytes"
// for a different threshold (minimum 1 MB) or set to "kFIRFirestoreCacheSizeUnlimited"
// to disable clean-up.
FIRFirestoreSettings *settings = [FIRFirestore firestore].settings;
settings.cacheSizeBytes = kFIRFirestoreCacheSizeUnlimited;
[FIRFirestore firestore].settings = settings;
  

জাভা


// The default cache size threshold is 100 MB. Configure "setCacheSizeBytes"
// for a different threshold (minimum 1 MB) or set to "CACHE_SIZE_UNLIMITED"
// to disable clean-up.
FirebaseFirestoreSettings settings = new FirebaseFirestoreSettings.Builder()
        .setCacheSizeBytes(FirebaseFirestoreSettings.CACHE_SIZE_UNLIMITED)
        .build();
db.setFirestoreSettings(settings);

কোটলিন+কেটিএক্স


// The default cache size threshold is 100 MB. Configure "setCacheSizeBytes"
// for a different threshold (minimum 1 MB) or set to "CACHE_SIZE_UNLIMITED"
// to disable clean-up.
val settings = FirebaseFirestoreSettings.Builder()
        .setCacheSizeBytes(FirebaseFirestoreSettings.CACHE_SIZE_UNLIMITED)
        .build()
db.firestoreSettings = settings

অফলাইন ডেটা শুনুন

ডিভাইসটি অফলাইনে থাকা সত্ত্বেও, যদি আপনি অফলাইনে অধ্যবসায় সক্ষম করে থাকেন, আপনার শ্রোতারা স্থানীয়ভাবে ক্যাশে করা ডেটা পরিবর্তনের সময় শোনার ঘটনা পাবেন। আপনি নথি, সংগ্রহ এবং প্রশ্ন শুনতে পারেন।

আপনি সার্ভার বা ক্যাশে থেকে ডেটা পাচ্ছেন কিনা পরীক্ষা করার জন্য ব্যবহার fromCache উপর সম্পত্তি SnapshotMetadata আপনার স্ন্যাপশট ইভেন্টে। তাহলে fromCache হয় true , ডাটা ক্যাশে থেকে এসে মামুলি বা অসম্পূর্ণ হতে পারে। তাহলে fromCache হয় false , ডাটা সম্পূর্ণ এবং সার্ভার উপর সর্বশেষ আপডেট সঙ্গে বর্তমান নেই।

ডিফল্টরূপে, শুধুমাত্র যদি কোন ঘটনা উত্থাপিত হয় SnapshotMetadata পরিবর্তন করেছেন। তোমার উপর নির্ভর করি তাহলে fromCache মূল্যবোধ, উল্লেখ includeMetadataChanges যখন আপনি আপনার শুনতে হ্যান্ডলার জোড়া বিকল্প শুনুন।

ওয়েব সংস্করণ 9

import { collection, onSnapshot, where, query } from "firebase/firestore"; 

const q = query(collection(db, "cities"), where("state", "==", "CA"));
onSnapshot(q, { includeMetadataChanges: true }, (snapshot) => {
    snapshot.docChanges().forEach((change) => {
        if (change.type === "added") {
            console.log("New city: ", change.doc.data());
        }

        const source = snapshot.metadata.fromCache ? "local cache" : "server";
        console.log("Data came from " + source);
    });
});

ওয়েব সংস্করণ 8

db.collection("cities").where("state", "==", "CA")
  .onSnapshot({ includeMetadataChanges: true }, (snapshot) => {
      snapshot.docChanges().forEach((change) => {
          if (change.type === "added") {
              console.log("New city: ", change.doc.data());
          }

          var source = snapshot.metadata.fromCache ? "local cache" : "server";
          console.log("Data came from " + source);
      });
  });
সুইফট
// Listen to metadata updates to receive a server snapshot even if
// the data is the same as the cached data.
db.collection("cities").whereField("state", isEqualTo: "CA")
    .addSnapshotListener(includeMetadataChanges: true) { querySnapshot, error in
        guard let snapshot = querySnapshot else {
            print("Error retreiving snapshot: \(error!)")
            return
        }

        for diff in snapshot.documentChanges {
            if diff.type == .added {
                print("New city: \(diff.document.data())")
            }
        }

        let source = snapshot.metadata.isFromCache ? "local cache" : "server"
        print("Metadata: Data fetched from \(source)")
}
উদ্দেশ্য গ
// Listen to metadata updates to receive a server snapshot even if
// the data is the same as the cached data.
[[[db collectionWithPath:@"cities"] queryWhereField:@"state" isEqualTo:@"CA"]
    addSnapshotListenerWithIncludeMetadataChanges:YES
    listener:^(FIRQuerySnapshot *snapshot, NSError *error) {
      if (snapshot == nil) {
        NSLog(@"Error retreiving snapshot: %@", error);
        return;
      }
      for (FIRDocumentChange *diff in snapshot.documentChanges) {
        if (diff.type == FIRDocumentChangeTypeAdded) {
          NSLog(@"New city: %@", diff.document.data);
        }
      }

      NSString *source = snapshot.metadata.isFromCache ? @"local cache" : @"server";
      NSLog(@"Metadata: Data fetched from %@", source);
    }];

জাভা

db.collection("cities").whereEqualTo("state", "CA")
        .addSnapshotListener(MetadataChanges.INCLUDE, new EventListener<QuerySnapshot>() {
            @Override
            public void onEvent(@Nullable QuerySnapshot querySnapshot,
                                @Nullable FirebaseFirestoreException e) {
                if (e != null) {
                    Log.w(TAG, "Listen error", e);
                    return;
                }

                for (DocumentChange change : querySnapshot.getDocumentChanges()) {
                    if (change.getType() == Type.ADDED) {
                        Log.d(TAG, "New city:" + change.getDocument().getData());
                    }

                    String source = querySnapshot.getMetadata().isFromCache() ?
                            "local cache" : "server";
                    Log.d(TAG, "Data fetched from " + source);
                }

            }
        });

কোটলিন+কেটিএক্স

db.collection("cities").whereEqualTo("state", "CA")
        .addSnapshotListener(MetadataChanges.INCLUDE) { querySnapshot, e ->
            if (e != null) {
                Log.w(TAG, "Listen error", e)
                return@addSnapshotListener
            }

            for (change in querySnapshot!!.documentChanges) {
                if (change.type == DocumentChange.Type.ADDED) {
                    Log.d(TAG, "New city: ${change.document.data}")
                }

                val source = if (querySnapshot.metadata.isFromCache)
                    "local cache"
                else
                    "server"
                Log.d(TAG, "Data fetched from $source")
            }
        }

অফলাইন ডেটা পান

ডিভাইসটি অফলাইনে থাকার সময় যদি আপনি একটি নথি পান, ক্লাউড ফায়ারস্টোর ক্যাশে থেকে ডেটা ফেরত দেয়।

একটি সংগ্রহ জিজ্ঞাসা করার সময়, যদি কোনও ক্যাশেড ডকুমেন্ট না থাকে তবে একটি খালি ফলাফল ফেরত দেওয়া হয়। একটি নির্দিষ্ট নথি আনার সময়, এর পরিবর্তে একটি ত্রুটি ফেরত দেওয়া হয়।

অফলাইন ডেটা জিজ্ঞাসা করুন

অনুসন্ধান অফলাইন দৃist়তার সাথে কাজ করে। আপনি পূর্ববর্তী বিভাগগুলিতে বর্ণিত হিসাবে সরাসরি প্রাপ্ত বা শোনার মাধ্যমে প্রশ্নের ফলাফলগুলি পুনরুদ্ধার করতে পারেন। ডিভাইসটি অফলাইনে থাকাকালীন আপনি স্থানীয়ভাবে স্থায়ী ডেটার উপর নতুন প্রশ্নও তৈরি করতে পারেন, কিন্তু প্রাথমিকভাবে প্রশ্নগুলি কেবল ক্যাশেড ডকুমেন্টের বিরুদ্ধে চলবে।

নেটওয়ার্ক অ্যাক্সেস অক্ষম করুন এবং সক্ষম করুন

আপনার ক্লাউড ফায়ারস্টোর ক্লায়েন্টের জন্য নেটওয়ার্ক অ্যাক্সেস নিষ্ক্রিয় করতে আপনি নীচের পদ্ধতিটি ব্যবহার করতে পারেন। নেটওয়ার্ক অ্যাক্সেস অক্ষম থাকলে, সমস্ত স্ন্যাপশট শ্রোতা এবং নথির অনুরোধগুলি ক্যাশে থেকে ফলাফল পুনরুদ্ধার করে। নেটওয়ার্ক অ্যাক্সেস পুনরায় সক্ষম না হওয়া পর্যন্ত রাইট অপারেশন সারিবদ্ধ।

ওয়েব সংস্করণ 9

import { disableNetwork } from "firebase/firestore"; 

await disableNetwork(db);
console.log("Network disabled!");
// Do offline actions
// ...

ওয়েব সংস্করণ 8

firebase.firestore().disableNetwork()
    .then(() => {
        // Do offline actions
        // ...
    });
সুইফট
Firestore.firestore().disableNetwork { (error) in
    // Do offline things
    // ...
}
উদ্দেশ্য গ
[[FIRFirestore firestore] disableNetworkWithCompletion:^(NSError *_Nullable error) {
  // Do offline actions
  // ...
}];

জাভা

db.disableNetwork()
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                // Do offline things
                // ...
            }
        });

কোটলিন+কেটিএক্স

db.disableNetwork().addOnCompleteListener {
    // Do offline things
    // ...
}

নেটওয়ার্ক অ্যাক্সেস পুনরায় সক্ষম করতে নিম্নলিখিত পদ্ধতিটি ব্যবহার করুন:

ওয়েব সংস্করণ 9

import { enableNetwork } from "firebase/firestore"; 

await enableNetwork(db);
// Do online actions
// ...

ওয়েব সংস্করণ 8

firebase.firestore().enableNetwork()
    .then(() => {
        // Do online actions
        // ...
    });
সুইফট
Firestore.firestore().enableNetwork { (error) in
    // Do online things
    // ...
}
উদ্দেশ্য গ
[[FIRFirestore firestore] enableNetworkWithCompletion:^(NSError *_Nullable error) {
  // Do online actions
  // ...
}];

জাভা

db.enableNetwork()
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                // Do online things
                // ...
            }
        });

কোটলিন+কেটিএক্স

db.enableNetwork().addOnCompleteListener {
    // Do online things
    // ...
}