Google is committed to advancing racial equity for Black communities. See how.
This page was translated by the Cloud Translation API.
Switch to English

আপনার পার্স আইওএস অ্যাপটি ফায়ারবেসে স্থানান্তর করুন

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

এই গাইডটিতে কীভাবে আপনার অ্যাপ্লিকেশনে নির্দিষ্ট পরিষেবাদি একীভূত করা যায় তা বর্ণনা করে। বেসিক ফায়ারবেস সেটআপ নির্দেশাবলীর জন্য, আইওএস সেটআপ গাইডটি দেখুন।

গুগল বিশ্লেষক

গুগল অ্যানালিটিক্স একটি নিখরচায় অ্যাপ্লিকেশন পরিমাপ সমাধান যা অ্যাপ্লিকেশন ব্যবহার এবং ব্যবহারকারীর ব্যস্ততার জন্য অন্তর্দৃষ্টি সরবরাহ করে। অ্যানালিটিক্স ফায়ারবেস বৈশিষ্ট্য জুড়ে একীভূত করে এবং ফায়ারবেস এসডিকে ব্যবহার করে আপনি সংজ্ঞা দিতে পারবেন এমন 500 টি পৃথক ইভেন্টের জন্য সীমাহীন প্রতিবেদন সরবরাহ করে।

আরও জানতে গুগল অ্যানালিটিক্স ডক্স দেখুন।

প্রস্তাবিত মাইগ্রেশন কৌশল

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

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

কোড তুলনা

বিশ্লেষণ বিশ্লেষণ

 // Start collecting data
[PFAnalytics trackAppOpenedWithLaunchOptions:launchOptions];

NSDictionary *dimensions = @{
  // Define ranges to bucket data points into meaningful segments
  @"priceRange": @"1000-1500",
  // Did the user filter the query?
  @"source": @"craigslist",
  // Do searches happen more often on weekdays or weekends?
  @"dayType": @"weekday"
};
// Send the dimensions to Parse along with the 'search' event
[PFAnalytics trackEvent:@"search" dimensions:dimensions];
 

গুগল বিশ্লেষক

 // Obtain the AppMeasurement instance and start collecting data
[FIRApp configure];

// Send the event with your params
[FIRAnalytics logEventWithName:@"search" parameters:@{
  // Define ranges to bucket data points into meaningful segments
  @"priceRange": @"1000-1500",
  // Did the user filter the query?
  @"source": @"craigslist",
  // Do searches happen more often on weekdays or weekends?
  @"dayType": @"weekday"
}];
 

ফায়ারবেস রিয়েলটাইম ডেটাবেস

ফায়ারবেস রিয়েলটাইম ডেটাবেস একটি NoSQL ক্লাউড-হোস্টেড ডাটাবেস database ডেটা জেএসএন হিসাবে সংরক্ষণ করা হয় এবং প্রতিটি সংযুক্ত ক্লায়েন্টের সাথে রিয়েল টাইমে সিঙ্ক্রোনাইজ হয়।

আরও জানতে ফায়ারবেস রিয়েলটাইম ডেটাবেস ডক্স দেখুন।

পার্স ডেটার সাথে পার্থক্য

অবজেক্টস

PFObject আপনি একটি PFObject বা PFObject একটি সাবক্লাস সংরক্ষণ করেন, এতে জেএসওএন-সামঞ্জস্যপূর্ণ ডেটার কী-মান জোড়া রয়েছে। ডেটাটি স্কিমহীন, যার অর্থ প্রতিটি PFObject কী কী বিদ্যমান তা নির্দিষ্ট করার দরকার নেই।

সমস্ত ফায়ারবেস রিয়েলটাইম ডেটাবেস ডেটা JSON অবজেক্ট হিসাবে সংরক্ষণ করা হয় এবং PFObject সমতুল্য নেই; আপনি কেবল প্রকারের JSON গাছের মানগুলিতে লিখুন যা উপলব্ধ জেএসওএন প্রকারের সাথে মিল রয়েছে।

আপনি কীভাবে কোনও গেমের জন্য উচ্চ স্কোরগুলি সংরক্ষণ করতে পারেন তার উদাহরণ নীচে দেওয়া হয়েছে।

