Computer >> คอมพิวเตอร์ >  >> สมาร์ทโฟน >> iPhone

วิธีการใช้กระดานผู้นำ GameKit ใน SwiftUI

ในบทความนี้เราจะพูดถึงสาเหตุและวิธีการติดตั้งลีดเดอร์บอร์ดของ GameCenter ในแอปของคุณ

เหตุใด GameCenter จึงฟื้นคืนชีพครั้งใหญ่

คุณสามารถสร้างเกมบน iPhone ได้โดยไม่ต้องมีป้ายบอกคะแนน แต่กระดานผู้นำสามารถช่วยทำให้เกมมีการแข่งขันมากขึ้น เหมือนกับที่ผู้คนแข่งขันกันทั่วโลก

แทนที่จะสร้างและจัดการแบ็กเอนด์ของคุณเอง ลีดเดอร์บอร์ด GameCenter ช่วยให้คุณปรับขนาดตามปริมาณการใช้งานได้ไม่จำกัด ข้ามหน้าการเข้าสู่ระบบทั้งหมดเพื่อขออนุญาต รับรูปภาพ ชื่อ และเพื่อนที่เล่นเกมเดียวกัน ทั้งหมดนี้โดยที่ผู้ใช้ของคุณไม่ต้องป้อนข้อมูลใดๆ

โดยเฉพาะอย่างยิ่งกับ iOS 16 นั้น Apple ลงทุนมากขึ้นในการปรับปรุงและกระตุ้นการใช้งานแอพให้มากขึ้น เช่น ผ่านการแจ้งเตือนแบบพุชเมื่อเพื่อนของคุณทำคะแนนได้เหนือกว่าในเกม

ในเส้นทางการเรียนรู้ SwiftUI ของฉัน ฉันได้สร้างและเผยแพร่แอป เพราะ IMO เป็นวิธีที่ดีที่สุดในการเรียนรู้

ไม่มีเอกสารที่อัปเดตมากเกี่ยวกับวิธีการทำสิ่งนี้ โดยเฉพาะอย่างยิ่งไม่มีกับ SwiftUI หรือการ async และรอใน Swift ดังนั้นฉันจึงรวมและทำให้ง่ายขึ้นสำหรับทุกคนเพื่อสร้างแอปที่น่าทึ่ง เชิญฉันทดสอบแอปของคุณได้ตามสบาย

ข้อกำหนดเบื้องต้น:

  • คุณจะต้องมีบัญชีแบบชำระเงินสำหรับนักพัฒนาของ Apple
  • คุณต้องสร้าง App Id สำหรับแอปของคุณในส่วนโปรไฟล์การจัดเตรียมของพอร์ทัลนักพัฒนา Apple
  • คุณต้องสร้างแอปในพอร์ทัล iTunes Connect Connect

วิธีใช้งานลีดเดอร์บอร์ด iOS ของคุณใน 6 ขั้นตอน

ลอจิกโค้ดส่วนใหญ่สำหรับลีดเดอร์บอร์ดอยู่ในไฟล์นี้หากคุณต้องการข้ามไปข้างหน้า มีขั้นตอนดังนี้:

1. วิธีสร้างลีดเดอร์บอร์ดเชื่อมต่อ App Store

วิธีการใช้กระดานผู้นำ GameKit ใน SwiftUI
ภาพหน้าจอจากพอร์ทัล Apple iTunes Connect

เมื่อคุณสร้างแอปในพอร์ทัล App Store Connect สำเร็จแล้ว ให้ไปที่แท็บบริการสำหรับแอป -> และตรวจสอบให้แน่ใจว่าคุณอยู่ในหน้า GameCenter

จากนั้นเพิ่มลีดเดอร์บอร์ดใหม่โดยใช้เครื่องหมาย "+" ซึ่งอาจเป็น "คลาสสิก" (คะแนนจะไม่ถูกรีเซ็ต) หรือ "ซ้ำ" (คะแนนจะรีเซ็ตตามการตั้งค่าความถี่ของคุณ)

เกมส่วนใหญ่ชอบลีดเดอร์บอร์ดที่เกิดซ้ำเพื่อที่ลีดเดอร์บอร์ดจะไม่รกและเก่ากว่าจะได้คะแนนสูงสุด

ลีดเดอร์บอร์ดID ที่คุณป้อนคือรหัสที่คุณต้องใช้ในทุกที่ในโค้ดที่ขอ

วิธีการใช้กระดานผู้นำ GameKit ใน SwiftUI
รายละเอียดที่จำเป็นในการสร้างกระดานผู้นำใหม่

2. วิธีตั้งค่าการตรวจสอบสิทธิ์ GameCenter

