Firebase রিমোট কনফিগারেশন ব্যবহার করে ধীরে ধীরে ফায়ারবেস অ্যাপ চেক করুন

1. ভূমিকা

আপনার ব্যাকএন্ড পরিষেবাগুলিকে সুরক্ষিত রাখতে এবং আপনার খাঁটি অ্যাপ থেকে Firebase পরিষেবাগুলির অনুরোধ আসছে কিনা তা যাচাই করতে আপনি অ্যাপ অ্যাটেস্টের সাথে Firebase অ্যাপ চেক ব্যবহার করতে পারেন।

কোটা সীমা অতিক্রম করা এড়াতে সাধারণত ব্যবহারকারীদের ধীরে ধীরে অ্যাপ অ্যাটেস্ট পরিষেবাতে যুক্ত করার পরামর্শ দেওয়া হয়। আরও তথ্যের জন্য, অ্যাপলের " অ্যাপ অ্যাটেস্ট পরিষেবা ব্যবহারের প্রস্তুতি " ডকুমেন্টেশন দেখুন।

" পর্যায়ক্রমে একটি সংস্করণ আপডেট প্রকাশ করা " -এ বর্ণিত অ্যাপলের অ্যাপ স্টোর কানেক্ট বৈশিষ্ট্যটি ব্যবহার করে ক্রমবর্ধমানভাবে অ্যাপ আপডেট প্রকাশ করার ক্ষমতা অ্যাপ চেক রোলআউটকে আরও মসৃণ করতে পারে। এটি একটি সহজ, সহজ সমাধান। তবে, পর্যায়ক্রমে একটি অ্যাপ সংস্করণ আপডেট প্রকাশ করলে আপনি নতুন অ্যাপ সংস্করণ প্রকাশ না করে রোলআউট নিয়ন্ত্রণ করতে বা বিদ্যমান, আপডেট হওয়া অ্যাপগুলির আচরণ পরিবর্তন করতে পারবেন না।

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

তুমি কি শিখবে

এই মাল্টিস্টেপ কোডল্যাবে, আপনি শিখবেন কিভাবে আপনার অ্যাপের জন্য অ্যাপ চেক রোল আউট করতে Firebase রিমোট কনফিগ ব্যবহার করবেন।

এই কোডল্যাবটি DatabaseExample কুইকস্টার্ট অ্যাপের উপর ভিত্তি করে একটি Firebase প্রকল্প ব্যবহার করে এবং Firebase অ্যাপ চেকের সাথে একত্রিত হয়, যেমনটি Firebase App Check for Apple Platforms codelab এ বর্ণিত হয়েছে। DatabaseExample কুইকস্টার্ট অ্যাপ ব্যবহারকারীদের Firebase রিয়েলটাইম ডেটাবেসের বৈশিষ্ট্যগুলি ব্যবহার করে লগ ইন করতে এবং পোস্ট যুক্ত করতে দেয়।

আপনার নিজস্ব অ্যাপ পরীক্ষা করার জন্য আপনি এই কোডল্যাবের ধাপগুলিও মানিয়ে নিতে পারেন।

পূর্বশর্ত

তোমার যা লাগবে

2. একটি কাস্টম প্রত্যয়ন প্রদানকারী তৈরি করুন

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

নিম্নলিখিত ধাপগুলি সম্পন্ন করার জন্য, আপনাকে Xcode-এ আপনার অ্যাপের Frameworks, Libraries, and Embedded Content বিভাগে Firebase , FirebaseRemoteConfig , এবং FirebaseAnalytics যোগ করতে হবে। এটি কীভাবে করবেন তার একটি উদাহরণের জন্য, Apple প্ল্যাটফর্ম codelab-এর জন্য Firebase App check দেখুন।

  1. " MyAppCheckProvider " নামে একটি ফাইল তৈরি করুন যা AppCheckProvider প্রোটোকলের সাথে সঙ্গতিপূর্ণ NSObject এর একটি উপশ্রেণী।
  2. একটি খালি getToken() পদ্ধতি অন্তর্ভুক্ত করুন যা আপনি পরে পূরণ করবেন।

