Advertisement
  1. Code
  2. Coding Fundamentals
  3. Game Development

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.