Computer >> Máy Tính >  >> Điện thoại thông minh >> iPhone

Cách triển khai Bảng xếp hạng GameKit trong SwiftUI

Trong bài viết này, chúng tôi sẽ nói về lý do và cách triển khai Bảng xếp hạng của GameCenter trong ứng dụng của bạn.

Tại sao GameCenter lại tạo ra một sự hồi sinh lớn

Bạn có thể tạo trò chơi trên iPhone mà không cần bảng điểm, nhưng bảng thành tích có thể giúp trò chơi có cảm giác cạnh tranh hơn, giống như mọi người đang cạnh tranh với nhau trên khắp Thế giới.

Thay vì tạo và quản lý phần phụ trợ của riêng bạn, Bảng xếp hạng GameCenter cho phép bạn mở rộng quy mô vô hạn với lưu lượng truy cập, bỏ qua toàn bộ trang đăng nhập để ủy quyền, nhận Hình ảnh, Tên và bạn bè chơi cùng một trò chơi - tất cả mà người dùng của bạn không cần phải nhập bất kỳ thứ gì.

Đặc biệt với iOS 16, Apple đang đầu tư nhiều hơn vào việc cải thiện nó và thúc đẩy việc sử dụng ứng dụng nhiều hơn, chẳng hạn như thông qua Thông báo đẩy khi bạn bè của bạn vượt qua điểm số của bạn trong trò chơi.

Trong hành trình học SwiftUI, tôi đã tạo và xuất bản các ứng dụng, bởi vì IMO là cách tốt nhất để học.

Không có nhiều tài liệu cập nhật về cách thực hiện nhiều điều này, đặc biệt là không có tài liệu nào với SwiftUI cũng như với sự ra đời của async và đang chờ đợi trong Swift. Vì vậy, tôi đã hợp nhất và đơn giản hóa nó cho mọi người để xây dựng các ứng dụng tuyệt vời. Vì vậy, hãy mời tôi cũng thử nghiệm các ứng dụng của bạn!

Điều kiện tiên quyết:

  • Bạn sẽ cần có tài khoản trả phí dành cho Nhà phát triển Apple
  • Bạn phải tạo Id ứng dụng cho ứng dụng của mình trong phần hồ sơ cấp phép của Cổng nhà phát triển Apple
  • Bạn phải tạo Ứng dụng trong cổng kết nối iTunes Connect Connect

Cách triển khai Bảng xếp hạng iOS của bạn trong 6 bước

Hầu hết logic mã cho bảng xếp hạng đều nằm trong tệp này nếu bạn muốn bỏ qua. Đây là các bước như sau:

1. Cách tạo Bảng xếp hạng Kết nối App Store

Cách triển khai Bảng xếp hạng GameKit trong SwiftUI
Ảnh chụp màn hình từ Apple iTunes Connect Portal

Khi bạn đã tạo thành công ứng dụng trong cổng App Store Connect, hãy chuyển đến tab Dịch vụ cho ứng dụng -> và đảm bảo rằng bạn đang ở trang GameCenter.

Sau đó, thêm bảng xếp hạng mới bằng dấu "+", có thể là "Cổ điển" (điểm số không bao giờ được đặt lại) hoặc "Định kỳ" (điểm số được đặt lại dựa trên cài đặt tần suất của bạn).

Hầu hết các trò chơi thích một bảng xếp hạng định kỳ để bảng thành tích không bị lộn xộn với các bảng xếp hạng cũ hơn không thể đạt được điểm cao.

LeaderboardID bạn nhập vào đó là ID bạn cần sử dụng ở tất cả các vị trí trong mã yêu cầu nó.

Cách triển khai Bảng xếp hạng GameKit trong SwiftUI
Chi tiết cần thiết để tạo Bảng dẫn đầu mới

2. Cách thiết lập xác thực trung tâm trò chơi

Trước tiên, bạn sẽ cần xác thực người dùng với GameCenter để bất kỳ chức năng nào trong số này hoạt động.

Vì vậy, chúng tôi sẽ sử dụng mã này để làm điều đó, về cơ bản đảm bảo rằng bạn (GKLocalPlayer.local) được xác thực hoặc in lỗi nếu có:

func authenticateUser() {
    GKLocalPlayer.local.authenticateHandler = { vc, error in
        guard error == nil else {
            print(error?.localizedDescription ?? "")
            return
        }
    }
}

Nếu người dùng được xác thực, bạn sẽ thấy một cửa sổ bật lên nhỏ trong giao diện người dùng. Nếu không, người dùng sẽ được đưa đến một trang để đăng nhập vào tài khoản GameCenter của họ.

Cách triển khai Bảng xếp hạng GameKit trong SwiftUI
Dấu hiệu hiển thị khi người dùng đăng nhập

3. Cách hiển thị các mục trên bảng xếp hạng trong giao diện người dùng

Để lấy dữ liệu từ bảng xếp hạng GameCenter ViewController (GKLeaderboard), bạn cần sử dụng loadLeaderboards .

