इस लेख में हम बात करेंगे कि आपके ऐप में गेम सेंटर के लीडरबोर्ड को क्यों और कैसे लागू किया जाए।
क्यों GameCenter एक विशाल पुनरुद्धार कर रहा है
आप स्कोरबोर्ड के बिना iPhone गेम बना सकते हैं, लेकिन लीडरबोर्ड गेम को अधिक प्रतिस्पर्धी महसूस कराने में मदद कर सकते हैं, जैसे लोग दुनिया भर में एक दूसरे के खिलाफ प्रतिस्पर्धा कर रहे हैं।
अपने स्वयं के बैकएंड को बनाने और प्रबंधित करने के बजाय, गेमसेंटर लीडरबोर्ड आपको असीमित ट्रैफ़िक के साथ स्केल करने की अनुमति देता है, प्राधिकरण के लिए एक संपूर्ण लॉगिन पृष्ठ को छोड़ देता है, छवि, नाम और एक ही गेम खेलने वाले दोस्तों को प्राप्त करता है - बिना आपके उपयोगकर्ताओं को कुछ भी दर्ज किए।
विशेष रूप से iOS 16 के साथ, Apple इसे बेहतर बनाने में अधिक निवेश कर रहा है, और ऐप का अधिक उपयोग कर रहा है, जैसे पुश नोटिफिकेशन के माध्यम से जब आपका मित्र गेम में आपके स्कोर को पीछे छोड़ देता है।
स्विफ्टयूआई सीखने की अपनी यात्रा में, मैं ऐप बना रहा हूं और प्रकाशित कर रहा हूं, क्योंकि आईएमओ सीखने का सबसे अच्छा तरीका है।
इसमें से बहुत कुछ कैसे किया जाए, इस पर बहुत अधिक अद्यतन दस्तावेज नहीं थे, विशेष रूप से स्विफ्टयूआई के साथ और न ही एसिंक के आगमन के साथ और स्विफ्ट में प्रतीक्षा करें। इसलिए मैंने सभी के लिए अद्भुत ऐप्स बनाने के लिए इसे समेकित और सरल बनाया। तो बेझिझक मुझे अपने ऐप्स का भी परीक्षण करने के लिए आमंत्रित करें!
पूर्व-आवश्यकताएं:
- आपके पास एक Apple डेवलपर सशुल्क खाता होना चाहिए
- आपको ऐप्पल डेवलपर पोर्टल के प्रोविज़निंग प्रोफाइल सेक्शन में अपने ऐप के लिए ऐप आईडी बनानी होगी
- आपको iTunes Connect Connect पोर्टल में ऐप बनाना होगा
6 चरणों में अपने iOS लीडरबोर्ड को कैसे लागू करें
यदि आप आगे छोड़ना चाहते हैं तो लीडरबोर्ड के लिए अधिकांश कोड तर्क इस फ़ाइल में है। ये चरण इस प्रकार हैं:
1. ऐप स्टोर कनेक्ट लीडरबोर्ड कैसे बनाएं
ऐप स्टोर कनेक्ट पोर्टल में ऐप सफलतापूर्वक बनाने के बाद, ऐप के लिए सर्विसेज टैब पर जाएं -> और सुनिश्चित करें कि आप गेम सेंटर पेज में हैं।
फिर "+" चिह्न का उपयोग करके एक नया लीडरबोर्ड जोड़ें, जो या तो "क्लासिक" (स्कोर कभी रीसेट नहीं होता) या "आवर्ती" (आपकी आवृत्ति सेटिंग्स के आधार पर स्कोर रीसेट) हो सकता है।
अधिकांश गेम आवर्ती लीडरबोर्ड को पसंद करते हैं ताकि लीडरबोर्ड उच्च स्कोर तक पहुंचने के लिए पुराने असंभव से भरा न हो।
आप जिस लीडरबोर्ड आईडी को इनपुट करते हैं, वह वह है जिसे आपको कोड के सभी स्थानों पर उपयोग करने की आवश्यकता होती है।
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-wait का लाभ उठाते हैं तो लीडरबोर्ड से डेटा खींचना ऐसा दिखाई दे सकता है:
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. जैसे ही व्यू/पेज दिखाई देता है, स्विफ्टयूआई में कार्यक्षमता को कैसे कॉल करें
आप onAppear
. का लाभ उठा सकते हैं वास्तव में कॉल को प्रमाणित करने और लोड करने के लिए दृश्य का जीवनचक्र कार्य करता है, लेकिन यदि आप इसे पसंद करते हैं तो आप इसे एक बटन के टैप पर भी कर सकते हैं:
.onAppear(){
if !GKLocalPlayer.local.isAuthenticated {
authenticateUser()
} else if playersList.count == 0 {
Task{
await loadLeaderboard()
}
}
}
5. सबमिट किए गए स्कोर कैसे लोड करें
स्कोर लोड करने के लिए, आपको उन्हें भी जमा करना होगा। submitScore
फ़ंक्शन इसमें आपकी सहायता कर सकता है।
- द
flightsClimbed
वेरिएबल में वह स्कोर होना चाहिए जिसे आप सबमिट करना चाहते हैं। - GameKit लीडरबोर्ड के जीवन के लिए केवल आपके सर्वश्रेष्ठ स्कोर को प्रदर्शित करना सुनिश्चित करता है।
- द
leaderboardId
इसमें वह मान होता है जिसे आप अपने ऐप स्टोर कनेक्ट खाते में मैन्युअल रूप से दर्ज करते हैं:
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 उपलब्धियों से भिन्न होते हैं, जिनकी गणना और प्रदर्शन अलग-अलग तरीके से किया जाता है, लेकिन यह बहुत आसान है। उन्हें ऐप में भी खींचा जा सकता है, जैसा कि आप नीचे देख सकते हैं:
रैपिंग अप
आप मुफ्त ओपन-सोर्स स्टेयर मास्टर क्लाइंबर आईफोन हेल्थ एंड फिटनेस ऐप को आज़मा सकते हैं जिसे मैंने ऊपर साझा किया है। मुझे यह जानना अच्छा लगेगा कि आप क्या सोचते हैं ताकि हम एक साथ सीख सकें।
यदि आपके कोई प्रश्न हैं, तो बेझिझक मुझसे सोशल मीडिया या ईमेल पर संपर्क करें।