খালি getToken() পদ্ধতি সহ কাস্টম প্রোভাইডার ক্লাসের জন্য নিম্নলিখিত উদাহরণ কোডটি দেখুন।

// MyAppCheckProvider.swift

import Firebase
import FirebaseAnalytics
import FirebaseAppCheck
import FirebaseRemoteConfig

class MyAppCheckProvider: NSObject, AppCheckProvider {
  func getToken(completion handler: @escaping (AppCheckToken?, Error?) -> Void) {}
}

AppAttestProvider ইন্সট্যান্ট করার জন্য, আপনাকে সংশ্লিষ্ট FirebaseApp এর একটি ইনস্ট্যান্স পাস করতে হবে। এর জন্য একটি সঞ্চিত সম্পত্তি তৈরি করুন এবং এটিকে একটি initializer প্যারামিটার হিসেবে গ্রহণ করুন:

// MyAppCheckProvider.swift

import Firebase
import FirebaseAnalytics
import FirebaseAppCheck
import FirebaseRemoteConfig

class MyAppCheckProvider: NSObject, AppCheckProvider {
  // Firebase app instance served by the provider.
  let firebaseApp: FirebaseApp

  // The App Check provider factory should pass the FirebaseApp instance.
  init(app: FirebaseApp) {
    self.firebaseApp = app
    super.init()
  }

  func getToken(completion handler: @escaping (AppCheckToken?, Error?) -> Void) {}
}

টোকেন অনুরোধটি অ্যাপ অ্যাটেস্ট প্রদানকারীর কাছে ফরোয়ার্ড করুন।

এখন আপনার getToken() পদ্ধতিতে অ্যাপ অ্যাটেস্ট প্রদানকারীর কাছে টোকেন অনুরোধটি ফরোয়ার্ড করার জন্য সবকিছু আছে।

দ্রষ্টব্য: FirebaseAppCheck ফ্রেমওয়ার্ক রেফারেন্সে getToken() পদ্ধতি সম্পর্কে আরও জানুন।

আপনার getToken() পদ্ধতিতে নিম্নলিখিত কোডটি যোগ করুন:

// MyAppCheckProvider.swift

import Firebase
import FirebaseAnalytics
import FirebaseAppCheck
import FirebaseRemoteConfig

class MyAppCheckProvider: NSObject, AppCheckProvider {
  // Firebase app instance served by the provider.
  let firebaseApp: FirebaseApp

  // The App Check provider factory should pass the FirebaseApp instance.
  init(app: FirebaseApp) {
    self.firebaseApp = app
    super.init()
  }

  private lazy var appAttestProvider = AppAttestProvider(app: firebaseApp)

  func getToken(completion handler: @escaping (AppCheckToken?, Error?) -> Void) {
    // Fetch App Attest flag from Remote Config
    let remoteConfig = RemoteConfig.remoteConfig(app: firebaseApp)
    remoteConfig.fetchAndActivate { remoteConfigStatus, error in
      // Get App Attest flag value
      let appAttestEnabled = remoteConfig.configValue(forKey: "AppAttestEnabled").boolValue

      guard appAttestEnabled else {
        // Skip attestation if App Attest is disabled. Another attestation
        // method like DeviceCheck may be used instead of just skipping.
        handler(nil, MyProviderError.appAttestIsDisabled)
        return
      }

      // Try to obtain an App Attest provider instance and fail if cannot
      guard let appAttestProvider = self.appAttestProvider else {
        handler(nil, MyProviderError.appAttestIsUnavailable)
        return
      }

      // If App Attest is enabled for the app instance, then forward the
      // Firebase App Check token request to the App Attest provider
      appAttestProvider.getToken(completion: handler)
    }
  }
}

enum MyProviderError: Error {
  case appAttestIsDisabled
  case appAttestIsUnavailable
  case unexpected(code: Int)
}

