这是一个支持 iOS 的 Swift 包,允许将 GameKit 与 UIKit 和 SwiftUI 一起使用。
使玩家能够与朋友互动、比较排行榜排名并获得成就。
最新版本的 GameKitUI 需要
- Swift 5+
- iOS 14+
- Xcode 13+
使用 SPM 将以下内容添加到您的依赖项中
'GameCenterKit', 'main', 'https://github.com/fserrazes/GameCenterKit.git'
1. The local player must be authenticated on Game Center
2. Your app need an identifier leaderboard defined in App Store Connect.
如果可能,在 Game Center 中验证本地玩家的身份。
do {
GameCenterKit.shared.authenticate { isAuthenticated in
if isAuthenticated {
// Local player is authenticated
} else {
// Local player is not authenticated
}
} catch {
// Handle any errors that might occur during authentication
}
1. Toggle AccessPointView
2. Open from a ViewController (UIKit)
3. Open from a View (SwiftUI)
GameCenterKit.shared.toogleGameAccessPointView()
do {
try GameCenterKit.shared.showGameCenter(viewController: self)
} catch {
print(error)
}
import SwiftUI
import GameCenterKit
struct ContentView: View {
@State var isGameCenterOpen: Bool = false
var body: some View {
VStack {
Button {
isGameCenterOpen = true
} label: {
Text("Open GameCenter View")
.padding(.all, 5.0)
}
.buttonStyle(.borderedProminent)
}
.sheet(isPresented: $isGameCenterOpen) {
GameCenterView()
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
let identifierId: String = "your-app-leaderboard-id"
本地玩家获得的分数(时间范围定义为所有时间)。
let bestScore: Int = 0
if let score = try await GameCenterKit.shared.retrieveScore(identifier: identifierId) {
print("best score: \(String(describing: score))")
self.bestScore = score
}
本地玩家获得的排名(时间范围定义为所有时间)。
do {
let (current, previous) = try await GameCenterKit.shared.retrieveRank(identifier: identifierId)
print("current rank: \(String(describing: current))")
print("previous rank: \(String(describing: previous))")
} catch {
print(error)
}
最佳玩家列表和玩家总数(时间范围定义为所有时间)。
// Number of top players (1 - 50) to use for getting the scores.
let topPlayers: Int = 10
do {
let (players, totalPlayers) = try await GameCenterKit.shared.retrieveBestPlayers(identifier: identifierId, topPlayers: topPlayers)
print("total players: \(String(describing: totalPlayers))")
for player in players {
print("player: \(player.displayName)\t score: \(player.leaderboard.score)")
}
} catch {
print(error)
}
报告有资格进入排行榜的高分。
// The score earned by the local player
let score: Int = 10
do {
try await GameCenterKit.shared.submitScore(score: score, identifier: identifierId)
} catch {
print(error)
}
let achievementId: String = "your-app-achievement-id"
报告成就的进度,如果尚未完成。
// A percentage value (0 - 100) stating how far the user has progressed on the achievement
let percent: Double = 10.0
do {
try await GameCenterKit.shared.submitAchievement(identifier: achievementId, percent: percent)
} catch {
print(error)
}
重置所有玩家成就的完成百分比。
do {
try await GameCenterKit.shared.resetAchievements()
} catch {
print(error)
}