GameCenterKit

这是一个支持 iOS 的 Swift 包,允许将 GameKit 与 UIKit 和 SwiftUI 一起使用。

使玩家能够与朋友互动、比较排行榜排名并获得成就。

要求

最新版本的 GameKitUI 需要

- Swift 5+
- iOS 14+
- Xcode 13+

安装

Swift Package Manager

使用 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 上进行身份验证。

如果可能,在 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
}

要显示 GameKit 提供的 Game Center 视图,有 3 个选项

1. Toggle AccessPointView
2. Open from a ViewController (UIKit)
3. Open from a View (SwiftUI)

切换 AccessPointView

GameCenterKit.shared.toogleGameAccessPointView()

从 ViewController (UIKit) 打开

do {
    try GameCenterKit.shared.showGameCenter(viewController: self)
} catch {
    print(error)
}

从 View (SwiftUI) 打开

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)
}

文档