ব্যকরণগত
 PFObject *gameScore = [PFObject objectWithClassName:@"GameScore"];
gameScore[@"score"] = @1337;
gameScore[@"playerName"] = @"Sean Plott";
gameScore[@"cheatMode"] = @NO;
[gameScore saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
  if (succeeded) {
    // The object has been saved.
  } else {
    // There was a problem, check error.description
  }
}];
 
Firebase
 // Create a reference to the database
FIRDatabaseReference *ref = [[FIRDatabase database] reference];
NSString *key = [[ref child:@"scores"] childByAutoId].key;
NSDictionary *score = @{@"score": @1337,
                        @"playerName": @"Sean Plott",
                        @"cheatMode": @NO};
[key setValue:score withCompletionBlock:^(NSError *error,  FIRDatabaseReference *ref) {
  if (error) {
    // The object has been saved.
  } else {
    // There was a problem, check error.description
  }
}];
 
আরও তথ্যের জন্য, আইওএস গাইডে ডেটা পড়ুন এবং লিখুন পরীক্ষা করে দেখুন।

ডেটা মধ্যে সম্পর্ক

একটি PFObject সাথে অন্য একটি PFObject সম্পর্ক থাকতে পারে: যে কোনও অবজেক্ট অন্য বস্তুকে মান হিসাবে ব্যবহার করতে পারে।

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

নীচে আপনি কীভাবে কোনও ব্লগিং অ্যাপ্লিকেশন এবং তাদের লেখকদের পোস্টের মধ্যে সম্পর্ক স্থাপন করতে পারেন তার একটি উদাহরণ রয়েছে।

ব্যকরণগত
 // Create the author
PFObject *myAuthor = [PFObject objectWithClassName:@"Author"];
myAuthor[@"name"] = @"Grace Hopper";
myAuthor[@"birthDate"] = @"December 9, 1906";
myAuthor[@"nickname"] = @"Amazing Grace";

// Create the post
PFObject *myPost = [PFObject objectWithClassName:@"Post"];
myPost[@"title"] = @"Announcing COBOL, a New Programming Language";

// Add a relation between the Post and the Author
myPost[@"parent"] = myAuthor;

// This will save both myAuthor and myPost
[myPost saveInBackground];
 
Firebase
 // Create a reference to the database
FIRDatabaseReference *ref = [[FIRDatabase database] reference];

// Create the author
NSString *myAuthorKey = @"ghopper";
NSDictionary *author = @{@"name": @"Grace Hopper",
                         @"birthDate": @"December 9, 1906",
                         @"nickname": @"Amazing Grace"};
// Save the author
[[ref child:myAuthorKey] setValue:author]

// Create and save the post
NSString *key = [[ref child:@"posts"] childByAutoId].key;
NSDictionary *post = @{@"author": myAuthorKey,
                       @"title": @"Announcing COBOL, a New Programming Language"};
[key setValue:post]
 

নিম্নলিখিত ডেটা বিন্যাস ফলাফল।

{
  // Info about the authors
  "authors": {
    "ghopper": {
      "name": "Grace Hopper",
      "date_of_birth": "December 9, 1906",
      "nickname": "Amazing Grace"
    },
    ...
  },
  // Info about the posts: the "author" fields contains the key for the author
  "posts": {
    "-JRHTHaIs-jNPLXOQivY": {
      "author": "ghopper",
      "title": "Announcing COBOL, a New Programming Language"
    }
    ...
  }
}
আরও বিশদের জন্য আপনার ডেটাবেস গাইডের কাঠামোটি চেক করুন।

তথ্য পড়া Data

পার্সে আপনি কোনও নির্দিষ্ট PFQuery অবজেক্টের আইডি ব্যবহার করে ডেটা পড়েন বা PFQuery ব্যবহার করে PFQuery

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

"অবজেক্টস" বিভাগে উপস্থাপিত উদাহরণের ভিত্তিতে আপনি কীভাবে কোনও নির্দিষ্ট খেলোয়াড়ের জন্য স্কোরগুলি পুনরুদ্ধার করতে পারেন তার উদাহরণ নীচে দেওয়া হয়েছে।

