Advertisement
  1. Code
  2. iOS SDK

Game Center і список лідерів в вашому додатку для iOS

Scroll to top
Read Time: 8 min

() translation by (you can also view the original English article)

Вступ

Game Center це соціальна ігрова мережа Apple. Вона дозволяє користувачам відстежувати свої рекорди в таблиці лідерів, порівнювати досягнення, запрошувати друзів в гру і запускати багато користувачів гру через авто-пошук. Тому, якщо ви створили гру iOS і хочете, щоб користувачі могли публікувати свої бали в таблиці лідерів Game Center, це відповідний урок для вас!

Додаткову інформацію про додатки і Game Center можна знайти на сторінці Apple Developer.

Проект Xcode

Для цього уроку я створив базовий проект Xcode, який можна завантажити з GitHub. Я поясню всі необхідні кроки, для створення таблиці лідерів в iTunes Connect і необхідний код для відправлення туди очок, а також кнопку, щоб відкрити таблицю лідерів з програми.

Ось як виглядає Storyboard програми:

Demo Xcode projectDemo Xcode projectDemo Xcode project

Цей проект має UILabel з червоним текстом, який я назвав scoreLabel і парочка UIButtons. Червоний додасть 10 очок до рекорду і відправить це в таблицю лідерів Game Center, а синя відкриє GKGameCenterViewController і покаже цю таблицю лідерів.

Найперше, що потрібно зробити так це включити Game Center на вкладці Capabilities в Xcode.

Enable Game Center in the Capabilities tabEnable Game Center in the Capabilities tabEnable Game Center in the Capabilities tab

Потім ви повинні імпортувати GameKit у верхній частині вашого ViewController.swift і додати протокол GKGameCenterControllerDelegate оголошення класу.

