Firebase ইনস্টলেশন ও আইডি ম্যানেজ করা

Firebase ইনস্টলেশন পরিষেবা (FIS) Firebase অ্যাপের প্রতিটি ইনস্টল করা ইনস্ট্যান্সের জন্য একটি Firebase ইনস্টলেশন আইডি (FID) প্রদান করে। এইসব Firebase পরিষেবা ইন্টার্নালি Firebase ইনস্টলেশন আইডি ব্যবহার করে:

Firebase পরিষেবা Firebase ইনস্টলেশন সংক্রান্ত কার্যকারিতা
Firebase Cloud Messaging

Firebase Cloud Messaging মেসেজ ডেলিভারির জন্য ডিভাইস টার্গেট করতে Firebase ইনস্টলেশন আইডি ব্যবহার করে।

Firebase Crashlytics

Firebase Crashlytics অ্যাপ ইনস্ট্যান্সের Firebase ইনস্টলেশন আইডিতে হওয়া পরিবর্তনের ভিত্তিতে Crashlytics ইনস্টলেশন UUID রোটেট করে। ভবিষ্যতে, ক্র্যাশ রিপোর্টিং ও ক্র্যাশ ম্যানেজমেন্ট পরিষেবা উন্নত করে এমন ফিচার চালু করতে ইনস্টলেশন আইডি ব্যবহার করা হতে পারে।

Firebase In-App Messaging

Firebase In-App Messaging মেসেজ ডেলিভারির জন্য ডিভাইস টার্গেট করতে Firebase ইনস্টলেশন আইডি ব্যবহার করে।

Firebase Performance Monitoring

Performance Monitoring Firebase ইনস্টলেশন আইডি ব্যবহার করে নেটওয়ার্ক রিসোর্স অ্যাক্সেস করা অনন্য Firebase ইনস্টলেশনের সংখ্যা গণনা করে, যাতে অ্যাক্সেস প্যাটার্ন যথেষ্ট পরিচয় গোপন রাখা যায়। এছাড়াও, এটি পারফর্ম্যান্স ইভেন্ট রিপোর্টিংয়ের হার ম্যানেজ করতে Firebase ইনস্টলেশন আইডি সহ Firebase Remote Config ব্যবহার করে।

Firebase Remote Config

Remote Config ব্যবহার করে Firebase ইনস্টলেশন আইডি ব্যবহারকারীর ডিভাইসে ফেরত পাঠানোর জন্য কনফিগারেশন ভ্যালু বেছে নেয়। Remote Config পছন্দমতো করার ফিচার Firebase ইনস্টলেশন আইডি ব্যবহার করে Firebase ইনস্টলেশনের সাথে অ্যাপ ইভেন্ট ডেটা অ্যাসোসিয়েট করে, যাতে এন্ড-ইউজার ডিভাইসে অপ্টিমাল কনফিগারেশন ভ্যালু প্রেডিক্ট ও রিটার্ন করা যায়।

Firebase ML

Firebase ML-এর দ্বারা অ্যাপ ইনস্ট্যান্সের সাথে ইন্টার‍্যাক্ট করার সময় ডিভাইস যাচাইকরণের জন্য ইনস্টলেশন যাচাইকরণ টোকেন নামক ক্রেডেনশিয়াল ব্যবহার করা হয়, যেমন, অ্যাপ ইনস্ট্যান্সে ডেভেলপার মডেল ডিস্ট্রিবিউট করার জন্য।

Firebase ব্যবহারকারী সেগমেন্টেশন স্টোরেজ

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

সাধারণত, Firebase পরিষেবা Firebase ইনস্টলেশন পরিষেবা ব্যবহার করে, এর জন্য ডেভেলপারদের FIS API-এর সাথে সরাসরি ইন্টার‍্যাক্ট করতে হয় না। তবে, এমন কিছু ঘটনা ঘটে যেখানে অ্যাপ ডেভেলপাররা সরাসরি FIS API কল করতে চাইতে পারেন, যেমন:

  • Firebase ইনস্টলেশন ও ইনস্টলেশনের সাথে যুক্ত ডেটা মুছে দিতে।
  • নির্দিষ্ট অ্যাপ ইনস্টলেশনকে টার্গেট করার জন্য শনাক্তকারী (Firebase ইনস্টলেশন আইডি) রিট্রিভ করতে।
  • Firebase ইনস্টলেশন যাচাই করার জন্য ইনস্টলেশন যাচাইকরণ টোকেন রিট্রিভ করতে।

