Game Center и список лидеров в вашем приложении для iOS
() 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 приложения:



Этот проект имеет UILabel с красным текстом, который я назвал scoreLabel
и парочка UIButtons. Красный добавит 10 очков к рекорду и отправит это в таблицу лидеров Game Center, а синяя откроет GKGameCenterViewController и покажет эту таблицу лидеров.
Самое первое, что нужно сделать так это включить Game Center на вкладке Capabilities в Xcode.



Затем вы должны импортировать 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.



Выберите Single 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, для добавления языка.



Во всплывающем окне вы должны выбрать язык своей таблицы лидеров. По умолчанию всегда используется английский язык. Введите ещё раз название вашей таблицы лидеров, например, на английском и выберите Score Format (я выбрал запятые для разделения групп цифр).
Поля Score Format Suffix необязательны; вы можете оставить оба поля пустыми или ввести нужный суффикс. Например, если в вашей игре баллы, вы можете набрать «балл» и «баллов» для множественного числа, тогда контроллер Game Center добавит этот суффикс в конец оценок, отображаемых в вашей таблице лидеров, например «1 балл» или «100 баллов".
Вы также можете добавить значок. Изображение должно быть файлом .jpeg, .jpg или .png, с размером 512x512 или 1024x1024 пикселей, не менее 72 DPI, в цветовом пространстве RGB без прозрачного фона. Нажмите Choose File, чтобы загрузить изображение.
Наконец нажмите Save и всё готово. Вы можете повторить описанные выше шаги, чтобы добавить больше языков — просто введите названия таблица лидеров в соответствии с выбранным языком.



После того, как вы добавили окно, вы можете проверить детали вашей таблицы лидеров. Если всё в порядке, нажмите Save и вы будете перенаправлены на страницу функций (Features) для вашей новой таблицей лидеров.






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



Прокрутите вниз до тех пор, пока вы не увидите Game Center и переключатель рядом с ним. Включите его и он станет зеленым. Затем нажмите на значок + рядом с Leaderboards, выберите свою таблицу лидеров из списка и нажмите Done.



Нажмите Save в правом верхнем углу окна и всё будет готово к настройке Game Center на iTunes Connect.



Теперь вы можете вернуться к проекту Xcode и запустить приложение на реальном устройстве или даже на симуляторе iOS. Если вы ещё не вошли в Game Center, появится контроллер Sign In. Выглядит это так:



Войдите в систему со своими учетными данными и вы сможете начать тестирование приложения!
В нашем методе addScoreAndSubmitToGC()
мы добавили следующий вызов print()
:
1 |
print("Best Score submitted to your Leaderboard!") |
Так что, если вы нажмёте красную кнопку, в scoreLabel
будет отображаться «10», а консоль Xcode напечатает Best Score submitted to your Leaderboard!



Коснитесь красной кнопки ещё три раза, а затем нажмите синюю, чтобы открыть таблицу лидеров и проверьте, что отправлены очки равны 40. Вы должны увидеть что-то вроде этого:



Заключение
Если вы хотите увидеть Game Center в действии с полнофункциональным игровым приложением, вы можете проверить мой шаблон игры Four Dots на CodeCanyon. Это шаблон для минималистичной бесконечной игры, которая сохраняет лучшие результаты и отправляет их в Game Center.



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