পূর্ববর্তী কোডটি একটি Remote Config AppAttestEnabled বুলিয়ান প্যারামিটার পরীক্ষা করে (এই Remote Config প্যারামিটারটি কোডল্যাবে পরে তৈরি করা হবে)। যদি মানটি মিথ্যা হয়, তাহলে কোডটি ব্যর্থ হয়, যা নির্দেশ করে যে অ্যাপ চেক বর্তমান ডিভাইসে রোল আউট করা হয়নি। যদি মানটি সত্য হয়, তাহলে কোডটি একটি অ্যাপ অ্যাটেস্ট প্রদানকারী পাওয়ার চেষ্টা করে এবং যদি তা না পারে তবে ব্যর্থ হয়। যদি এই ত্রুটি পরীক্ষাগুলি পাস করা হয়, তাহলে কোডটি টোকেন অনুরোধটি অ্যাপ অ্যাটেস্ট প্রদানকারীর কাছে ফরোয়ার্ড করবে।

অ্যানালিটিক্স ইভেন্ট যোগ করুন

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

দুটি অ্যানালিটিক্স ইভেন্ট লগ করুন: সাফল্যের উপর AppAttestSuccess এবং ব্যর্থতার উপর AppAttestFailure । এই দুটি অ্যানালিটিক্স ইভেন্ট আপনার অ্যাপ চেক রোলআউটের সাফল্য ট্র্যাক করতে সাহায্য করতে পারে এবং আরও বড় রোলআউট এগিয়ে নেওয়া উচিত কিনা তা সিদ্ধান্ত নিতে আপনাকে সাহায্য করতে পারে।

func getToken(completion handler: @escaping (AppCheckToken?, Error?) -> Void) {
  // Fetch Remote Config.
  let remoteConfig = RemoteConfig.remoteConfig(app: firebaseApp)
  remoteConfig.fetchAndActivate { remoteConfigStatus, error in
    // Get App Attest flag value from Remote Config.
    let appAttestEnabled = remoteConfig.configValue(forKey: "AppAttestEnabled").boolValue

    guard appAttestEnabled else {
      // Skip attestation if App Attest is disabled. Another attestation
      // method like DeviceCheck may be used instead of just skipping.
      handler(nil, MyProviderError.appAttestIsDisabled)
      return
    }

    // Try to obtain an App Attest provider instance and fail otherwise.
    guard let appAttestProvider = self.appAttestProvider else {
      handler(nil, MyProviderError.appAttestIsUnavailable)
      return
    }

    // If App Attest is enabled for the app instance, then forward the
    // Firebase App Check token request to the App Attest provider.
    appAttestProvider.getToken { token, error in
      // Log an Analytics event to track attestation success rate.
      let appAttestEvent: String
      if (token != nil && error == nil) {
        appAttestEvent = "AppAttestSuccess"
      } else {
        appAttestEvent = "AppAttestFailure"
      }
      Analytics.logEvent(appAttestEvent, parameters: nil)

      // Pass the result to the handler
      handler(token, error)
    }
  }
}

৩. প্রোভাইডার ফ্যাক্টরি ক্লাস আপডেট করুন

অ্যাপ অ্যাটেস্ট প্রোভাইডারের কাছে টোকেন রিকোয়েস্ট ফরোয়ার্ড করার লজিক বাস্তবায়ন করার পরে এবং কিছু অ্যানালিটিক্স ইভেন্ট যোগ করার পরে, আপনাকে MyAppCheckProviderFactory.class আপডেট করতে হবে যা আপনি অ্যাপল প্ল্যাটফর্ম কোডল্যাবের জন্য অ্যাপ চেকে তৈরি করেছেন। এই ক্লাসটি সিমুলেটরগুলির জন্য অ্যাপ চেক ডিবাগ প্রোভাইডারকে লক্ষ্য করবে এবং অন্যথায় আপনার কাস্টম প্রোভাইডারকে লক্ষ্য করবে।

অ্যাপল প্ল্যাটফর্ম কোডল্যাবের জন্য ফায়ারবেস অ্যাপ চেকে তৈরি MyAppCheckProviderFactory ক্লাসে নিম্নলিখিত কোডটি সম্পাদনা করুন:

// MyAppCheckProviderFactory.swift

import Firebase

