Firebase'de oluşturulan bir Apple platformu oyununda oyuncuların oturum açması için Game Center'ı kullanabilirsiniz. Game Center Sign In'i Firebase ile kullanmak için önce yerel oyuncunun Game Center ile oturum açtığından emin olun ve ardından GameCenterAuthProvider
nesnesini kullanarak Firebase ile kimlik doğrulama yapmak için kullanabileceğiniz bir Firebase kimlik bilgisi oluşturun.
Başlamadan önce
Firebase bağımlılarını yüklemek ve yönetmek için Swift Package Manager'ı kullanın.
Firebase SDK'larını Apple projenize eklemenin farklı yolları (ör. doğrudan çerçeveleri içe aktarma ve CocoaPods kullanma) hakkında bilgi edinmek için- Xcode'da, uygulamanız açıkken Dosya > Paket Ekle'ye gidin.
- İstendiğinde Firebase Apple platformları SDK deposunu ekleyin:
- Firebase Authentication kitaplığını seçin.
-ObjC
işaretini, hedefinizin derleme ayarlarının Diğer Bağlantı Oluşturucu İşaretleri bölümüne ekleyin.- İşlem tamamlandığında Xcode, arka planda bağımlılarınızı otomatik olarak çözümlemeye ve indirmeye başlar.
https://github.com/firebase/firebase-ios-sdk.git
Ardından, bazı yapılandırma adımlarını uygulayın:
- Apple uygulamanızı Firebase'e kaydettiğinizden emin olun. Bu, kayıt bölümüne uygulamanızın paket kimliğini, App Store kimliği ve ekip kimliği gibi ek isteğe bağlı bilgilerle birlikte girmeniz gerektiği anlamına gelir. Bu, oturum açma işlemi tamamlanmadan önce kullanıcının Game Center kimlik bilgilerinin kitlesini güvenli bir şekilde doğrulamak için gereklidir.
- Firebase projeniz için oturum açma sağlayıcısı olarak Game Center'ı etkinleştirin:
- Firebase konsolunda Kimlik Doğrulama bölümünü açın.
- Oturum açma yöntemi sekmesinde Game Center oturum açma sağlayıcısını etkinleştirin.
Game Center ile oturum açma özelliğini oyununuza entegre etme
Öncelikle, oyununuzda Game Center kullanılmıyorsa Apple geliştirici sitesindeki Game Center'ı Oyununuza Dahil Etme ve Cihazdaki Yerel Oyuncunun Kimliğini Doğrulama başlıklı makalelerdeki talimatları uygulayın.
iTunes Connect'e sağladığınız paket kimliğinin, uygulamanızı Firebase projenize bağlarken kullandığınız paket kimliğiyle eşleştiğinden emin olun.
Game Center entegrasyonunuzun bir parçası olarak, Game Center kimlik doğrulama sürecinde birden fazla noktada çağrılan bir kimlik doğrulama işleyicisi tanımlarsınız. Bu işleyicide, oyuncunun Game Center ile oturum açıp açmadığını kontrol edin. Bu durumda, Firebase'de oturum açmaya devam edebilirsiniz.
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 ile kimlik doğrulama
Yerel oyuncunun Game Center ile oturum açtığını belirledikten sonra, GameCenterAuthProvider.getCredential()
ile bir AuthCredential
nesnesi oluşturup bu nesneyi signIn(with:)
'ye aktararak oyuncunun oyununuzda oturum açmasını sağlayın:
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. }]; } }];
Sonraki adımlar
Kullanıcı ilk kez oturum açtığında yeni bir kullanıcı hesabı oluşturulur ve Game Center kimliğine bağlanır. Bu yeni hesap, Firebase projenizin bir parçası olarak depolanır ve projenizdeki her uygulamada bir kullanıcıyı tanımlamak için kullanılabilir.
Oyununuzda, kullanıcının Firebase UID'sini User
nesnesinden alabilirsiniz:
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 ve Cloud Storage Güvenlik Kurallarınızda, oturum açmış kullanıcının benzersiz kullanıcı kimliğini auth
değişkeninden alabilir ve kullanıcının hangi verilere erişebileceğini kontrol etmek için kullanabilirsiniz.
Kullanıcının Game Center oyuncu bilgilerini almak veya Game Center hizmetlerine erişmek için Game Kit tarafından sağlanan API'leri kullanın.
Bir kullanıcının Firebase oturumunu kapatmak için Auth.signOut()
işlevini çağırın:
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; }