ব্যকরণগত
 PFQuery *query = [PFQuery queryWithClassName:@"GameScore"];
[query whereKey:@"playerName" equalTo:@"Dan Stemkoski"];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
  if (!error) {
    for (PFObject *score in objects) {
      NSString *gameScore = score[@"score"];
      NSLog(@"Retrieved: %@", gameScore);
    }
  } else {
    // Log details of the failure
    NSLog(@"Error: %@ %@", error, [error userInfo]);
  }
}];
 
Firebase
 // Create a reference to the database
FIRDatabaseReference *ref = [[FIRDatabase database] reference];

// This type of listener is not one time, and you need to cancel it to stop
// receiving updates.
[[[[ref child:@"scores"] queryOrderedByChild:@"playerName"] queryEqualToValue:@"Dan Stemkoski"]
    observeEventType:FIRDataEventTypeChildAdded withBlock:^(FIRDataSnapshot *snapshot) {
  // This will fire for each matching child node.
  NSDictionary *score = snapshot.value;
  NSString gameScore = score[@"score"];
  NSLog(@"Retrieved: %@", gameScore);
}];
 
উপলভ্য প্রকারের ইভেন্ট শ্রোতার উপর এবং কীভাবে ডেটা অর্ডার এবং ফিল্টার করবেন সে সম্পর্কে আরও তথ্যের জন্য, আইওএস গাইডে রিড এবং লিখিত ডেটা পরীক্ষা করুন check

প্রস্তাবিত মাইগ্রেশন কৌশল

আপনার ডেটা পুনর্বিবেচনা

ফায়ারবেস রিয়েলটাইম ডেটাবেস সমস্ত সংযুক্ত ক্লায়েন্ট জুড়ে মিলসেকেন্ডে ডেটা সিঙ্ক করতে অনুকূলিত হয়েছে, এবং ফলাফল ডেটা কাঠামো পার্স কোর ডেটার থেকে পৃথক। এর অর্থ হ'ল আপনার মাইগ্রেশনের প্রথম পদক্ষেপটি হ'ল আপনার ডেটাগুলির জন্য কী কী পরিবর্তন প্রয়োজন তা বিবেচনা করা:

  • আপনার পার্স বস্তুগুলি ফায়ারবেস ডেটাতে কীভাবে মানচিত্র তৈরি করবে
  • যদি আপনার পিতামাতার-সন্তানের সম্পর্ক থাকে তবে কীভাবে আপনার ডেটাটিকে বিভিন্ন পাথের মধ্যে বিভক্ত করবেন যাতে এটি আলাদা আলাদা কলগুলিতে দক্ষতার সাথে ডাউনলোড করা যায়।

আপনার ডেটা স্থানান্তর করুন

ফায়ারবেসে আপনার ডেটা কীভাবে গঠন করবেন তা স্থির করার পরে, আপনার অ্যাপ্লিকেশনটিকে উভয় ডাটাবেসে লিখতে হবে এমন সময়কালে কীভাবে পরিচালনা করবেন তা আপনার পরিকল্পনা করা উচিত। আপনার পছন্দগুলি হ'ল:

পটভূমি সিঙ্ক

এই দৃশ্যে আপনার কাছে অ্যাপটির দুটি সংস্করণ রয়েছে: পার্স ব্যবহার করা পুরানো সংস্করণ এবং ফায়ারবেস ব্যবহার করা একটি নতুন সংস্করণ। দুটি ডাটাবেসের মধ্যে সিঙ্কগুলি পার্স ক্লাউড কোড (পার্সে ফায়ারবেস) দ্বারা পরিচালিত হয়, আপনার কোডটি ফায়ারবেসে পরিবর্তনগুলি শোনার সাথে এবং পার্সের সাথে এই পরিবর্তনগুলি সিঙ্ক করে। নতুন সংস্করণ ব্যবহার শুরু করার আগে আপনার অবশ্যই:

  • আপনার বিদ্যমান পার্স ডেটাটিকে নতুন ফায়ারবেস স্ট্রাকচারে রূপান্তর করুন এবং এটি ফায়ারবেস রিয়েলটাইম ডেটাবেজে লিখুন।
  • পার্স ক্লাউড কোড ফাংশনগুলি লিখুন যা পুরাতন ক্লায়েন্টদের দ্বারা পার্স ডেটাতে করা ফায়ারবেস রিয়েলটাইম ডেটাবেস পরিবর্তনগুলিতে লিখতে ফায়ারবেস রিয়েলটাইম ডেটাবেস লিখতে ফায়ারবেস আরএসটি এপিআই ব্যবহার করে।
  • ফায়ারবেসে পরিবর্তনগুলি শুনুন এবং পার্স ডেটাবেসে সিঙ্ক করে এমন কোডটি লিখুন এবং স্থাপন করুন।