সরাসরি FIS API কল করা শুরু করতে, আপনার অ্যাপে SDK যোগ করুন।

আপনার অ্যাপে Firebase ইনস্টলেশন SDK যোগ করুন

iOS+

  1. আপনার Podfile-এ Firebase ইনস্টলেশনের জন্য ডিপেন্ডেন্সি যোগ করুন:
    pod 'FirebaseInstallations'
  2. pod install রান করুন এবং তৈরি করা .xcworkspace ফাইলটি খুলুন।
  3. আপনার FirebaseCore মডিউলটি আপনার UIApplicationDelegate-এ ইমপোর্ট করুন, সেইসাথে আপনার অ্যাপ ডেলিগেট ব্যবহার করে এমন যেকোনও Firebase মডিউল ইমপোর্ট করুন। যেমন, Cloud Firestore ও Authentication ব্যবহার করতে:

    SwiftUI

    import SwiftUI
    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Swift

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Objective-C

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  4. আপনার অ্যাপ ডেলিগেটের application(_:didFinishLaunchingWithOptions:) পদ্ধতিতে FirebaseApp শেয়ার করা ইনস্ট্যান্স কনফিগার করুন:

    SwiftUI

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    Swift

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
  5. আপনি SwiftUI ব্যবহার করলে, আপনাকে অবশ্যই একটি অ্যাপ্লিকেশন ডেলিগেট তৈরি করতে হবে এবং এটি UIApplicationDelegateAdaptor বা NSApplicationDelegateAdaptor-এর মাধ্যমে আপনার App struct-এর সাথে অ্যাটাচ করতে হবে। এছাড়াও, আপনাকে অবশ্যই অ্যাপ ডেলিগেট সোয়েজলিং বন্ধ করতে হবে। আরও তথ্যের জন্য, SwiftUI নির্দেশাবলী দেখুন।

    SwiftUI

    @main
    struct YourApp: App {
      // register app delegate for Firebase setup
      @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
    
      var body: some Scene {
        WindowGroup {
          NavigationView {
            ContentView()
          }
        }
      }
    }
          

Android

আপনার মডিউলে (অ্যাপ-লেভেল) Firebase ইনস্টলেশনের জন্য Android SDK-এর ডিপেন্ডেন্সি যোগ করুন (সাধারণত app/build.gradle):

implementation 'com.google.firebase:firebase-installations:19.1.2'

জাভাস্ক্রিপ্ট

আপনার ওয়েব অ্যাপ্লিকেশন কীভাবে হোস্ট করা হয় তার উপর নির্ভর করে, আপনার কনফিগারেশন অটোমেটিক ম্যানেজ করা হতে পারে অথবা আপনাকে নিজের Firebase কনফিগারেশন অবজেক্ট আপডেট করতে হতে পারে।

যেমন, আপনার ডিপেন্ডেন্সি index.html-এ যোগ করা থাকলে, <head> এলিমেন্টে ডিপেন্ডেন্সি যোগ করুন:

<script src="/__/firebase/12.19.0/firebase-installations.js"></script>

Flutter

  1. আপনার Flutter প্রোজেক্টের রুট ডিরেক্টরি থেকে, Firebase installations প্লাগ-ইন ইনস্টল করতে, নিম্নলিখিত কমান্ড রান করুন:

    flutter pub add firebase_app_installations
    
  2. আপনার প্রোজেক্ট আবার তৈরি করুন:

    flutter run
    
  3. Firebase ইনস্টলেশন প্লাগ-ইন ইমপোর্ট করুন:

    import 'package:firebase_app_installations/firebase_app_installations.dart';
    

Firebase ইনস্টলেশন মুছে দেওয়া

Firebase ইনস্টলেশনের সাথে যুক্ত ডেটা সাধারণত ব্যক্তিগতভাবে শনাক্তকারী নয়। তবুও, ব্যবহারকারীদের এই ডেটা ম্যানেজ ও মুছে দেওয়ার বিকল্প দিলে তা সহায়ক হতে পারে।