Bạn có thể chuyển đổi loadEntries chức năng từ .global thành .friends để chỉ kéo bạn bè của bạn.

Bạn cũng có thể truy xuất hình ảnh cho từng trình phát bằng cách lặp lại từng trình phát và thực hiện loadPhoto .

Sử dụng NSRang(1...5) , bạn có thể chọn số lượng người chơi để hiển thị. Điều này kéo những người dùng có 5 điểm cao nhất khỏi bảng xếp hạng và không trả về nếu không có người dùng, chẳng hạn như trong trường hợp khi chu kỳ làm mới cho Bảng xếp hạng định kỳ.

Đây là hình thức kéo dữ liệu từ bảng xếp hạng nếu bạn tận dụng tính năng 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            
    }
}
Cách triển khai Bảng xếp hạng GameKit trong SwiftUI
Bạn có thể tải dữ liệu bảng thành tích vào ứng dụng của mình

4. Cách gọi Chức năng trong SwiftUI khi Chế độ xem / Trang xuất hiện

Bạn có thể tận dụng onAppear chức năng vòng đời của chế độ xem để thực sự thực hiện các lệnh gọi xác thực và tải, nhưng bạn cũng có thể thực hiện điều đó bằng cách nhấn vào một nút nếu bạn muốn:

.onAppear(){
    if !GKLocalPlayer.local.isAuthenticated {
        authenticateUser()
    } else if playersList.count == 0 {
        Task{
            await loadLeaderboard()
        }
    }
}

5. Cách tải điểm đã nộp

Để tải điểm, bạn cũng cần phải gửi chúng. submitScore chức năng có thể giúp bạn điều đó.

  • flightsClimbed biến phải chứa điểm mà bạn muốn gửi.
  • GameKit đảm bảo chỉ hiển thị điểm số tốt nhất của bạn trong suốt thời gian tồn tại của bảng thành tích.
  • leaderboardId chứa giá trị mà bạn nhập thủ công vào tài khoản App Store Connect của mình:
func leaderboard() async{
    Task{
        try await GKLeaderboard.submitScore(
            flightsClimbed,
            context: 0,
            player: GKLocalPlayer.local,
            leaderboardIDs: ["com.tfp.stairsteppermaster.flights"]
        )
    }
    calculateAchievements()
}

6. Cách hiển thị Cổng GameCenter ViewController

Khi bạn đã đăng nhập vào GameCenter, một biểu tượng khó chịu sẽ xuất hiện ở trên cùng bên phải màn hình của bạn. Khi bạn chạm vào nó, bạn sẽ được đưa đến GameCenter ViewController. May mắn thay, bạn có thể ẩn nó nếu nó không phải là một phần thiết kế của bạn, bằng cách sử dụng GKAccessPoint.shared.isActive = false .

Vì giao diện người dùng GameCenter là UIKit ViewController và không phải là một SwiftUI đơn giản View , bạn cần tạo UIViewControllerRepresentable này trước (như bạn có thể thấy ở đây), để khởi chạy GameCenter bằng một nút khác,

Khi bạn thêm tệp đó vào dự án của mình, bạn có thể hiển thị cổng GameCenter bằng cách sử dụng:GameCenterView(format: gameCenterViewControllerState) nơi gameCenterViewControllerState có thể giúp bạn truy cập trang chi tiết trong GameCenter.

Cách triển khai Bảng xếp hạng GameKit trong SwiftUI
Chế độ xem bảng xếp hạng của GameCenter

Những điều cần lưu ý khi sử dụng Bảng xếp hạng của GameCenter:

  • Gỡ lỗi trình mô phỏng - Vì một số lý do, việc xác thực với GameCenter cực kỳ chậm trên trình mô phỏng, vì vậy việc tạo mô phỏng dữ liệu khi sử dụng trình mô phỏng có thể rất hợp lý.
  • Thử thách - Bạn không thể phát hành Thử thách GameKit theo chương trình cho bạn bè của mình nữa do không còn được dùng nữa. Thay vào đó, bạn phải thực hiện những việc đó theo cách thủ công trong bảng điều khiển GameCenter của người dùng đối với Thành tích GameKit. Ngoài ra, không có cách nào để xem các thử thách bạn đã gửi.
  • Thành tích - Bảng thành tích khác với Thành tích GameKit, được tính toán và hiển thị khác, nhưng dễ dàng hơn rất nhiều. Những thứ đó cũng có thể được kéo vào ứng dụng, như bạn có thể thấy bên dưới:
Cách triển khai Bảng xếp hạng GameKit trong SwiftUI
Những thách thức và thành tựu của GameKit

Kết thúc

Bạn có thể dùng thử ứng dụng Sức khỏe &Thể dục trên iPhone mã nguồn mở Stair Master Climber mà tôi đã chia sẻ ở trên. Tôi rất muốn biết suy nghĩ của bạn để chúng ta có thể cùng nhau học hỏi.

Vui lòng liên hệ với tôi trên phương tiện truyền thông xã hội hoặc qua email nếu bạn có bất kỳ câu hỏi nào.