এই দৃশ্যটি পুরানো এবং নতুন কোডের পরিষ্কার বিচ্ছিন্নতা নিশ্চিত করে এবং ক্লায়েন্টকে সহজ রাখে। এই দৃশ্যের চ্যালেঞ্জগুলি প্রাথমিক রফতানিতে বড় ডেটাসেটগুলি পরিচালনা করছে এবং দ্বি-নির্দেশমূলক সিঙ্কটি অসীম পুনরাবৃত্তি ঘটায় না তা নিশ্চিত করে।

ডাবল লিখুন

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

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

ফায়ারবেস প্রমাণীকরণ

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

আরও জানতে ফায়ারবেস প্রমাণীকরণ ডক্স দেখুন।

পার্স আথের সাথে পার্থক্য

PFUser নামে একটি বিশেষজ্ঞ ব্যবহারকারী শ্রেণীর সরবরাহ করা হয়েছে যা ব্যবহারকারী অ্যাকাউন্ট পরিচালনার জন্য প্রয়োজনীয় কার্যকারিতাটি স্বয়ংক্রিয়ভাবে পরিচালনা করে। PFUser একটি উপশ্রেণী হয় PFObject , যার মানে ব্যবহারকারী ডেটা বিশ্লেষণ ডেটা পাওয়া যায় এবং অন্য কোন মত অতিরিক্ত ক্ষেত্রের সাথে বাড়ানো যেতে পারে PFObject

FIRUser বুনিয়াদি বৈশিষ্ট্যের একটি নির্দিষ্ট সেট রয়েছে — একটি অনন্য আইডি, একটি প্রাথমিক ইমেল ঠিকানা, একটি নাম এবং একটি ফটো ইউআরএল - পৃথক প্রকল্পের ব্যবহারকারী ডাটাবেসে সঞ্চিত; এই বৈশিষ্ট্যগুলি ব্যবহারকারী আপডেট করতে পারে। আপনি সরাসরি FIRUser অবজেক্টে অন্যান্য সম্পত্তি যুক্ত করতে পারবেন না; পরিবর্তে, আপনি আপনার ফায়ারবেস রিয়েলটাইম ডেটাবেসগুলিতে অতিরিক্ত সম্পত্তি সঞ্চয় করতে পারেন।

আপনি কীভাবে কোনও ব্যবহারকারীকে সাইন আপ করতে এবং একটি অতিরিক্ত ফোন নম্বর ক্ষেত্র যুক্ত করতে পারেন তার উদাহরণ নীচে দেওয়া হয়েছে।

ব্যকরণগত
 PFUser *user = [PFUser user];
user.username = @"my name";
user.password = @"my pass";
user.email = @"email@example.com";

// other fields can be set just like with PFObject
user[@"phone"] = @"415-392-0202";

[user signUpInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
  if (!error) {
    // Hooray! Let them use the app now.
  } else {
    // Something went wrong
    NSString *errorString = [error userInfo][@"error"];
  }
}];
 