Firebase ইনস্টলেশন আইডি প্রতিটি অ্যাপ্লিকেশনের প্রতিটি ইনস্টলেশনের জন্য আলাদা আলাদা হয়; একই ডিভাইসে আলাদা আলাদা অ্যাপ্লিকেশনের আলাদা আলাদা Firebase ইনস্টলেশন আইডি থাকে। Firebase ইনস্টলেশন আইডি অ্যাপ ইনস্টলেশন এবং সেইসব অ্যাপ ইনস্টলেশনের সাথে যুক্ত ডেটা শনাক্ত করে।

আপনি কোনও ইনস্টলেশন আইডি মুছে দিলে, সেই ইনস্টলেশন আইডির সাথে যুক্ত ডেটা, Firebase ইনস্টলেশন আইডি ব্যবহার করে ইনস্টলেশন শনাক্ত করে এমন সব Firebase পরিষেবার লাইভ ও ব্যাক-আপ সিস্টেম থেকে ১৮০ দিনের মধ্যে সরিয়ে দেওয়া হয়। এই প্রসেসটি Google-এর মুছে ফেলা ও ডেটা রেখে দেওয়া সংক্রান্ত বিবৃতিতে উচ্চ-স্তরে বর্ণনা করা হয়েছে।

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

ক্লায়েন্ট API কল করে FID মুছে দেওয়া

Firebase পরিষেবার মাধ্যমে তৈরি করা FID মুছে দিতে, Firebase ইনস্টলেশন SDK থেকে উপযুক্ত পদ্ধতি কল করুন:

Swift

do {
  try await Installations.installations().delete()
  print("Installation deleted");
} catch {
  print("Error deleting installation: \(error)")
}

Objective-C

[[FIRInstallations installations] deleteWithCompletion:^(NSError *error) {
   if (error != nil) {
     NSLog(@"Error deleting Installation %@", error);
     return;
   }
   NSLog(@"Installation deleted");
}];

Java

FirebaseInstallations.getInstance().delete()
        .addOnCompleteListener(new OnCompleteListener<Void>() {
    @Override
    public void onComplete(@NonNull Task<Void> task) {
        if (task.isSuccessful()) {
            Log.d("Installations", "Installation deleted");
        } else {
            Log.e("Installations", "Unable to delete Installation");
        }
    }
});

Kotlin

FirebaseInstallations.getInstance().delete().addOnCompleteListener { task ->
    if (task.isComplete) {
        Log.d("Installations", "Installation deleted")
    } else {
        Log.e("Installations", "Unable to delete Installation")
    }
}

জাভাস্ক্রিপ্ট

await firebase.installations().delete();

Dart

await FirebaseInstallations.instance.delete();

সার্ভার API কলের মাধ্যমে FID মোছা

সার্ভার API কলের মাধ্যমে কোনও FID মুছে দিতে, আপনার সার্ভারে Firebase Admin SDK যোগ করুন, যদি আগে থেকে না করে থাকেন।

SDK যোগ করা হয়ে গেলে, আপনার পছন্দের ভাষায় মুছে ফেলার ফাংশনে কল করার মাধ্যমে FID মুছে দিন (মনে রাখবেন: Node.js ছাড়া, এই মেথডগুলি ইনস্ট্যান্স আইডির নামকরণকে প্রতিফলিত করে। তবে, সবকটিই আসলে FID মুছে দেয় যখন কোনও বর্তমান Firebase SDK-এর সাথে কল করা হয়)।

Node.js

// An FIDsent from a client service SDK
const idToDelete = 'eyJhbGciOiJFUzI1N_iIs5';

admin.installations().deleteInstallation(idToDelete);

Java

// An FID sent from a client service SDK
String idToDelete = "eyJhbGciOiJFUzI1N_iIs5";

FirebaseInstanceId.getInstance().deleteInstanceIdAsync(idToDelete).get();

Python

  from firebase_admin import instance_id

  # An FID sent from a client service SDK
  id_to_delete = 'eyJhbGciOiJFUzI1N_iIs5'

  instance_id.delete_instance_id(id_to_delete)

Go

client, err := app.InstanceId(ctx)
if err != nil {
  log.Fatalln("error initializing client", err)
}

iidToDelete := "eyJhbGciOiJFUzI1N_iIs5"
if err := client.DeleteInstanceId(ctx, iidToDelete); err != nil {
  log.Fatalln("error deleting FID", err)
}