ขั้นแรก คุณจะต้องตรวจสอบสิทธิ์ผู้ใช้กับ GameCenter เพื่อให้ฟังก์ชันการทำงานนี้ทำงานได้

ดังนั้น เราจะใช้รหัสนี้ในการทำเช่นนั้น ซึ่งโดยพื้นฐานแล้วทำให้แน่ใจว่าคุณ (GKLocalPlayer.local) รับรองความถูกต้อง หรือพิมพ์ข้อผิดพลาดหากมี:

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

หากตรวจสอบสิทธิ์ผู้ใช้แล้ว คุณจะเห็นป๊อปอัปเล็กน้อยใน UI หากไม่เป็นเช่นนั้น ระบบจะนำผู้ใช้ไปยังหน้าเพื่อลงชื่อเข้าใช้บัญชี GameCenter

วิธีการใช้กระดานผู้นำ GameKit ใน SwiftUI
สัญญาณที่แสดงเมื่อผู้ใช้เข้าสู่ระบบ

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            
    }
}
วิธีการใช้กระดานผู้นำ GameKit ใน SwiftUI
คุณสามารถรับข้อมูลลีดเดอร์บอร์ดลงในแอปของคุณได้

4. วิธีเรียกใช้ฟังก์ชันการทำงานใน SwiftUI เมื่อมุมมอง/หน้าปรากฏขึ้น

คุณสามารถใช้ประโยชน์จาก onAppear ฟังก์ชั่นวงจรชีวิตของมุมมองเพื่อโทรออกเพื่อรับรองความถูกต้องและโหลด แต่คุณสามารถทำได้ด้วยการแตะปุ่มหากคุณต้องการ:

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

5. วิธีการโหลดคะแนนที่ส่งมา

ในการโหลดคะแนน คุณต้องส่งคะแนนด้วย The submitScore ฟังก์ชั่นสามารถช่วยคุณได้

  • The flightsClimbed ตัวแปรควรมีคะแนนที่คุณต้องการส่ง
  • GameKit ทำให้แน่ใจว่าจะแสดงเฉพาะคะแนนที่ดีที่สุดของคุณตลอดอายุของกระดานผู้นำ
  • The 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 . ธรรมดา คุณต้องสร้าง UIViewControllerRepresentable นี้ก่อน (ดังที่คุณเห็นที่นี่) เพื่อเปิดใช้ GameCenter โดยใช้ปุ่มอื่น

เมื่อคุณเพิ่มไฟล์นั้นลงในโปรเจ็กต์ของคุณแล้ว คุณสามารถแสดงพอร์ทัล GameCenter ได้ง่ายๆ โดยใช้สิ่งนี้:GameCenterView(format: gameCenterViewControllerState) ที่ gameCenterViewControllerState สามารถช่วยให้คุณไปที่หน้ารายละเอียดใน GameCenter

วิธีการใช้กระดานผู้นำ GameKit ใน SwiftUI
มุมมองลีดเดอร์บอร์ดของ GameCenter

สิ่งที่ควรคำนึงถึงขณะใช้ลีดเดอร์บอร์ดของ GameCenter:

  • Simulator Debugging – ด้วยเหตุผลบางประการการพิสูจน์ตัวตนกับ GameCenter นั้นช้ามากในเครื่องจำลอง ดังนั้นจึงควรสร้างแบบจำลองข้อมูลเมื่อใช้เครื่องจำลอง
  • ความท้าทาย – คุณไม่สามารถออก GameKit Challenges แบบเป็นโปรแกรมให้เพื่อนของคุณได้อีกต่อไปเนื่องจากการเลิกใช้งาน คุณต้องทำสิ่งเหล่านั้นด้วยตนเองภายในแดชบอร์ด GameCenter ของผู้ใช้กับ GameKit Achievements นอกจากนี้ ไม่มีทางดูการท้าทายที่คุณส่งไป
  • ความสำเร็จ – กระดานผู้นำแตกต่างจากความสำเร็จของ GameKit ซึ่งคำนวณและแสดงผลต่างกัน แต่ง่ายกว่ามาก นอกจากนี้ยังสามารถดึงข้อมูลเหล่านี้ลงในแอปได้เช่นกัน ดังที่คุณเห็นด้านล่าง:
วิธีการใช้กระดานผู้นำ GameKit ใน SwiftUI
ความท้าทายและความสำเร็จของ GameKit

สรุปผล

คุณสามารถลองใช้แอพ Stair Master Climber iPhone Health &Fitness ฟรีที่ฉันแชร์ด้านบน ฉันชอบที่จะรู้ว่าสิ่งที่คุณคิดเพื่อให้เราสามารถเรียนรู้ร่วมกัน

อย่าลังเลที่จะติดต่อเราทางโซเชียลมีเดียหรือทางอีเมลหากคุณมีคำถามใดๆ