Game Center ব্যবহার করে যাচাইকরণ করা

Firebase-এ তৈরি Apple প্ল্যাটফর্মের গেমে প্লেয়ারদের সাইন-ইন করার জন্য আপনি Game Center ব্যবহার করতে পারবেন। Firebase-এর সাথে Game Center সাইন-ইন ব্যবহার করতে, প্রথমে নিশ্চিত করুন যে লোকাল প্লেয়ার Game Center-এ সাইন-ইন করেছেন, তারপরে Firebase ক্রেডেনশিয়াল জেনারেট করতে GameCenterAuthProvider অবজেক্ট ব্যবহার করুন, যা আপনি Firebase-এর সাথে যাচাই করার জন্য ব্যবহার করতে পারবেন।

শুরু করার আগে

Firebase ডিপেন্ডেন্সি ইনস্টল ও ম্যানেজ করতে Swift Package Manager ব্যবহার করুন।

  1. Xcode-এ, আপনার অ্যাপ প্রোজেক্ট খোলা থাকা অবস্থায়, ফাইল > প্যাকেজ যোগ করুন বিকল্পে নেভিগেট করুন।
  2. প্রম্পট করা হলে, Firebase Apple প্ল্যাটফর্ম SDK রিপোজিটরি যোগ করুন:
  3.   https://github.com/firebase/firebase-ios-sdk.git
  4. Firebase Authentication লাইব্রেরি বেছে নিন।
  5. আপনার টার্গেটের বিল্ড সেটিংসের অন্যান্য লিঙ্কার ফ্ল্যাগ বিভাগে -ObjC ফ্ল্যাগ যোগ করুন।
  6. এটি সম্পূর্ণ হয়ে গেলে, Xcode অটোমেটিক আপনার ডিপেন্ডেন্সি ব্যাকগ্রাউন্ডে সমাধান ও ডাউনলোড করা শুরু করবে।

এরপরে, কিছু কনফিগারেশন ধাপ সম্পূর্ণ করুন:

  1. Firebase-এ আপনার Apple অ্যাপ রেজিস্টার করেছেন কিনা তা নিশ্চিত করুন। এর অর্থ হল, সাইন-ইন সম্পূর্ণ করার আগে ব্যবহারকারীর Game Center ক্রেডেনশিয়ালের অডিয়েন্স নিরাপদে যাচাই করার জন্য, রেজিস্ট্রেশন বিভাগে আপনার অ্যাপের বান্ডেল আইডির সাথে App Store ID এবং Team ID-এর মতো অতিরিক্ত ঐচ্ছিক তথ্য লিখতে হবে।
  2. আপনার Firebase প্রোজেক্টের জন্য সাইন-ইন পরিষেবা প্রদানকারী হিসেবে Game Center চালু করুন:
    1. Firebase কনসোলে গিয়ে নিরাপত্তা > যাচাইকরণ বিকল্পে যান।
    2. সাইন-ইন পদ্ধতি ট্যাবে, Game Center সাইন-ইন প্রদানকারী চালু করুন।

আপনার গেমে Game Center সাইন-ইন ইন্টিগ্রেট করা

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

আপনি iTunes Connect-এ যে বান্ডেল আইডি দিয়েছেন সেটি আপনার Firebase প্রোজেক্টের সাথে অ্যাপ কানেক্ট করার সময় ব্যবহার করা বান্ডেল আইডির সাথে মিলছে কিনা তা নিশ্চিত করুন।

আপনার Game Center ইন্টিগ্রেশনের অংশ হিসেবে, আপনি একটি যাচাইকরণ হ্যান্ডলার নির্ধারণ করেন যা Game Center যাচাইকরণ প্রসেসের একাধিক পয়েন্টে কল করা হয়। এই হ্যান্ডলারে, প্লেয়ার Game Center-এ সাইন-ইন করেছেন কিনা তা চেক করুন। যদি তাই হয়, তাহলে আপনি Firebase-এ সাইন-ইন করা চালিয়ে যেতে পারবেন।

Swift

let localPlayer = GKLocalPlayer.localPlayer()
localPlayer.authenticateHandler = { (gcAuthViewController?, error) in
  if let gcAuthViewController = gcAuthViewController {
    // Pause any activities that require user interaction, then present the
    // gcAuthViewController to the player.
  } else if localPlayer.isAuthenticated {
    // Player is signed in to Game Center. Get Firebase credentials from the
    // player's Game Center credentials (see below).
  } else {
    // Error
  }
}