আপনি যখন কোনও সার্ভার API কলের মাধ্যমে Firebase ইনস্টলেশন আইডি মুছে দেন, তখন Firebase পরিষেবা সেই ইনস্টলেশন আইডির সাথে যুক্ত ডেটা মুছে ফেলার প্রসেস শুরু করে, ১-২ দিন ধরে সেই আইডির জন্য নতুন ডেটা গ্রহণ করা বন্ধ করে দেয় এবং তারপরে ক্লায়েন্ট অ্যাপকে বিজ্ঞপ্তি পাঠায় যে আইডিটি মুছে ফেলা হয়েছে। Firebase ক্লায়েন্ট অ্যাপকে বিজ্ঞপ্তি না পাঠানো পর্যন্ত, অ্যাপের কিছু পরিষেবা হয়ত এখনও আইডিকে টার্গেট করতে পারে—যেমন, Firebase ইনস্টলেশন হয়ত আরও কয়েক ঘণ্টা FCM বিজ্ঞপ্তি পাওয়া চালিয়ে যেতে পারে।

আপনি যদি বর্তমান Firebase ইনস্টলেশন আইডি মুছে ফেলতে চান এবং অবিলম্বে একটি নতুন, সম্পর্কহীন আইডি দিয়ে Firebase পরিষেবা ব্যবহার করতে চান, তাহলে মুছে ফেলার কাজটি ম্যানেজ করতে ক্লায়েন্ট API ব্যবহার করুন।

ক্লায়েন্ট শনাক্তকারী তথ্য পাওয়া

আপনার অ্যাপের নির্দিষ্ট ইনস্টলেশন শনাক্ত করার প্রয়োজন হলে, আপনি Firebase ইনস্টলেশন আইডি পুনরুদ্ধার করে তা করতে পারেন। যেমন, BigQuery ইমপোর্টের জন্য অ্যাপ ইনস্টল করা সংক্রান্ত সেগমেন্ট তৈরি করতে অথবা Firebase In-App Messaging ডেভেলপমেন্টের সময় টেস্টিং করতে, আপনি সংশ্লিষ্ট Firebase ইনস্টলেশন আইডি ব্যবহার করে সঠিক ডিভাইস শনাক্ত ও টার্গেট করতে পারবেন।

Firebase ইনস্টলেশন আইডি পেতে:

Swift

do {
  let id = try await Installations.installations().installationID()
  print("Installation ID: \(id)")
} catch {
  print("Error fetching id: \(error)")
}

Objective-C

[[FIRInstallations installations] installationIDWithCompletion:^(NSString *identifier, NSError *error) {
  if (error != nil) {
    NSLog(@"Error fetching Installation ID %@", error);
    return;
  }
  NSLog(@"Installation ID: %@", identifier);
}];

Java

FirebaseInstallations.getInstance().getId()
        .addOnCompleteListener(new OnCompleteListener<String>() {
    @Override
    public void onComplete(@NonNull Task<String> task) {
        if (task.isSuccessful()) {
            Log.d("Installations", "Installation ID: " + task.getResult());
        } else {
            Log.e("Installations", "Unable to get Installation ID");
        }
    }
});

Kotlin

FirebaseInstallations.getInstance().id.addOnCompleteListener { task ->
    if (task.isSuccessful) {
        Log.d("Installations", "Installation ID: " + task.result)
    } else {
        Log.e("Installations", "Unable to get Installation ID")
    }
}

জাভাস্ক্রিপ্ট

const installationId = await firebase.installations().getId();
console.log(installationId);

Dart

String id = await FirebaseInstallations.instance.getId();

ইনস্টলেশন অথরাইজেশন টোকেন ফিরিয়ে আনা

Firebase পরিষেবাগুলি FIS থেকে পাওয়া অনুমোদন টোকেনের মাধ্যমে Firebase ইনস্টলেশন যাচাই করতে পারে। যেমন, Remote Config-এর জন্য A/B টেস্ট ডিজাইন করার সময়, ইনস্টলেশন অথ টোকেন ব্যবহার করে আপনি টার্গেট করা টেস্ট ডিভাইসকে প্রমাণিত করতে পারবেন।

