이 기사에서는 앱 내에서 GameCenter의 리더보드를 구현하는 이유와 방법에 대해 설명합니다.
GameCenter가 크게 부흥하는 이유
점수판 없이 iPhone 게임을 만들 수 있지만 순위표를 사용하면 전 세계 사람들이 서로 경쟁하는 것처럼 게임을 더욱 경쟁력 있게 만들 수 있습니다.
자체 백엔드를 생성 및 관리하는 대신 GameCenter 리더보드를 사용하면 트래픽을 무한대로 확장하고, 인증을 위해 전체 로그인 페이지를 건너뛰고, 이미지, 이름 및 같은 게임을 하는 친구를 얻을 수 있습니다. 이 모든 작업은 사용자가 아무 것도 입력하지 않아도 됩니다.
특히 iOS 16에서 Apple은 친구가 게임에서 당신의 점수를 이길 때 푸시 알림을 통해 앱을 개선하고 더 많은 앱 사용을 유도하는 데 더 많은 투자를 하고 있습니다.
SwiftUI를 배우는 여정에서 저는 앱을 만들고 게시해 왔습니다. 왜냐하면 IMO가 배우는 가장 좋은 방법이기 때문입니다.
이 많은 작업을 수행하는 방법에 대한 업데이트된 문서가 별로 없었습니다. 특히 SwiftUI가 없거나 Swift에서 async 및 await가 등장하면서 업데이트된 문서가 많지 않았습니다. 그래서 모두가 놀라운 앱을 만들 수 있도록 통합하고 단순화했습니다. 그러니 저를 초대하여 여러분의 앱도 테스트해 보세요!
필수 조건:
- Apple 개발자 유료 계정이 있어야 합니다.
- Apple 개발자 포털의 프로비저닝 프로필 섹션에서 앱의 앱 ID를 생성해야 합니다.
- iTunes Connect Connect 포털에서 앱을 만들어야 합니다.
6단계로 iOS 리더보드를 구현하는 방법
건너뛰고 싶다면 리더보드에 대한 대부분의 코드 로직이 이 파일에 있습니다. 단계는 다음과 같습니다.
1. App Store Connect 리더보드를 만드는 방법
App Store Connect 포털에서 앱을 성공적으로 생성했으면 앱의 서비스 탭 ->으로 이동하여 GameCenter 페이지에 있는지 확인합니다.
그런 다음 "클래식"(점수가 재설정되지 않음) 또는 "반복"(빈도 설정에 따라 점수가 재설정됨)이 될 수 있는 "+" 기호를 사용하여 새 리더보드를 추가합니다.
대부분의 게임은 순위표가 높은 점수에 도달할 수 없는 오래된 것으로 복잡하지 않도록 반복되는 순위표를 선호합니다.
거기에 입력한 LeaderboardID는 코드에서 요청하는 모든 위치에서 사용해야 하는 것입니다.
2. GameCenter 인증을 설정하는 방법
먼저 이 기능이 작동하려면 GameCenter에 사용자를 인증해야 합니다.
따라서 이 코드를 사용하여 기본적으로 사용자(GKLocalPlayer.local)가 인증되었는지 확인하거나 오류가 있는 경우 오류를 출력합니다.
func authenticateUser() {
GKLocalPlayer.local.authenticateHandler = { vc, error in
guard error == nil else {
print(error?.localizedDescription ?? "")
return
}
}
}
사용자가 인증되면 UI에 작은 팝업이 표시됩니다. 그렇지 않은 경우 사용자는 GameCenter 계정에 로그인할 수 있는 페이지로 이동합니다.
3. UI에 순위표 항목을 표시하는 방법
GameCenter ViewController 리더보드(GKLeaderboard)에서 데이터를 가져오려면 loadLeaderboards
를 사용해야 합니다. .
loadEntries
로 전환할 수 있습니다. .global
의 함수 .friends
로 친구만 끌어들이기 위해.
각 플레이어를 반복하고 loadPhoto
을 수행하여 각 플레이어의 이미지를 검색할 수도 있습니다. .
NSRang(1...5)
사용 , 표시할 플레이어 수를 선택할 수 있습니다. 이렇게 하면 리더보드에서 가장 높은 5개 점수를 가진 사용자를 가져오고 반복되는 리더보드에 대해 주기가 새로 고쳐지는 경우와 같이 사용자가 없으면 아무 것도 반환하지 않습니다.
async-await를 활용하는 경우 리더보드에서 데이터를 가져오는 방법은 다음과 같습니다.
func loadLeaderboard() async {
playersList.removeAll()
Task{
var playersListTemp : [Player] = []
let leaderboards = try await GKLeaderboard.loadLeaderboards(IDs: [leaderboardIdentifier])
if let leaderboard = leaderboards.filter ({ $0.baseLeaderboardID == self.leaderboardIdentifier }).first {
let allPlayers = try await leaderboard.loadEntries(for: .global, timeScope: .allTime, range: NSRange(1...5))
if allPlayers.1.count > 0 {
try await allPlayers.1.asyncForEach { leaderboardEntry in
var image = try await leaderboardEntry.player.loadPhoto(for: .small)
playersListTemp.append(Player(name: leaderboardEntry.player.displayName, score:leaderboardEntry.formattedScore, image: image))
print(playersListTemp)
playersListTemp.sort{
$0.score < $1.score
}
}
}
}
playersList = playersListTemp
}
}
4. 보기/페이지가 나타날 때 SwiftUI에서 기능을 호출하는 방법
onAppear
를 활용할 수 있습니다. 실제로 인증 및 로드를 호출하는 뷰의 수명 주기 기능이지만 원하는 경우 버튼을 탭하여 수행할 수도 있습니다.
.onAppear(){
if !GKLocalPlayer.local.isAuthenticated {
authenticateUser()
} else if playersList.count == 0 {
Task{
await loadLeaderboard()
}
}
}
5. 제출된 점수를 로드하는 방법
점수를 로드하려면 점수도 제출해야 합니다. submitScore
기능이 도움이 될 수 있습니다.
flightsClimbed
변수에는 제출하려는 점수가 포함되어야 합니다.- GameKit은 리더보드의 수명 동안 최고 점수만 표시합니다.
leaderboardId
App Store Connect 계정에 수동으로 입력한 값 포함:
func leaderboard() async{
Task{
try await GKLeaderboard.submitScore(
flightsClimbed,
context: 0,
player: GKLocalPlayer.local,
leaderboardIDs: ["com.tfp.stairsteppermaster.flights"]
)
}
calculateAchievements()
}
6. GameCenter ViewController 포털을 표시하는 방법
GameCenter에 로그인하면 화면 오른쪽 상단에 약간 성가신 아이콘이 나타납니다. 탭하면 GameCenter ViewController로 이동합니다. 운 좋게도 GKAccessPoint.shared.isActive = false
을 사용하여 디자인의 일부가 아닌 경우 숨길 수 있습니다. .
GameCenter UI는 UIKit ViewController
이므로 단순한 SwiftUI View
가 아닙니다. , 다른 버튼을 사용하여 GameCenter를 시작하려면 이 UIViewControllerRepresentable을 먼저 생성해야 합니다(여기에서 볼 수 있음).
해당 파일을 프로젝트에 추가하면 GameCenterView(format: gameCenterViewControllerState)
을 사용하여 GameCenter 포털을 표시할 수 있습니다. 여기서 gameCenterViewControllerState는 GameCenter의 세부 정보 페이지로 이동하는 데 도움이 될 수 있습니다.
GameCenter의 리더보드를 사용할 때 염두에 두어야 할 사항:
- 시뮬레이터 디버깅 – 어떤 이유로 GameCenter에 대한 인증은 시뮬레이터에서 매우 느리므로 시뮬레이터를 사용할 때 모의 데이터를 만드는 것이 합리적일 수 있습니다.
- 챌린지 – 지원 중단으로 인해 더 이상 프로그래밍 방식으로 GameKit 챌린지를 친구에게 발행할 수 없습니다. 대신 GameKit Achievements에 대해 사용자의 GameCenter 대시보드 내에서 수동으로 수행해야 합니다. 또한 보낸 챌린지를 볼 수 있는 방법이 없습니다.
- 업적 – 순위표는 다르게 계산되고 표시되지만 훨씬 더 쉬운 GameKit 업적과 다릅니다. 아래에서 볼 수 있듯이 앱으로 가져올 수도 있습니다.
마무리
위에서 공유한 무료 오픈 소스 Stair Master Climber iPhone 건강 및 피트니스 앱을 사용해 볼 수 있습니다. 함께 배울 수 있도록 여러분의 생각을 알고 싶습니다.
질문이 있는 경우 소셜 미디어나 이메일로 언제든지 저에게 연락해 주십시오.