Objective-C

__weak GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];
localPlayer.authenticateHandler = ^(UIViewController *gcAuthViewController,
                                    NSError *error) {
  if (gcAuthViewController != nil) {
    // Pause any activities that require user interaction, then present the
    // gcAuthViewController to the player.
  } else if (localPlayer.isAuthenticated) {
    // Player is signed in to Game Center. Get Firebase credentials from the
    // player's Game Center credentials (see below).
  } else {
    // Error
  }
};

Firebase-এর মাধ্যমে যাচাইকরণ

আপনি যদি দেখেন যে লোকাল প্লেয়ার Game Center-এ সাইন-ইন করেছেন, তাহলে GameCenterAuthProvider.getCredential()-এর মাধ্যমে একটি AuthCredential অবজেক্ট তৈরি করে signIn(with:)-এ সেই অবজেক্টটি পাস করার মাধ্যমে আপনার গেমে প্লেয়ারকে সাইন-ইন করান:

Swift

// Get Firebase credentials from the player's Game Center credentials
GameCenterAuthProvider.getCredential() { (credential, error) in
  if let error = error {
    return
  }
  // The credential can be used to sign in, or re-auth, or link or unlink.
  Auth.auth().signIn(with:credential) { (user, error) in
    if let error = error {
      return
    }
    // Player is signed in!
  }

Objective-C

// Get Firebase credentials from the player's Game Center credentials
[FIRGameCenterAuthProvider getCredentialWithCompletion:^(FIRAuthCredential *credential,
                                                         NSError *error) {
  // The credential can be used to sign in, or re-auth, or link or unlink.
  if (error == nil) {
    [[FIRAuth auth] signInWithCredential:credential
                              completion:^(FIRUser *user, NSError *error) {
      // If error is nil, player is signed in.
    }];
  }
}];

পরবর্তী ধাপ

কোনও ব্যবহারকারী প্রথমবার সাইন-ইন করার পরে, একটি নতুন ব্যবহারকারীর অ্যাকাউন্ট তৈরি করা হয় এবং সেটি তার Game Center আইডির সাথে লিঙ্ক করা হয়। এই নতুন অ্যাকাউন্টটি আপনার Firebase প্রোজেক্টের অংশ হিসেবে স্টোর করা হয় এবং আপনার প্রোজেক্টের প্রতিটি অ্যাপ জুড়ে কোনও ব্যবহারকারীকে শনাক্ত করতে এটি ব্যবহার করা যেতে পারে।

আপনার গেমে, User অবজেক্ট থেকে ব্যবহারকারীর Firebase UID পেতে পারেন:

Swift

let user = Auth.auth().currentUser
if let user = user {
  let playerName = user.displayName

  // The user's ID, unique to the Firebase project.
  // Do NOT use this value to authenticate with your backend server,
  // if you have one. Use getToken(with:) instead.
  let uid = user.uid
}

Objective-C

FIRUser *user = [FIRAuth auth].currentUser;
if (user) {
  NSString *playerName = user.displayName;

  // The user's ID, unique to the Firebase project.
  // Do NOT use this value to authenticate with your backend server,
  // if you have one. Use getTokenWithCompletion:completion: instead.
  NSString *uid = user.uid;
}

আপনার Firebase Realtime Database এবং Cloud Storage Security Rules-এ, আপনি auth ভেরিয়েবল থেকে সাইন-ইন করা ব্যবহারকারীর অনন্য ব্যবহারকারী আইডি পেতে এবং কোন ডেটা ব্যবহারকারী অ্যাক্সেস করতে পারবেন তা নিয়ন্ত্রণ করতে এটি ব্যবহার করতে পারবেন।

কোনও ব্যবহারকারীর Game Center প্লেয়ার সংক্রান্ত তথ্য পেতে অথবা Game Center পরিষেবা অ্যাক্সেস করতে, Game Kit-এর দেওয়া API ব্যবহার করুন।

Firebase থেকে কোনও ব্যবহারকারীকে সাইন-আউট করতে, Auth.signOut()-এ কল করুন:

Swift

let firebaseAuth = Auth.auth()
do {
  try firebaseAuth.signOut()
} catch let signOutError as NSError {
  print ("Error signing out: %@", signOutError)
}

Objective-C

NSError *signOutError;
BOOL status = [[FIRAuth auth] signOut:&signOutError];
if (!status) {
  NSLog(@"Error signing out: %@", signOutError);
  return;
}