ইনস্টলেশন অথ টোকেন হল JSON ওয়েব টোকেন (JWT) ফর্ম্যাটে থাকা স্বল্পমেয়াদী বিয়ারার টোকেন যেটিতে কোনও ইনস্টলেশনের জন্য নিম্নলিখিত তথ্য থাকে:

  • Firebase ইনস্টলেশন আইডি
  • সম্পর্কিত প্রোজেক্ট (projectNumber)
  • সংশ্লিষ্ট Firebase অ্যাপ্লিকেশন আইডি (appId)
  • টোকেনের মেয়াদ শেষ হওয়ার তারিখ

ইনস্টলেশন যাচাইকরণ টোকেন প্রত্যাহার করা যায় না এবং মেয়াদ শেষ না হওয়া পর্যন্ত সেটি বৈধ থাকে। ডিফল্ট টোকেনের মেয়াদ এক সপ্তাহ।

ইনস্টলেশন অথ টোকেন পেতে:

Swift

do {
  let result = try await Installations.installations()
    .authTokenForcingRefresh(true)
  print("Installation auth token: \(result.authToken)")
} catch {
  print("Error fetching token: \(error)")
}

Objective-C

[[FIRInstallations installations] authTokenForcingRefresh:true
                                               completion:^(FIRInstallationsAuthTokenResult *result, NSError *error) {
  if (error != nil) {
    NSLog(@"Error fetching Installation token %@", error);
    return;
  }
  NSLog(@"Installation auth token: %@", [result authToken]);
}];

Java

FirebaseInstallations.getInstance().getToken(/* forceRefresh */true)
        .addOnCompleteListener(new OnCompleteListener<InstallationTokenResult>() {
    @Override
    public void onComplete(@NonNull Task<InstallationTokenResult> task) {
        if (task.isSuccessful() && task.getResult() != null) {
            Log.d("Installations", "Installation auth token: " + task.getResult().getToken());
        } else {
            Log.e("Installations", "Unable to get Installation auth token");
        }
    }
});

Kotlin

val forceRefresh = true
FirebaseInstallations.getInstance().getToken(forceRefresh)
    .addOnCompleteListener { task ->
        if (task.isSuccessful) {
            Log.d("Installations", "Installation auth token: " + task.result?.token)
        } else {
            Log.e("Installations", "Unable to get Installation auth token")
        }
    }

জাভাস্ক্রিপ্ট

const installationToken = await firebase.installations()
    .getToken(/* forceRefresh */ true);
console.log(installationToken);

Dart

String token = await FirebaseInstallations.instance.getToken();

Firebase ইনস্টলেশন আইডি লাইফসাইকেল মনিটর করা

কোনও অ্যাপের স্বাভাবিক অপারেশন চলাকালীন, Firebaseইনস্টলেশন আইডি (FID)-এর জন্য বিশেষ মনিটরিংয়ের প্রয়োজন হয় না। তবে, যেসব অ্যাপ স্পষ্টভাবে FID রিট্রিভ ও ব্যবহার করে, সেগুলিকে FID-এর সম্ভাব্য মুছে ফেলা বা রোটেশন মনিটর করার জন্য লজিক যোগ করতে হবে। এখানে কিছু পরিস্থিতি দেওয়া হল যেখানে FID মুছে দেওয়া বা রোটেট করা হতে পারে:

  • অ্যাপ আনইনস্টল বা আবার ইনস্টল করা, যেমন কোনও গ্রাহক নতুন ডিভাইসে ইনস্টল করলে।
  • শেষ ব্যবহারকারী অ্যাপ বা ডিভাইসের ক্যাশে মুছে দেন।
  • অ্যাপ ইনঅ্যাক্টিভিটির কারণে ব্যাকএন্ডে FID মুছে দেওয়া ট্রিগার করা হয় (বর্তমানে এর থ্রেশহোল্ড হল ২৭০ দিন ইনঅ্যাক্টিভিটি)।

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

অ্যাপ এইসব পরিবর্তন মনিটর করতে এবং সেই অনুযায়ী উত্তর দিতে পারে।

FID রোটেট করা হচ্ছে কিনা তা মনিটর করতে:

Swift

installationIDObserver = NotificationCenter.default.addObserver(
        forName: .InstallationIDDidChange,
        object: nil,
        queue: nil
) { (notification) in
  // Fetch new Installation ID
  Task {
    await self.fetchInstallationToken()
  }
}