Firebase
 [[FIRAuth auth] createUserWithEmail:@"email@example.com"
                           password:@"my pass"
                         completion:^(FIRUser *_Nullable user, NSError *_Nullable error) {
  if (!error) {
    FIRDatabaseReference *ref = [[FIRDatabase database] reference];
    [[[[ref child:@"users"] child:user.uid] child:@"phone"] setValue:@"415-392-0202"
  } else {
    // Something went wrong
    NSString *errorString = [error userInfo][@"error"];
  }
}];
 

প্রস্তাবিত মাইগ্রেশন কৌশল

অ্যাকাউন্টগুলি মাইগ্রেট করুন

পার্স থেকে ফায়ারবেসে ব্যবহারকারী অ্যাকাউন্টগুলি স্থানান্তর করতে, আপনার ব্যবহারকারী ডাটাবেসটিকে একটি জেএসএন বা সিএসভি ফাইলে রফতানি করুন, তারপরে ফায়ারবেস সিএলআইয়ের লেখক auth:import কমান্ড ব্যবহার করে আপনার ফায়ারবেস প্রকল্পে ফাইলটি আমদানি করুন।

প্রথমে পার্স কনসোল বা আপনার স্ব-হোস্টেড ডাটাবেস থেকে আপনার ব্যবহারকারীর ডাটাবেস রফতানি করুন। উদাহরণস্বরূপ, পার্স কনসোল থেকে রফতানি হওয়া একটি জেএসওএন ফাইল নিম্নলিখিতগুলির মতো দেখতে পারে:

{ // Username/password user
  "bcryptPassword": "$2a$10$OBp2hxB7TaYZgKyTiY48luawlTuYAU6BqzxJfpHoJMdZmjaF4HFh6",
  "email": "user@example.com",
  "username": "testuser",
  "objectId": "abcde1234",
  ...
},
{ // Facebook user
  "authData": {
    "facebook": {
      "access_token": "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
      "expiration_date": "2017-01-02T03:04:05.006Z",
      "id": "1000000000"
    }
  },
  "username": "wXyZ987654321StUv",
  "objectId": "fghij5678",
  ...
}

তারপরে, রফতানি হওয়া ফাইলটিকে ফায়ারবেস সিএলআই দ্বারা প্রয়োজনীয় ফর্ম্যাটে রূপান্তর করুন। ব্যবহার করুন objectId হিসাবে আপনার ব্যকরণগত ব্যবহারকারীদের localId আপনার Firebase ব্যবহারকারীদের। এছাড়াও, বেস 64 bcryptPassword থেকে bcryptPassword মানগুলিকে এনকোড করে passwordHash ক্ষেত্রে ব্যবহার করুন। উদাহরণ স্বরূপ:

{
  "users": [
    {
      "localId": "abcde1234",  // Parse objectId
      "email": "user@example.com",
      "displayName": "testuser",
      "passwordHash": "JDJhJDEwJE9CcDJoeEI3VGFZWmdLeVRpWTQ4bHVhd2xUdVlBVTZCcXp4SmZwSG9KTWRabWphRjRIRmg2",
    },
    {
      "localId": "fghij5678",  // Parse objectId
      "displayName": "wXyZ987654321StUv",
      "providerUserInfo": [
        {
          "providerId": "facebook.com",
          "rawId": "1000000000",  // Facebook ID
        }
      ]
    }
  ]
}

অবশেষে, রূপান্তরিত ফাইলটি ফায়ারবেস সিএলআই দিয়ে আমদানি করুন, বিসিক্রিপকে হ্যাশ অ্যালগরিদম হিসাবে উল্লেখ করে:

firebase auth:import account_file.json --hash-algo=BCRYPT

ব্যবহারকারী ডেটা স্থানান্তর করুন

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

ফায়ারবেস ক্লাউড মেসেজিং

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

আরও জানতে ফায়ারবেস ক্লাউড মেসেজিং ডক্স দেখুন।

পার্স পুশ বিজ্ঞপ্তিগুলির সাথে পার্থক্য

বিজ্ঞপ্তিগুলির জন্য নিবন্ধিত একটি ডিভাইসে ইনস্টল হওয়া প্রতিটি পার্স অ্যাপ্লিকেশনটির একটি সম্পর্কিত Installation বস্তু রয়েছে, যেখানে আপনি বিজ্ঞপ্তিগুলি লক্ষ্য করার জন্য প্রয়োজনীয় সমস্ত ডেটা সঞ্চয় করেন। Installation হল PFUser একটি সাবক্লাস, যার অর্থ আপনি আপনার Installation দৃষ্টান্তে আপনি যে কোনও অতিরিক্ত ডেটা যুক্ত করতে পারেন।

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

প্রস্তাবিত মাইগ্রেশন কৌশল

ডিভাইস টোকেনগুলি স্থানান্তরিত হচ্ছে

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

চ্যানেলগুলিকে এফসিএম বিষয়গুলিতে স্থানান্তরিত করা হচ্ছে

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

উদাহরণস্বরূপ, যদি আপনার ব্যবহারকারী "দৈত্য" বিষয়টিতে সাবস্ক্রাইব হয় তবে আপনি এমন কিছু করতে পারেন:

 PFInstallation *currentInstallation = [PFInstallation currentInstallation];
[currentInstallation removeObject:@"Giants" forKey:@"channels"];
[currentInstallation saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
  if (succedeed) {
    [[FIRMessaging messaging] subscribeToTopic:@"/topics/Giants"];
  } else {
    // Something went wrong unsubscribing
  }
}];
 