class MyAppCheckProviderFactory: NSObject, AppCheckProviderFactory {
  func createProvider(with app: FirebaseApp) -> AppCheckProvider? {
      #if targetEnvironment(simulator)
      // App Attest is not available on simulators.
      // Use a debug provider.
      let provider = AppCheckDebugProvider(app: app)

      // Print only locally generated token to avoid a valid token leak on CI.
      print("Firebase App Check debug token: \(provider?.localDebugToken() ?? "" )")

      return provider
      #else
      if #available(iOS 14.0, *) {
        // Use your custom App Attest provider on real devices.
        return MyAppCheckProvider(app: app)
      } else {
        return DeviceCheckProvider(app: app)
      }
      #endif
  }
}

FirebaseApp কনফিগার করার আগে নিশ্চিত করুন যে আপনি AppCheckProviderFactory সেট করেছেন:

// DatabaseExampleApp.swift

import SwiftUI
import Firebase
import FirebaseAppCheck

@main
struct DatabaseExampleApp: App {
  init() {
    AppCheck.setAppCheckProviderFactory(MyAppCheckProviderFactory())
    FirebaseApp.configure()
  }

  // ...
}

৪. ফায়ারবেস কনসোলে একটি রিমোট কনফিগ প্যারামিটার যোগ করুন

এখন আপনি Firebase কনসোলে Remote Config প্যারামিটার AppAttestEnabled যোগ করবেন। আপনার getToken পদ্ধতিতে এই প্যারামিটারটি প্রয়োজন।

Firebase কনসোলে একটি Remote Config প্যারামিটার তৈরি করতে:

  1. আপনার প্রকল্পের জন্য Remote Config খুলুন এবং Add parameter এ ক্লিক করুন। যদি আপনি প্রথমবার Remote Config ব্যবহার করেন, তাহলে Create configuration এ ক্লিক করুন।
  2. প্যারামিটার নাম (কী) ক্ষেত্রে, AppAttestEnabled লিখুন।
  3. ডেটা টাইপ ড্রপ-ডাউন থেকে, বুলিয়ান নির্বাচন করুন।
  4. ডিফল্ট মান ড্রপ-ডাউন থেকে, false নির্বাচন করুন।

ফায়ারবেস কনসোলে রিমোট কনফিগ প্যারামিটার তৈরি করা

সংরক্ষণ ক্লিক করার আগে, ১০% ব্যবহারকারীর জন্য একটি শর্তসাপেক্ষ মান তৈরি করুন:

  1. নতুন যোগ করুন > শর্তসাপেক্ষ মান > নতুন শর্ত তৈরি করুন ক্লিক করুন।
  2. নাম ক্ষেত্রে, একটি শর্তের নাম লিখুন।
  3. Applies if... এর অধীনে, র‍্যান্ডম পার্সেন্টাইলে User নির্বাচন করুন, <= , এবং তারপর % ক্ষেত্রে 10 লিখুন।
  4. শর্ত তৈরি করুন ক্লিক করুন।

Firebase কনসোলে একটি রিমোট কনফিগ অবস্থা নির্ধারণ করা

শর্তসাপেক্ষ মানটি সত্যে সেট করুন যাতে অ্যাপ অ্যাটেস্ট আপনার ব্যবহারকারীদের ১০% এর কাছে রোল আউট হয়।

  1. আপনার তৈরি করা অবস্থাটির জন্য মানটি সত্যে সেট করুন।
  2. সংরক্ষণ করুন ক্লিক করুন।

Firebase কনসোলে রিমোট কনফিগ প্যারামিটার পর্যালোচনা করা হচ্ছে

আপনার কাজ শেষ হয়ে গেলে, রিমোট কনফিগারেশনের পরিবর্তনগুলি প্রকাশ করুন।

আপনার ডিভাইসে রোলআউট পরীক্ষা করুন