Objective-C

__weak __auto_type weakSelf = self;
self.installationIDObserver = [[NSNotificationCenter defaultCenter]
        addObserverForName: FIRInstallationIDDidChangeNotification
                    object:nil
                     queue:nil
                usingBlock:^(NSNotification * _Nonnull notification) {
    // Fetch new Installation ID
    [weakSelf fetchInstallationsID];
}];

নতুন FID অ্যাসাইন করা হলে, ডিফল্ট NSNotificationCenter-এ NSNotificationName.InstallationIDDidChange নামের একটি NSNotification পোস্ট করা হয়।

Android

নতুন FID পাওয়ার জন্য Kotlin ও Java ক্লায়েন্টকে ব্যর্থ কলের উত্তর দেওয়ার জন্য আবার চেষ্টা করার লজিক যোগ করতে হবে।

জাভাস্ক্রিপ্ট

ওয়েব অ্যাপ onIdChange হুকে সাবস্ক্রাইব করতে পারে।

নতুন FID তৈরি হলে, সাবস্ক্রাইব করা কলব্যাক ট্রিগার হয়:

await firebase.installations().onIdChange((newId) => {
  console.log(newId);
  // TODO: Handle new installation ID.
});

Dart

FirebaseInstallations.instance.onIdChange.listen((token) {
  print('FID token: $token');
});

Instance ID থেকে Firebase ইনস্টলেশনে মাইগ্রেট করা

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

আপনার অ্যাপের উপর নির্ভর করে মাইগ্রেশন প্রসেস আলাদা হয়:

  • যেসব অ্যাপ সরাসরি ইনস্ট্যান্স আইডি API কল করে না, সেগুলি SDK ভার্সন আপডেট করে মাইগ্রেট করতে পারে। বেশিরভাগ Firebase অ্যাপ এই বিভাগে পড়ে।

  • যেসব অ্যাপ স্পষ্টভাবে Instance ID-তে API কল করে, সেগুলিকে অবশ্যই SDK ভার্সন আপডেট করতে হবে এবং Instance ID মেথডগুলিকে তাদের Firebase ইনস্টলেশন বা FCM সমতুল্য মেথড দিয়ে পাল্টাতে কোডে পরিবর্তন করতে হবে। আপনার অ্যাপ যদি FCMরেজিস্ট্রেশন টোকেন পেতে ইনস্ট্যান্স আইডি ব্যবহার করে অথবা অ্যাপ ইনস্ট্যান্স টার্গেট করতে বা অন্য কোনও উদ্দেশ্যে ইনস্ট্যান্স আইডি স্পষ্টভাবে ব্যবহার করে, তাহলে আপনাকে অ্যাপ্লিকেশন কোড আপডেট করতে হবে।

বর্তমানে, FIS লেগ্যাসি শনাক্তকারী Firebase ইনস্ট্যান্স আইডির সাথে ব্যাকওয়ার্ড-কম্প্যাটিবল। IID মুছে ফেলা হল ডেটা মুছে ফেলার অনুরোধ করার একটি বিকল্প পদ্ধতি এইসব Firebase SDK-এর মাধ্যমে:

  • iOS 6.14.0 ও তার আগের যেকোনও ভার্সন
  • ২৭ ফেব্রুয়ারি, ২০২০-এর আগের Android SDK

এর অর্থ হল, অ্যাপগুলিকে Firebase ইনস্টলেশনে মাইগ্রেট করার প্রয়োজন নেই; তবে, এটি করার জন্য অত্যন্ত সাজেস্ট করা হয়।

Firebase ইনস্টলেশনের জন্য ন্যূনতম SDK ভার্সনে আপগ্রেড করা

ইনস্ট্যান্স আইডি থেকে Firebase ইনস্টলেশনে মাইগ্রেট করতে, আপনার অ্যাপ্লিকেশনে নিম্নলিখিত Firebase SDK-এর অন্তত তালিকাভুক্ত ন্যূনতম ভার্সন নম্বর ব্যবহার করা হচ্ছে কিনা তা নিশ্চিত করুন:

Firebase SDK ন্যূনতম Android ভার্সন ন্যূনতম iOS ভার্সন
Firebase ক্লাউড মেসেজিং v20.3.0 v6.34.0
রিমোট কনফিগ v19.2.0 v6.24.0
Firebase-এর জন্য Google Analytics \ (মেজারমেন্ট SDK) v17.4.4 v6.18.0
ইন-অ্যাপ মেসেজিং v19.0.7 v6.24.0
পারফর্ম্যান্স মনিটরিং v19.0.8 v6.21.0
Crashlytics v17.2.1 v6.23.0
ML Kit v22.1.2 v6.28.0

যে কোড স্পষ্টভাবে Instance ID API-কে কল করে তা আপডেট করা

আপনার Android বা Apple অ্যাপ সরাসরি Instance ID SDK পদ্ধতি ব্যবহার করলে, আপনি Firebase ইনস্টলেশন SDK বা FCM SDK-তে একই ধরনের বিকল্প ব্যবহার করে সেটি পরিবর্তন করতে পারবেন।

শনাক্তকারী ফিরিয়ে আনা

ইনস্ট্যান্স আইডি পাওয়ার পদ্ধতিগুলি বদলে ইনস্টলেশন আইডি পাওয়ার পদ্ধতি করা হয়েছে। যেমন:

আগে

Swift

Messaging.messaging().token { token, error in
  if let error = error {
    print("Error fetching remote FCM registration token: \(error)")
  } else if let token = token {
    print("Remote instance ID token: \(token)")
  }
}

Objective-C

[[FIRMessaging messaging] tokenWithCompletion:^(NSString * _Nullable token, NSError * _Nullable error) {
  if (error != nil) {
    NSLog(@"Error fetching the remote FCM registration token: %@", error);
  } else {
    NSLog(@"Remote FCM registration token: %@", token);
    NSString* message =
      [NSString stringWithFormat:@"FCM registration token: %@", token];
    // display message
    NSLog(@"%@", message);
  }
}];

Java

FirebaseInstanceId.getInstance().getInstanceId()
        .addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
            @Override
            public void onComplete(@NonNull Task<InstanceIdResult> task) {
                Log.d("IID_TOKEN", task.getResult().getToken());
            }
        });

Kotlin

FirebaseInstanceId.getInstance().instanceId
        .addOnSuccessListener { result ->
            Log.d("IID_TOKEN", result.token)
        }

পরে

Swift

do {
  let id = try await Installations.installations().installationID()
  print("Installation ID: \(id)")
} catch {
  print("Error fetching id: \(error)")
}

Objective-C

[[FIRInstallations installations] installationIDWithCompletion:^(NSString *identifier, NSError *error) {
  if (error != nil) {
    NSLog(@"Error fetching Installation ID %@", error);
    return;
  }
  NSLog(@"Installation ID: %@", identifier);
}];

Java

FirebaseInstallations.getInstance().getId()
        .addOnCompleteListener(new OnCompleteListener<String>() {
    @Override
    public void onComplete(@NonNull Task<String> task) {
        if (task.isSuccessful()) {
            Log.d("Installations", "Installation ID: " + task.getResult());
        } else {
            Log.e("Installations", "Unable to get Installation ID");
        }
    }
});

Kotlin

FirebaseInstallations.getInstance().id.addOnCompleteListener { task ->
    if (task.isSuccessful) {
        Log.d("Installations", "Installation ID: " + task.result)
    } else {
        Log.e("Installations", "Unable to get Installation ID")
    }
}

শনাক্তকারী মুছে দেওয়া

ইনস্ট্যান্স আইডি মোছার পদ্ধতিগুলি Firebase ইনস্টলেশন আইডি মোছার পদ্ধতি দিয়ে প্রতিস্থাপন করা হয়েছে। যেমন:

আগে

Swift

InstanceID.instanceID().deleteID { error in
  if let error = error {
    print("Error deleting instance ID: \(error)")
  }
}

Objective-C

[FIRInstanceID instanceID] deleteIDWithHandler:^(NSError *error) {
  if error != nil {
    NSLog(@"Error deleting instance ID: %@", error);
  }
}];

Android

FirebaseInstanceId.deleteInstanceId();

পরে

Swift

func delete(completion: @escaping (Error?) -> Void)

Objective-C

- (void)deleteWithCompletion:(nonnull void (^)(NSError *_Nullable))completion;

Java

