এই নিবন্ধে আমরা কেন এবং কীভাবে আপনার অ্যাপের মধ্যে গেমসেন্টারের লিডারবোর্ড প্রয়োগ করতে হবে সে সম্পর্কে কথা বলব।
কেন গেমসেন্টার একটি বিশাল পুনরুজ্জীবন তৈরি করছে
আপনি স্কোরবোর্ড ছাড়াই আইফোন গেমগুলি তৈরি করতে পারেন, তবে লিডারবোর্ডগুলি গেমটিকে আরও প্রতিযোগিতামূলক বোধ করতে সহায়তা করতে পারে, যেমন লোকেরা বিশ্বজুড়ে একে অপরের বিরুদ্ধে প্রতিযোগিতা করছে।
আপনার নিজের ব্যাকএন্ড তৈরি এবং পরিচালনা করার পরিবর্তে, গেমসেন্টার লিডারবোর্ড আপনাকে ট্র্যাফিকের সাথে অসীমভাবে স্কেল করার অনুমতি দেয়, অনুমোদনের জন্য একটি সম্পূর্ণ লগইন পৃষ্ঠা এড়িয়ে যায়, ছবি, নাম এবং বন্ধুরা একই গেম খেলতে পারে – সব কিছুই আপনার ব্যবহারকারীদের প্রবেশ না করেই৷
বিশেষ করে iOS 16 এর সাথে, Apple এটির উন্নতিতে আরও বেশি বিনিয়োগ করছে এবং আরও বেশি অ্যাপ ব্যবহার চালাচ্ছে, যেমন Push Notifications এর মাধ্যমে যখন আপনার বন্ধু গেমে আপনার স্কোরকে হারায়।
SwiftUI শেখার আমার যাত্রায়, আমি অ্যাপ তৈরি এবং প্রকাশ করছি, কারণ আইএমও এটি শেখার সর্বোত্তম উপায়।
কীভাবে এটির অনেক কিছু করা যায় সে সম্পর্কে খুব বেশি আপডেট করা ডকুমেন্টেশন ছিল না, বিশেষত সুইফটইউআইয়ের সাথে বা অ্যাসিঙ্কের আবির্ভাবের সাথে এবং সুইফটে অপেক্ষা করার জন্য কিছুই নেই। তাই আমি সকলের জন্য আশ্চর্যজনক অ্যাপ তৈরি করার জন্য এটিকে একত্রিত ও সরলীকৃত করেছি। তাই আপনার অ্যাপগুলিও পরীক্ষা করার জন্য আমাকে আমন্ত্রণ জানাতে নির্দ্বিধায়!
প্রাক-প্রয়োজনীয়:
- আপনার একটি অ্যাপল ডেভেলপারের অর্থপ্রদানের অ্যাকাউন্ট থাকতে হবে
- আপনাকে অ্যাপল ডেভেলপার পোর্টালের প্রভিশনিং প্রোফাইল বিভাগে আপনার অ্যাপের জন্য অ্যাপ আইডি তৈরি করতে হবে
- আপনাকে আইটিউনস কানেক্ট কানেক্ট পোর্টালে অ্যাপটি তৈরি করতে হবে
কিভাবে ৬টি ধাপে আপনার iOS লিডারবোর্ড বাস্তবায়ন করবেন
লিডারবোর্ডের বেশিরভাগ কোড লজিক এই ফাইলে আছে যদি আপনি এগিয়ে যেতে চান। এখানে নিম্নলিখিত পদক্ষেপগুলি রয়েছে:
১. কিভাবে অ্যাপ স্টোর কানেক্ট লিডারবোর্ড তৈরি করবেন
একবার আপনি অ্যাপ স্টোর কানেক্ট পোর্টালে অ্যাপটি সফলভাবে তৈরি করলে, অ্যাপটির জন্য পরিষেবা ট্যাবে যান -> এবং নিশ্চিত করুন যে আপনি গেমসেন্টার পৃষ্ঠায় আছেন।
তারপরে "+" চিহ্ন ব্যবহার করে একটি নতুন লিডারবোর্ড যোগ করুন, যা হয় "ক্লাসিক" (স্কোরগুলি কখনই রিসেট নয়) বা "পুনরাবৃত্ত" (আপনার ফ্রিকোয়েন্সি সেটিংসের উপর ভিত্তি করে স্কোর রিসেট) হতে পারে।
বেশির ভাগ গেমই একটি পুনরাবৃত্ত লিডারবোর্ড পছন্দ করে যাতে লিডারবোর্ডে বিশৃঙ্খল না থাকে এবং উচ্চ স্কোরে পৌঁছানো অসম্ভব হয়ে পড়ে।
আপনি সেখানে যে লিডারবোর্ড আইডি ইনপুট করবেন সেটিই আপনাকে কোডের সব জায়গায় ব্যবহার করতে হবে।
2. কিভাবে গেমসেন্টার প্রমাণীকরণ সেট আপ করবেন
প্রথমত, এই কার্যকারিতাগুলির যে কোনও কাজ করার জন্য আপনাকে গেমসেন্টারে ব্যবহারকারীদের প্রমাণীকরণ করতে হবে৷
তাই আমরা এটি করার জন্য এই কোডটি ব্যবহার করব, যা মূলত নিশ্চিত করে যে আপনি (GKLocalPlayer.local) প্রমাণীকৃত, অথবা যদি একটি ত্রুটি থাকে তবে তা প্রিন্ট করে:
func authenticateUser() {
GKLocalPlayer.local.authenticateHandler = { vc, error in
guard error == nil else {
print(error?.localizedDescription ?? "")
return
}
}
}
ব্যবহারকারী প্রমাণীকৃত হলে, আপনি UI এ একটু পপআপ দেখতে পাবেন। যদি না হয়, ব্যবহারকারীকে তাদের গেমসেন্টার অ্যাকাউন্টে লগইন করার জন্য একটি পৃষ্ঠায় নিয়ে যাওয়া হবে৷
৷3. কিভাবে UI এ লিডারবোর্ড আইটেম প্রদর্শন করবেন
গেমসেন্টার ভিউকন্ট্রোলার লিডারবোর্ড (GKLeaderboard) থেকে ডেটা দূরে রাখার জন্য, আপনাকে loadLeaderboards
ব্যবহার করতে হবে .
আপনি loadEntries
পরিবর্তন করতে পারেন .global
থেকে ফাংশন .friends
এ শুধুমাত্র আপনার বন্ধুদের টানতে।
আপনি প্রতিটি প্লেয়ারের উপর পুনরাবৃত্তি করে এবং একটি loadPhoto
সম্পাদন করে প্রতিটি প্লেয়ারের জন্য ছবি পুনরুদ্ধার করতে পারেন .
NSRang(1...5)
ব্যবহার করা হচ্ছে , আপনি কতজন প্লেয়ার প্রদর্শন করবেন তা চয়ন করতে পারেন। এটি লিডারবোর্ড থেকে সর্বোচ্চ 5 স্কোর সহ ব্যবহারকারীদের টেনে আনে এবং ব্যবহারকারী না থাকলে কিছুই ফেরত দেয় না, যেমন ক্ষেত্রে যখন চক্রটি একটি পুনরাবৃত্ত লিডারবোর্ডের জন্য রিফ্রেশ হয়।
আপনি যদি অ্যাসিঙ্ক-অপেক্ষার সুবিধা নেন তাহলে লিডারবোর্ড থেকে ডেটা টেনে আনার মতো দেখতে এটিই হতে পারে:
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. কিভাবে SwiftUI-তে কার্যকারিতা কল করবেন যেভাবে ভিউ/পৃষ্ঠা প্রদর্শিত হয়
আপনি 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. গেমসেন্টার ভিউ কন্ট্রোলার পোর্টাল
কিভাবে প্রদর্শন করবেন
আপনি যখন গেমসেন্টারে লগ ইন করেন, তখন আপনার স্ক্রিনের উপরের ডানদিকে একটি সামান্য বিরক্তিকর আইকন উপস্থিত হয়। আপনি এটিতে ট্যাপ করলে, আপনাকে গেমসেন্টার ভিউ কন্ট্রোলারে নিয়ে যাওয়া হবে। ভাগ্যক্রমে GKAccessPoint.shared.isActive = false
ব্যবহার করে আপনি এটি লুকিয়ে রাখতে পারেন যদি এটি আপনার ডিজাইনের অংশ না হয় .
যেহেতু গেমসেন্টার UI একটি UIKit ViewController
এবং একটি সাধারণ SwiftUI View
নয় , আপনাকে প্রথমে এই UIViewControllerRepresentable তৈরি করতে হবে (যেমন আপনি এখানে দেখতে পাচ্ছেন), একটি ভিন্ন বোতাম ব্যবহার করে গেমসেন্টার চালু করতে,
একবার আপনি আপনার প্রকল্পে সেই ফাইলটি যোগ করলে, আপনি গেমসেন্টার পোর্টালটি কেবল এটি ব্যবহার করে প্রদর্শন করতে পারেন:GameCenterView(format: gameCenterViewControllerState)
যেখানে gameCenterViewControllerState আপনাকে গেমসেন্টারে একটি বিশদ পৃষ্ঠায় যেতে সাহায্য করতে পারে৷
গেমসেন্টারের লিডারবোর্ড ব্যবহার করার সময় যে বিষয়গুলি মাথায় রাখতে হবে:
- সিমুলেটর ডিবাগিং - কিছু কারণে গেমসেন্টারে প্রমাণীকরণ একটি সিমুলেটরে অত্যন্ত ধীর, তাই সিমুলেটর ব্যবহার করার সময় ডেটার একটি উপহাস তৈরি করাও বোধগম্য হতে পারে।
- চ্যালেঞ্জস - অবচয়জনিত কারণে আপনি আপনার বন্ধুদের জন্য প্রোগ্রাম্যাটিকভাবে গেমকিট চ্যালেঞ্জ ইস্যু করতে পারবেন না। পরিবর্তে, আপনাকে গেমকিট অর্জনের বিরুদ্ধে ব্যবহারকারীর গেমসেন্টার ড্যাশবোর্ডের মধ্যে ম্যানুয়ালি সেগুলি করতে হবে। এছাড়াও, আপনার পাঠানো চ্যালেঞ্জ দেখার কোনো উপায় নেই।
- অর্জন - লিডারবোর্ডগুলি গেমকিট অর্জন থেকে আলাদা, যা গণনা করা হয় এবং ভিন্নভাবে প্রদর্শিত হয়, তবে অনেক সহজ। সেগুলিকেও অ্যাপে টানা যেতে পারে, আপনি নীচে দেখতে পারেন:
র্যাপিং আপ
আপনি বিনামূল্যে ওপেন সোর্স সিঁড়ি মাস্টার ক্লাইম্বার আইফোন স্বাস্থ্য এবং ফিটনেস অ্যাপটি ব্যবহার করে দেখতে পারেন যা আমি উপরে শেয়ার করেছি। আমি আপনার মতামত জানতে চাই যাতে আমরা একসাথে শিখতে পারি।
আপনার কোন প্রশ্ন থাকলে সোশ্যাল মিডিয়াতে বা ইমেলের মাধ্যমে নির্দ্বিধায় আমার সাথে যোগাযোগ করুন৷