এই কৌশলটি ব্যবহার করে, আপনি পার্সি চ্যানেল এবং সম্পর্কিত FCM বিষয় উভয়কেই পুরানো এবং নতুন সংস্করণ উভয়ের ব্যবহারকারীদের সমর্থন করে বার্তা পাঠাতে পারেন। পর্যাপ্ত ব্যবহারকারীরা কেবলমাত্র অ্যাপ্লিকেশানের পার্স-একমাত্র সংস্করণ থেকে স্থানান্তরিত হয়ে গেলে, আপনি সেই সংস্করণটি সূর্যাস্ত করতে পারেন এবং কেবলমাত্র এফসিএম ব্যবহার করে প্রেরণ শুরু করতে পারেন।

আরও জানতে FCM বিষয়গুলির ডক্স দেখুন।

ফায়ারবেস রিমোট কনফিগার

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

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

ফায়ারবেস রিমোট কনফিগারেশন সম্পর্কে আরও জানতে, রিমোট কনফিগারেশন পরিচিতি দেখুন

পার্স কনফিগারেশনের সাথে পার্থক্য

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

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

প্রস্তাবিত মাইগ্রেশন কৌশল

ফায়ারবেস কনসোলে আপনার পার্সে কনফিগারারের কী / মান জোড়গুলি অনুলিপি করে ফায়ারবেস রিমোট কনফিগার ব্যবহার করে এমন অ্যাপ্লিকেশনটির নতুন সংস্করণ স্থাপন করে আপনি ফায়ারবেস রিমোট কনফিগার করতে যেতে পারেন।

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

কোড তুলনা

ব্যকরণগত

 [PFConfig getConfigInBackgroundWithBlock:^(PFConfig *config, NSError *error) {
  if (!error) {
    NSLog(@"Yay! Config was fetched from the server.");
  } else {
    NSLog(@"Failed to fetch. Using Cached Config.");
    config = [PFConfig currentConfig];
  }

  NSString *welcomeMessage = config[@"welcomeMessage"];
  if (!welcomeMessage) {
    NSLog(@"Falling back to default message.");
    welcomeMessage = @"Welcome!";
  }
}];
 

Firebase

 FIRRemoteConfig remoteConfig = [FIRRemoteConfig remoteConfig];
// Set defaults from a plist file
[remoteConfig setDefaultsFromPlistFileName:@"RemoteConfigDefaults"];

[remoteConfig fetchWithCompletionHandler:^(FIRRemoteConfigFetchStatus status, NSError *error) {
  if (status == FIRRemoteConfigFetchStatusSuccess) {
    NSLog(@"Yay! Config was fetched from the server.");
    // Once the config is successfully fetched it must be activated before newly fetched
    // values are returned.
    [self.remoteConfig activateFetched];
  } else {
    NSLog(@"Failed to fetch. Using last fetched or default.");
  }
}];

// ...

// When this is called, the value of the latest fetched and activated config is returned;
// if there's none, the default value is returned.
NSString welcomeMessage = remoteConfig[@"welcomeMessage"].stringValue;