FirebaseInstallations.getInstance().delete()
        .addOnCompleteListener(new OnCompleteListener<Void>() {
    @Override
    public void onComplete(@NonNull Task<Void> task) {
        if (task.isSuccessful()) {
            Log.d("Installations", "Installation deleted");
        } else {
            Log.e("Installations", "Unable to delete Installation");
        }
    }
});

Kotlin

FirebaseInstallations.getInstance().delete().addOnCompleteListener { task ->
    if (task.isComplete) {
        Log.d("Installations", "Installation deleted")
    } else {
        Log.e("Installations", "Unable to delete Installation")
    }
}

FCM রেজিস্ট্রেশন টোকেন ফিরিয়ে আনা

Firebase ইনস্টলেশন চালু করার আগে, FCM ক্লায়েন্টরা ইনস্ট্যান্স আইডি থেকে রেজিস্ট্রেশন টোকেন সংগ্রহ করত। এখন, FCM SDK রেজিস্ট্রেশন টোকেন পাওয়ার পদ্ধতি প্রদান করে।

আগে

Java

FirebaseInstanceId.getInstance().getInstanceId()
        .addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
            @Override
            public void onComplete(@NonNull Task<InstanceIdResult> task) {
                if (!task.isSuccessful()) {
                    Log.w(TAG, "getInstanceId failed", task.getException());
                    return;
                }

                // Get new Instance ID token
                String token = task.getResult().getToken();

                // Log and toast
                String msg = getString(R.string.msg_token_fmt, token);
                Log.d(TAG, msg);
                Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
            }
        });

Kotlin

FirebaseInstanceId.getInstance().instanceId
        .addOnCompleteListener(OnCompleteListener { task ->
            if (!task.isSuccessful) {
                Log.w(TAG, "getInstanceId failed", task.exception)
                return@OnCompleteListener
            }

            // Get new Instance ID token
            val token = task.result?.token

            // Log and toast
            val msg = getString(R.string.msg_token_fmt, token)
            Log.d(TAG, msg)
            Toast.makeText(baseContext, msg, Toast.LENGTH_SHORT).show()
        })

Swift

InstanceID.instanceID().instanceID { result, error in
  if let error = error {
    print("Error fetching instance ID: \(error)")
  } else if let result = result {
    print("Instance ID token: \(result.token)")
  }
}

Objective-C

[[FIRInstanceID instanceID] instanceIDWithHandler:^(FIRInstanceIDResult * _Nullable result,
                                                    NSError * _Nullable error) {
  if (error != nil) {
    NSLog(@"Error fetching instance ID: %@", error);
  } else {
    NSLog(@"Instance ID token: %@", result.token);
  }
}];

পরে

Java

FirebaseMessaging.getInstance().getToken()
    .addOnCompleteListener(new OnCompleteListener<String>() {
        @Override
        public void onComplete(@NonNull Task<String> task) {
          if (!task.isSuccessful()) {
            Log.w(TAG, "Fetching FCM registration token failed", task.getException());
            return;
          }

          // Get new FCM registration token
          String token = task.getResult();

          // Log and toast
          String msg = getString(R.string.msg_token_fmt, token);
          Log.d(TAG, msg);
          Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
        }
    });

Kotlin

FirebaseMessaging.getInstance().token.addOnCompleteListener(OnCompleteListener { task ->
    if (!task.isSuccessful) {
        Log.w(TAG, "Fetching FCM registration token failed", task.exception)
        return@OnCompleteListener
    }

    // Get new FCM registration token
    val token = task.result

    // Log and toast
    val msg = getString(R.string.msg_token_fmt, token)
    Log.d(TAG, msg)
    Toast.makeText(baseContext, msg, Toast.LENGTH_SHORT).show()
})

Swift

Messaging.messaging().token { token, error in
  if let error = error {
    print("Error fetching remote FCM registration token: \(error)")
  } else if let token = token {
    print("Remote instance ID token: \(token)")
  }
}

Objective-C

[[FIRMessaging messaging] tokenWithCompletion:^(NSString * _Nullable token, NSError * _Nullable error) {
  if (error != nil) {
    NSLog(@"Error fetching the remote FCM registration token: %@", error);
  } else {
    NSLog(@"Remote FCM registration token: %@", token);
    NSString* message =
      [NSString stringWithFormat:@"FCM registration token: %@", token];
    // display message
    NSLog(@"%@", message);
  }
}];