1
import GameKit
2
3
4
class ViewController: UIViewController,
5
GKGameCenterControllerDelegate
6
{

Тепер додамо кілька змінних. Ви можете вставити цей код прямо в клас ViewController:

1
/* Variables */
2
var gcEnabled = Bool() // Check if the user has Game Center enabled

3
var gcDefaultLeaderBoard = String() // Check the default leaderboardID

4
    
5
var score = 0
6
    
7
// IMPORTANT: replace the red string below with your own Leaderboard ID (the one you've set in iTunes Connect)

8
let LEADERBOARD_ID = "com.score.mygamename"

Перша змінна вказує, чи включений Game Center, а другий буде використовуватися пізніше за допомогою коду аутентифікації гравця, щоб GameKit зміг визначити таблицю лідерів за замовчуванням.

score спочатку буде 0, звичайно.

LEADERBOARD_ID це String, яку ви повинні встановити, щоб ігровий центр (Game Center) відправив ваші окуляри на сервер за допомогою ідентифікатора таблиця лідерів за замовчуванням. Виберіть назву яке хочете, але майте на увазі, що воно повинно бути назад веб-формату.  Ось чому я визначив цю таблицю лідерів як com.score.mygamename, де mygamename повинен бути замінений на назву вашого застосування в малих символах без пробілів.

Перш ніж включити Game Center на сторінці iTunes Connect вашого застосування, давайте закінчимо базовий код. Додайте цей рядок в viewDidLoad():

1
 // Call the GC authentication controller

2
authenticateLocalPlayer()

И добавьте следующую функцию прямо под viewDidLoad():

1
// MARK: - AUTHENTICATE LOCAL PLAYER

2
func authenticateLocalPlayer() {
3
    let localPlayer: GKLocalPlayer = GKLocalPlayer.localPlayer()
4
        
5
    localPlayer.authenticateHandler = {(ViewController, error) -> Void in
6
        if((ViewController) != nil) {
7
            // 1. Show login if player is not logged in

8
            self.present(ViewController!, animated: true, completion: nil)
9
        } else if (localPlayer.isAuthenticated) {
10
            // 2. Player is already authenticated & logged in, load game center

11
            self.gcEnabled = true
12
                
13
            // Get the default leaderboard ID

14
            localPlayer.loadDefaultLeaderboardIdentifier(completionHandler: { (leaderboardIdentifer, error) in
15
                if error != nil { print(error)
16
                } else { self.gcDefaultLeaderBoard = leaderboardIdentifer! }
17
            })
18
            
19
        } else {
20
            // 3. Game center is not enabled on the users device

21
            self.gcEnabled = false
22
            print("Local player could not be authenticated!")
23
            print(error)
24
        }
25
    }
26
}

У разі, якщо користувач не зайшов в Game Center з налаштувань на своєму пристрої, наведений вище метод відобразить екран входу в Game Center, як тільки він підключиться до сервера GC. Після входу в систему додаток отримує ідентифікатор таблиці лідерів за замовчуванням.

У наступному методі ми змусимо додаток схопити рядок LEADERBOARD_ID, яку ви створили раніше і передати її як ідентифікатор таблиця лідерів за замовчуванням на сервер Game Center.

1
// MARK: - ADD 10 POINTS TO THE SCORE AND SUBMIT THE UPDATED SCORE TO GAME CENTER

2
@IBAction func addScoreAndSubmitToGC(_ sender: AnyObject) {
3
    // Add 10 points to current score

4
    score += 10
5
    scoreLabel.text = "\(score)"
6
7
    // Submit score to GC leaderboard

8
    let bestScoreInt = GKScore(leaderboardIdentifier: LEADERBOARD_ID)
9
    bestScoreInt.value = Int64(score)
10
    GKScore.report([bestScoreInt]) { (error) in
11
        if error != nil {
12
            print(error!.localizedDescription)
13
        } else {
14
            print("Best Score submitted to your Leaderboard!")
15
        }
16
    }
17
}

У наведеному вище коді також додається 10 балів до поточному рахунку, тому кожен раз, коли ви натискаєте кнопку Add Score and Submit To GC, ви побачите, що напис з червоною міткою змінюється і додаток відправить оновлений рахунок в вашу таблицю лідерів GC.

Тепер вам потрібно додати метод делегування GameKit, який завершить контролер GC.

1
// Delegate to dismiss the GC controller

2
func gameCenterViewControllerDidFinish(_ gameCenterViewController: GKGameCenterViewController) {
3
    gameCenterViewController.dismiss(animated: true, completion: nil)
4
}

Перед створенням вашої таблиці лідерів в iTunes Connect залишився тільки один метод, який є дією на кнопку, яка відкриє ViewController ігрового центру.

1
// MARK: - OPEN GAME CENTER LEADERBOARD

2
@IBAction func checkGCLeaderboard(_ sender: AnyObject) {
3
    let gcVC = GKGameCenterViewController()
4
    gcVC.gameCenterDelegate = self
5
    gcVC.viewState = .leaderboards
6
    gcVC.leaderboardIdentifier = LEADERBOARD_ID
7
    present(gcVC, animated: true, completion: nil)
8
}

Як ви бачите вище, цей код створює екземпляр контролера GC, призначає делегування на цей контролер, встановлює стан виду контролера для відображення лідерів і проходить по вашому елементу LEADERBOARD_ID перед показом контролера.

Ну ось, ми закінчили писати код, але ви ще не можете запустити додаток. Якщо ви це зробите, ви отримаєте повідомлення про помилку від Xcode, так як ви не створили власну таблицю лідерів на сторінці iTunes Connect вашого застосування.

Налаштувати ігровий центр на iTunes Connect

Ви вже повинні створити додаток iOS в iTunes Connect з вашим ідентифікатором Bundle. Тепер увійдіть в свій додаток з панелі інструментів iTunes Connect і натисніть Features, а потім Game Center.

Потім клікніть по значку + поруч з Leaderboards.

App Features page on iTunes ConnectApp Features page on iTunes ConnectApp Features page on iTunes Connect

Виберіть Single Leaderboard на наступному екрані.

Add a leaderboardAdd a leaderboardAdd a leaderboard

Тут вам потрібно ввести назву, яке ви хочете дати своїй таблиці лідерів. На скріншоті нижче я використовував My Leaderboard Name, як приклад. Ви можете назвати вашу Best Score Leaderboard або як завгодно ще.

В поле Leaderboard ID вставте рядок LEADERBOARD_ID, яку ми раніше створили в проекті Xcode.

Оскільки рахунок це число, виберіть Integer в полі Score Format Type. Ви можете вибрати потрібний варіант для типу відправлення (Submission Type) і порядку сортування (Sort Order). Залиште Score Range (Optional) порожнім.

Нарешті, натисніть кнопку Add Language, для додавання мови.

Set leaderboards detailsSet leaderboards detailsSet leaderboards details

У спливаючому вікні ви повинні вибрати мову своєї таблиці лідерів. За замовчуванням завжди використовується англійська мова. Введіть ще раз назву вашої таблиці лідерів, наприклад, англійською та виберіть Score Format (я вибрав коми для розділення груп цифр).

Поля Score Format Suffix необов'язкові; ви можете залишити обидва поля порожніми або ввести потрібний суфікс. Наприклад, якщо у вашій грі бали, ви можете набрати «бал» і «балів» для множини, тоді контролер Game Center додасть цей суфікс у кінець оцінок, які відображаються у вашій таблиці лідерів, наприклад «1 бал» або «100 балів".

Ви також можете додати значок. Зображення повинно бути файлом .jpeg, .jpg або .png, з розміром 512x512 або 1024x1024 пікселів, не менше 72 DPI, в колірному просторі RGB без прозорого фону. Натисніть Choose File, щоб завантажити зображення.

Нарешті натисніть Save і все готово. Ви можете повторити описані вище кроки, щоб додати більше мов - просто введіть назви таблиця лідерів відповідно до обраного мовою.

Add a leaderboards languageAdd a leaderboards languageAdd a leaderboards language

Після того, як ви додали вікно, ви можете перевірити деталі вашої таблиці лідерів. Якщо все в порядку, натисніть Save і ви будете перенаправлені на сторінку функцій (Features) для вашої нової таблицею лідерів.

Language added for a new leaderboardLanguage added for a new leaderboardLanguage added for a new leaderboard
Features pageFeatures pageFeatures page

Тепер прийшов час включити Game Center в розділі App Store вашого застосування. Натисніть App Store і Prepare for Submission.

App Store sectionApp Store sectionApp Store section

Прокрутіть вниз до тих пір, поки ви не побачите Game Center і перемикач поруч з ним. Увімкніть його і він стане зеленим. Потім натисніть на значок + поруч з Leaderboards, виберіть свою таблицю лідерів зі списку і натисніть Done.

Натисніть Save в правому верхньому куті вікна і все буде готово до налаштування Game Center на iTunes Connect.

Save your app with Game Centers leaderboardSave your app with Game Centers leaderboardSave your app with Game Centers leaderboard

Тепер ви можете повернутися до проекту Xcode і запустити додаток на реальному пристрої або навіть на симуляторі iOS. Якщо ви ще не були прийняті в Game Center, з'явиться контролер Sign In. Виглядає це так:

Game Center Sing In screenGame Center Sing In screenGame Center Sing In screen

Увійдіть в систему зі своїми обліковими даними і ви зможете почати тестування програми!

У нашому методі addScoreAndSubmitToGC() ми додали наступний виклик print():

1
print("Best Score submitted to your Leaderboard!")

Так що, якщо ви натиснете червону кнопку, в scoreLabel буде відображатися «10», а консоль Xcode надрукує Best Score submitted to your Leaderboard!

Score updated and submitted to your leaderboardScore updated and submitted to your leaderboardScore updated and submitted to your leaderboard

Торкніться червоної кнопки ще три рази, а потім натисніть синю, щоб відкрити таблицю лідерів і перевірте, що відправлені окуляри рівні 40. Ви повинні побачити щось на зразок цього:

GC controller for leaderboardsGC controller for leaderboardsGC controller for leaderboards

Висновок

Якщо ви хочете побачити Game Center в дії з повнофункціональним іграми платформи, ви можете перевірити мій шаблон гри Four Dots на CodeCanyon. Це шаблон для минималистичной нескінченної гри, яка зберігає кращі результати і відправляє їх в Game Center.

Four Dots iOS app template on CodeCanyonFour Dots iOS app template on CodeCanyonFour Dots iOS app template on CodeCanyon

Шаблони ігор, подібні до цього це відмінний спосіб почати працювати над вашою наступною грою. CodeCanyon містить сотні шаблонів ігор для iOS, які ви можете використовувати, щоб швидко почати розробку, це дозволить вам побудувати наступну гру-вбивцю набагато швидше!

Спасибі що прочитали і побачимося наступного разу! Ознайомтеся з деякими з наших інших посібників з розробки додатків Swift і iOS.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.