গেম সেন্টার ব্যবহার করে প্রমাণীকরণ করুন

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

শুরু করার আগে

ফায়ারবেস ডিপেন্ডেন্সিগুলো ইনস্টল ও পরিচালনা করতে সুইফট প্যাকেজ ম্যানেজার ব্যবহার করুন।

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

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

  1. আপনার Apple অ্যাপটি Firebase-এ রেজিস্টার করা নিশ্চিত করুন। এর জন্য রেজিস্ট্রেশন সেকশনে আপনার অ্যাপের বান্ডেল আইডি-র সাথে অ্যাপ স্টোর আইডি এবং টিম আইডি ইত্যাদির মতো অতিরিক্ত ঐচ্ছিক তথ্যও প্রবেশ করাতে হবে। সাইন-ইন সম্পন্ন করার আগে ব্যবহারকারীর গেম সেন্টার ক্রেডেনশিয়ালের অডিয়েন্স নিরাপদে যাচাই করার জন্য এটি প্রয়োজন হবে।
  2. আপনার Firebase প্রোজেক্টের জন্য গেম সেন্টারকে সাইন-ইন প্রদানকারী হিসেবে সক্রিয় করুন:
    1. Firebase কনসোলে , Authentication সেকশনটি খুলুন।
    2. সাইন ইন পদ্ধতি ট্যাবে, গেম সেন্টার সাইন-ইন প্রদানকারীকে সক্রিয় করুন।

আপনার গেমে গেম সেন্টার সাইন-ইন একীভূত করুন

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

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

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

সুইফট

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
  }
}

উদ্দেশ্য-সি

__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
  }
};

ফায়ারবেস দিয়ে প্রমাণীকরণ করুন

স্থানীয় প্লেয়ার যে গেম সেন্টারের মাধ্যমে সাইন ইন করেছে, তা নিশ্চিত করার পর, GameCenterAuthProvider.getCredential() ব্যবহার করে একটি AuthCredential অবজেক্ট তৈরি করুন এবং সেই অবজেক্টটি signIn(with:) -এ পাস করে প্লেয়ারকে আপনার গেমে সাইন ইন করান।

সুইফট

// 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!
  }

উদ্দেশ্য-সি

// 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.
    }];
  }
}];

পরবর্তী পদক্ষেপ

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

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

সুইফট

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
}

উদ্দেশ্য-সি

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 and Cloud Storage Security Rules-এ, আপনি auth ভেরিয়েবল থেকে সাইন-ইন করা ব্যবহারকারীর অনন্য ইউজার আইডি পেতে পারেন এবং এটি ব্যবহার করে একজন ব্যবহারকারী কোন ডেটা অ্যাক্সেস করতে পারবে তা নিয়ন্ত্রণ করতে পারেন।

কোনো ব্যবহারকারীর গেম সেন্টার প্লেয়ারের তথ্য পেতে বা গেম সেন্টার পরিষেবাগুলো অ্যাক্সেস করতে, গেম কিট (Game Kit) দ্বারা প্রদত্ত এপিআই (API) ব্যবহার করুন।

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

সুইফট

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

উদ্দেশ্য-সি

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