Anda dapat menggunakan Game Center untuk memproses login pemain ke game platform Apple yang di-build di Firebase. Untuk menggunakan Login Game Center dengan Firebase, pertama-tama pastikan bahwa pemain lokal login dengan Game Center, lalu gunakan objek GameCenterAuthProvider
untuk menghasilkan kredensial Firebase, yang dapat Anda gunakan untuk melakukan autentikasi dengan Firebase.
Sebelum memulai
Gunakan Swift Package Manager untuk menginstal dan mengelola dependensi Firebase.
- Di Xcode, dengan project aplikasi Anda dalam keadaan terbuka, buka File > Add Packages.
- Saat diminta, tambahkan repositori SDK platform Apple Firebase:
- Pilih library Firebase Authentication.
- Tambahkan flag
-ObjC
ke bagian Other Linker Flags pada setelan build target Anda. - Setelah selesai, Xcode akan otomatis mulai me-resolve dan mendownload dependensi Anda di latar belakang.
https://github.com/firebase/firebase-ios-sdk.git
Selanjutnya, lakukan beberapa langkah konfigurasi:
- Pastikan aplikasi Apple Anda didaftarkan menggunakan Firebase. Artinya, Anda harus memasukkan ID paket aplikasi di bagian pendaftaran beserta informasi opsional lainnya, misalnya ID App Store dan ID Tim, dll. Ini dibutuhkan untuk memverifikasi audiens dari kredensial Game Center pengguna sebelum menyelesaikan proses login.
- Aktifkan Game Center sebagai penyedia login untuk project Firebase Anda:
- Di Firebase console, buka bagian Authentication.
- Pada tab Metode Login, aktifkan penyedia login Game Center.
Mengintegrasikan Login Game Center ke game Anda
Pertama-tama, jika game Anda belum menggunakan Game Center, ikuti petunjuk dalam Menyertakan Game Center ke dalam Game Anda dan Mengautentikasi Pemain Lokal di Perangkat pada situs developer Apple.
Pastikan ID paket yang Anda berikan ke iTunes Connect cocok dengan ID paket yang Anda gunakan saat menghubungkan aplikasi ke project Firebase.
Sebagai bagian dari integrasi Game Center, Anda menetapkan pengendali autentikasi yang dipanggil di beberapa titik selama proses autentikasi Game Center. Dalam pengendali ini, periksa apakah pemain login dengan Game Center. Jika sudah, Anda dapat melanjutkan login ke 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 } };
Melakukan autentikasi dengan Firebase
Setelah Anda memastikan bahwa pemain lokal telah login dengan Game Center, proses login pemain ke dalam game Anda dengan membuat objek AuthCredential
dengan GameCenterAuthProvider.getCredential()
dan meneruskan objek tersebut ke 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. }]; } }];
Langkah berikutnya
Setelah pengguna login untuk pertama kalinya, akun pengguna baru akan dibuat dan terhubung ke ID Game Center miliknya. Akun baru ini disimpan sebagai bagian dari project Firebase Anda, dan dapat digunakan untuk mengidentifikasi pengguna di setiap aplikasi dalam project Anda.
Di game, Anda bisa mendapatkan UID Firebase pengguna dari objek User
:
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; }
Di Aturan Keamanan Firebase Realtime Database dan Cloud Storage, Anda bisa mendapatkan ID pengguna unik yang login dari variabel auth
, dan menggunakannya untuk mengontrol data yang dapat diakses oleh pengguna.
Untuk mendapatkan informasi pemain Game Center milik pengguna atau mengakses layanan Game Center, gunakan API yang disediakan oleh Game Kit.
Agar pengguna logout dari Firebase, panggil 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; }