गेम सेंटर का उपयोग करके प्रमाणित करें

आप फ़ायरबेस पर निर्मित Apple प्लेटफ़ॉर्म गेम में खिलाड़ियों को साइन इन करने के लिए गेम सेंटर का उपयोग कर सकते हैं। फायरबेस के साथ गेम सेंटर साइन-इन का उपयोग करने के लिए, पहले सुनिश्चित करें कि स्थानीय खिलाड़ी गेम सेंटर के साथ साइन इन है, और फिर फायरबेस क्रेडेंशियल उत्पन्न करने के लिए GameCenterAuthProvider ऑब्जेक्ट का उपयोग करें, जिसका उपयोग आप फायरबेस के साथ प्रमाणित करने के लिए कर सकते हैं।

शुरू करने से पहले

फायरबेस निर्भरता को स्थापित और प्रबंधित करने के लिए स्विफ्ट पैकेज मैनेजर का उपयोग करें।

  1. Xcode में, अपना ऐप प्रोजेक्ट खुला होने पर, फ़ाइल > पैकेज जोड़ें पर नेविगेट करें।
  2. संकेत मिलने पर, Firebase Apple प्लेटफ़ॉर्म SDK रिपॉजिटरी जोड़ें:
  3.   https://github.com/firebase/firebase-ios-sdk.git
  4. फायरबेस प्रमाणीकरण लाइब्रेरी चुनें।
  5. अपने लक्ष्य की बिल्ड सेटिंग्स के अन्य लिंकर फ़्लैग अनुभाग में -ObjC फ़्लैग जोड़ें।
  6. समाप्त होने पर, Xcode स्वचालित रूप से पृष्ठभूमि में आपकी निर्भरता को हल करना और डाउनलोड करना शुरू कर देगा।

इसके बाद, कुछ कॉन्फ़िगरेशन चरण निष्पादित करें:

  1. सुनिश्चित करें कि आपने अपने Apple ऐप को Firebase के साथ पंजीकृत किया है। इसका मतलब है कि अतिरिक्त वैकल्पिक जानकारी जैसे ऐप स्टोर आईडी और टीम आईडी आदि के साथ पंजीकरण अनुभाग में अपने ऐप की बंडल आईडी दर्ज करना। साइन-इन पूरा करने से पहले उपयोगकर्ता के गेम सेंटर क्रेडेंशियल के दर्शकों को सुरक्षित रूप से सत्यापित करने के लिए यह आवश्यक होगा।
  2. अपने फायरबेस प्रोजेक्ट के लिए साइन-इन प्रदाता के रूप में गेम सेंटर को सक्षम करें:
    1. फायरबेस कंसोल में, प्रमाणीकरण अनुभाग खोलें।
    2. साइन इन विधि टैब पर, गेम सेंटर साइन-इन प्रदाता को सक्षम करें।

गेम सेंटर साइन-इन को अपने गेम में एकीकृत करें

सबसे पहले, यदि आपका गेम पहले से ही गेम सेंटर का उपयोग नहीं करता है, तो ऐप्पल डेवलपर साइट पर अपने गेम में गेम सेंटर को शामिल करने और डिवाइस पर एक स्थानीय प्लेयर को प्रमाणित करने के निर्देशों का पालन करें।

सुनिश्चित करें कि आईट्यून्स कनेक्ट को आपके द्वारा प्रदान की गई बंडल आईडी उस बंडल आईडी से मेल खाती है जिसका उपयोग आपने अपने ऐप को अपने फायरबेस प्रोजेक्ट से कनेक्ट करते समय किया था।

आपके गेम सेंटर एकीकरण के भाग के रूप में, आप एक प्रमाणीकरण हैंडलर को परिभाषित करते हैं जिसे गेम सेंटर प्रमाणीकरण प्रक्रिया में कई बिंदुओं पर बुलाया जाता है। इस हैंडलर में, जांचें कि खिलाड़ी गेम सेंटर के साथ साइन इन है या नहीं। यदि हां, तो आप फायरबेस में साइन इन करना जारी रख सकते हैं।

तीव्र

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 ऑब्जेक्ट से उपयोगकर्ता का फायरबेस यूआईडी प्राप्त कर सकते हैं:

तीव्र

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

अपने फायरबेस रीयलटाइम डेटाबेस और क्लाउड स्टोरेज सुरक्षा नियमों में, आप साइन-इन किए गए उपयोगकर्ता की अद्वितीय उपयोगकर्ता आईडी को auth वेरिएबल से प्राप्त कर सकते हैं, और इसका उपयोग यह नियंत्रित करने के लिए कर सकते हैं कि उपयोगकर्ता किस डेटा तक पहुंच सकता है।

उपयोगकर्ता की गेम सेंटर प्लेयर जानकारी प्राप्त करने या गेम सेंटर सेवाओं तक पहुंचने के लिए, गेम किट द्वारा प्रदान की गई एपीआई का उपयोग करें।

किसी उपयोगकर्ता को फ़ायरबेस से साइन आउट करने के लिए, 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;
}