অ্যাপ কোড পরিবর্তন না করেই আপনার ডিভাইসে বিভিন্ন রিমোট কনফিগ ফ্ল্যাগ মান পরীক্ষা করতে, "A/B টেস্টিং সহ ফায়ারবেস রিমোট কনফিগ এক্সপেরিমেন্ট তৈরি করুন" টিউটোরিয়াল অনুসরণ করে AppAttestEnabled প্যারামিটারে একটি পরীক্ষা কনফিগার করুন। " একটি পরীক্ষা ডিভাইসে আপনার পরীক্ষা যাচাই করুন " টিউটোরিয়াল বিভাগটি আপনার পরীক্ষা ডিভাইসের জন্য বিভিন্ন মান কীভাবে বরাদ্দ করবেন তা ব্যাখ্যা করে।

শেষ ধাপ হল আপনার অ্যাপ অ্যাটেস্ট রোলআউটের সাফল্য পর্যবেক্ষণ করতে গুগল অ্যানালিটিক্স ব্যবহার করা।

৫. আপনার অ্যাপচেক রোলআউটের সাফল্য পর্যালোচনা করুন

আপনি Analytics Events ড্যাশবোর্ডে আপনার রোলআউটের সাফল্য পরিমাপ করতে পারেন। AppAttestSuccess এবং AppAttestFailure ইভেন্টগুলির জন্য নজর রাখুন। ড্যাশবোর্ডে ইভেন্টগুলি দেখতে 24 ঘন্টা পর্যন্ত সময় লাগতে পারে। বিকল্পভাবে, আপনি ডিবাগিং সক্ষম করতে পারেন এবং ডিবাগ ইভেন্টগুলি আরও দ্রুত দেখতে DebugView ব্যবহার করতে পারেন।

ঐচ্ছিকভাবে, ক্র্যাশের হার বৃদ্ধির জন্য আপনি Crashlytics ড্যাশবোর্ড পর্যবেক্ষণ করতে পারেন। আপনার অ্যাপে Crashlytics যোগ করার বিষয়ে আরও তথ্যের জন্য, Firebase Crashlytics দিয়ে শুরু করুন দেখুন।

একবার যখন আপনি বেশিরভাগ AppAttestSuccess ইভেন্ট এবং কয়েকটি AppAttestFailure ইভেন্ট দেখতে পান, তখন এটি একটি ভালো লক্ষণ যে আপনি Remote Config প্যারামিটার AppAttestEnabled- এর শর্ত পরিবর্তন করে App Attest সক্ষম ব্যবহারকারীর শতাংশ বাড়াতে পারেন।

Firebase কনসোলে Analytics ইভেন্টগুলি পর্যালোচনা করা

ঐচ্ছিক: গুগল অ্যানালিটিক্স অডিয়েন্সের সুবিধা নিন

আপনি যদি AppAttestEnabled Analytics ইভেন্টটিকে আরও কাজে লাগাতে চান, তাহলে আপনি AppAttestEnabled কে true তে সেট করে ব্যবহারকারীদের ট্র্যাক করার জন্য একটি Analytics Audience তৈরি করতে পারেন।

iOS 14.0 এর সাথে অ্যাপ অ্যাটেস্ট রিলিজ করা হয়েছে। আপনার কিছু ব্যবহারকারী এই রিলিজে নাও থাকতে পারেন, এবং তাই অ্যাপ অ্যাটেস্টের জন্য যোগ্য নন। আপনি এই ব্যবহারকারীদের ট্র্যাক করার জন্য অন্য একটি অ্যানালিটিক্স ইভেন্ট লগ করতে পারেন, তারপর সেই দর্শকদের অন্য একটি অ্যাটেস্টেশন পদ্ধতির জন্য টার্গেট করতে পারেন, যেমন DeviceCheck

ঐচ্ছিক: ক্র্যাশগুলি পর্যবেক্ষণ করতে ক্র্যাশলিটিক্স ব্যবহার করুন

রোলআউটের সময় আপনার অ্যাপের স্থিতিশীলতা আরও ভালোভাবে বুঝতে, ক্র্যাশ এবং নন-ফ্যাটাল পর্যবেক্ষণ করতে Firebase Crashlytics ব্যবহার করুন।

৬. অভিনন্দন!

আপনি রিমোট কনফিগ দিয়ে অ্যাপ চেক সফলভাবে চালু করেছেন 🎉

অতিরিক্ত সম্পদ: