কম্পিউটার টিউটোরিয়াল

SwiftUI-তে GameCenter লিডারবোর্ড ইন্টিগ্রেট করুন সরল গ্লোবাল কম্পিটিশনের জন্য

এই আর্টিকেলে আমরা আলোচনা করব কেন এবং কীভাবে আপনার অ্যাপে GameCenter-এর লিডারবোর্ড ইমপ্লিমেন্ট করতে হবে।

GameCenter কেন বড় पैমানে ফিরে আসছে

আপনি স্কোরবোর্ড ছাড়া iPhone গেম বানাতে পারেন, কিন্তু লিডারবোর্ড গেমটিকে আরও কম্পিটিটিভ করে তোলে, যেন világ भरের মানুষ একে অপরের সাথে প্রতিযোগিতা করছে।

নিজের ব্যাকএন্ড তৈরি ও ম্যানেজ করার পরিবর্তে, GameCenter লিডারবোর্ড আপনাকে ট্রাফিকের সাথে ইনফিনিট স্কেল করতে দেয়, পুরো লগইন পেজ বাইপাস করতে দেয়, ইমেজ, নাম, এবং একই গেম খেলা বন্ধুদের পাওয়া যায়—ব্যবহারকারীদের কিছুই এন্টার করতে হয় না।

বিশেষ করে iOS 16-এ, Apple এতে আরও سرمایه করছে, এবং পুশ নোটিফিকেশন-এর মাধ্যমে আরও অ্যাপ ইউজ বাড়াচ্ছে, যেমন তোমার বন্ধু গেমে তোমার স্কোর বীট করলে।

SwiftUI শেখার যাত্রায়, আমি অ্যাপ তৈরি ও পাবলিশ করছি, কারণ আমার মতে সেটাই শেখার সেরা উপায়।

SwiftUI-তে বা Swift-এ async/await আসার পর এই सब করার আপডেটেড ডকুমেন্টেশন খুব কম ছিল। তাই আমি সব কনসোলিডেট ও সিম্পলিফাই করলাম যাতে সবাই চমৎকার অ্যাপ বানাতে পারে। তাই আমাকে আপনার অ্যাপ টেস্ট করার জন্য আমন্ত্রণ জানাতে পারেন!

পূর্ব-শর্ত:

  • আপনার একটি Apple Developer পেইড অ্যাকাউন্ট থাকতে হবে
  • Apple Developer Portal-এর প্রোভিশনিং প্রোফাইল সেকশনে আপনার অ্যাপের জন্য App ID তৈরি করতে হবে
  • iTunes Connect Connect পোর্টলে অ্যাপ তৈরি করতে হবে

আপনার iOS লিডারবোর্ড ৬ ধাপে ইমপ্লিমেন্ট করুন

লিডারবোর্ডের অধিকাংশ কোড লজিক এই ফাইলে আছে যদি আপনি এগিয়ে যেতে চান। ধাপগুলো নিচে:

১. App Store Connect-এ লিডারবোর্ড কীভাবে তৈরি করবেন

SwiftUI-তে GameCenter লিডারবোর্ড ইন্টিগ্রেট করুন সরল গ্লোবাল কম্পিটিশনের জন্য
Apple iTunes Connect Portal-এর স্ক্রিনশট

App Store Connect পোর্টলে অ্যাপ সফলভাবে তৈরি হলে, অ্যাপের Services ট্যাবে যান -> এবং নিশ্চিত করুন যে আপনি GameCenter পেজে আছেন।

তবে "+" সাইন ব্যবহার করে একটি নতুন লিডারবোর্ড যোগ করুন, যা হয় "Classic" (স্কোর কখনো রিসেট হয় না) বা "Recurring" (আপনার ফ্রিকোয়েন্সি সেটিং অনুযায়ী স্কোর রিসেট হয়)।

অধিকাংশ গেম recurring লিডারবোর্ড পছন্দ করে যাতে পুরানো অসম্ভব হাই স্কোরগুলো থেকে লিডারবোর্ড গuldig না হয়।

যে LeaderboardID আপনি সেখানে ইনপুট দিবেন, কোডের সকল জায়গায় যা চাইবে সেটি ব্যবহার করতে হবে।

SwiftUI-তে GameCenter লিডারবোর্ড ইন্টিগ্রেট করুন সরল গ্লোবাল কম্পিটিশনের জন্য
নতুন লিডারবোর্ড তৈরির জন্য প্রয়োজনীয় ডিটেইলস

২. GameCenter অথেন্টিকেশন কীভাবে সেট আপ করবেন

প্রথমে, আপনাকে GameCenter-এ ব্যবহারকারীদের অথেন্টিকেট করতে হবে যেকোনো ফাংশন্যালিটির জন্য।

আমরা এই কোডটি ব্যবহার করব, যা নিশ্চিত করে যে আপনি (GKLocalPlayer.local) অথেন্টিকেটেড हैं, নইলে এরর প্রিন্ট করে:

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

যদি ব্যবহারকারী অথেন্টিকেটেড হন, UI-তে একটি ছোট পপআপ দেখবেন। না হলে, ব্যবহারকারী GameCenter অ্যাকাউন্টে লগইন করার পেজে নেওয়া হবে।

SwiftUI-তে GameCenter লিডারবোর্ড ইন্টিগ্রেট করুন সরল গ্লোবাল কম্পিটিশনের জন্য
ব্যবহারকারী লগইন করলে দেখানো সাইন

৩. UI-তে লিডারবোর্ড আইটেম কীভাবে ডিসপ্লে করবেন

GameCenter ViewController লিডারবোর্ড (GKLeaderboard) থেকে ডেটা পাওয়ার জন্য loadLeaderboards ব্যবহার করতে হবে।

আপনি loadEntries ফাংশনকে .global থেকে .friends-এ স্বিচ করতে পারেন শুধু আপনার বন্ধুদের পাওয়ার জন্য।

আপনি প্রতিটি প্লেয়ারের ওপর ইটারেট করে loadPhoto পারফর্ম করে প্রতিটি প্লেয়ারের ইমেজও রিট্রিভ করতে পারেন।

NSRang(1...5) ব্যবহার করে আপনি কতজন প্লেয়ার দেখাবেন সেটা বেছে নিতে পারেন। এটি লিডারবোর্ড থেকে হাইএস্ট ৫ স্কোর والے ইউজারদের পুল করে এবং কোনো ইউজার না থাকলে নাল রিটার্ন করে, যেমন recurring লিডারবোর্ডের সাইকেল রিফ্রেশ হলে।

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 } } 
SwiftUI-তে GameCenter লিডারবোর্ড ইন্টিগ্রেট করুন সরল গ্লোবাল কম্পিটিশনের জন্য
আপনি লিডারবোর্ড ডেটা আপনার অ্যাপে পেতে পারেন

৪. ভিউ/পেজ আসার সাথে সাথে SwiftUI-তে ফাংশন্যালিটি কীভাবে কল করবেন

আপনি ভিউটির onAppear লাইফসাইকেল ফাংশন ব্যবহার করে অথেন্টিকেট এবং লোড করার কল করতে পারেন, অথবা বাটন ট্যাপে করতেও পারেন:

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

৫. সাবমিট করা স্কোর কীভাবে লোড করবেন

স্কোর লোড করতে হলে সাবমিটও করতে হবে। submitScore ফাংশন আপনাকে সাহায্য করবে।

  • flightsClimbed ভেরিয়েবলে আপনি যে স্কোর সাবমিট করতে চান সেটি থাকবে।
  • GameKit নিশ্চিত করে যে লিডারবোর্ডের জীবনকালে শুধু আপনার সেরা স্কোর দেখাবে।
  • leaderboardId মানে App Store Connect অ্যাকাউন্টে আপনি যা ম্যানুয়ালি এন্টার করলেন:
func leaderboard() async{ Task{ try await GKLeaderboard.submitScore( flightsClimbed, context: 0, player: GKLocalPlayer.local, leaderboardIDs: ["com.tfp.stairsteppermaster.flights"] ) } calculateAchievements() }

৬. GameCenter ViewController পোর্টাল কীভাবে ডিসপ্লে করবেন

GameCenter-এ লগইন করলে স্ক্রিনের ডানে উপরে একটি চিড়চিড়ে আইকন দেখায়। সেটাতে ট্যাপ করলে GameCenter ViewController-এ চলে যাবেন। সৌভাগ্যয়, এটি আপনার ডিজাইনের অংশ না হলে GKAccessPoint.shared.isActive = false ব্যবহার করে হাইড করতে পারেন।

GameCenter UI একটি UIKit ViewController, সাধারণ SwiftUI View নয়, তাই আপনাকে প্রথমে এই UIViewControllerRepresentable তৈরি করতে হবে (যেমন এখানে দেখানো হয়েছে), একটি আলাদা বাটন ব্যবহার করে GameCenter লঞ্চ করতে।

এই ফাইল প্রজেক্টে যোগ করলে, আপনি সহজে GameCenter পোর্টাল দেখাতে পারেন: GameCenterView(format: gameCenterViewControllerState) যেখানে gameCenterViewControllerState আপনাকে GameCenter-এ ডিটেইল পেজে যেতে সাহায্য করতে পারে।

SwiftUI-তে GameCenter লিডারবোর্ড ইন্টিগ্রেট করুন সরল গ্লোবাল কম্পিটিশনের জন্য
GameCenter-এর লিডারবোর্ড ভিউ

GameCenter-এর লিডারবোর্ড ব্যবহার করার সময় মনে রাখার বিষয়:

  • Simulator Debugging – কোনো কারণে সিমুলেটরে GameCenter-এ অথেন্টিকেট করা এক্সট্রিমলি স্লো, তাই সিমুলেটর ব্যবহার করার সময় মক ডেটা তৈরি করা বুদ্ধিমানের কাজ।
  • Challenges – অবচিত হওয়ায় আপনি প্রোগ্রাম্যাটিক্যালি GameKit Challenges আপনার বন্ধুদের ইস্যু করতে পারবেন না। বদলে ব্যবহারকারীর GameCenter ড্যাশবোর্ডে ম্যানুয়ালি GameKit Achievements-এর বিপরীতে করতে হবে। আপনার পাঠানো চ্যালেঞ্জগুলো দেখার কোনো উপায় নেই।
  • Achievements – লিডারবোর্ড GameKit Achievements থেকে আলাদা, যা আলাদা ভাবে ক্যালকুলেট ও ডিসপ্লে হয়, কিন্তু অনেক সহজ। সেগুলোও অ্যাপে পুল করা যায়, নিচে দেখুন:
SwiftUI-তে GameCenter লিডারবোর্ড ইন্টিগ্রেট করুন সরল গ্লোবাল কম্পিটিশনের জন্য
GameKit Challenges and Achievements

শেষ কথা

আপনি উপরে শেয়ার করা ফ্রি ওপেন-সোর্স Stair Master Climber iPhone Health & Fitness অ্যাপটি ট্রাই করতে পারেন। আপনার মতামত জানাতে চাই যাতে আমরা একসাথে শিখি।

সোশ্যাল মিডিয়া বা ইমেইলে আমसे যোগাযোগ করতে পারেন আপনার কোনো প্রশ্ন থাকলে।

  1. SwiftUI দিয়ে একটি রবাস্ট ডিজাইন সিস্টেম বানান: একটি পূর্ণ গাইড

  2. আইফোনে অ্যাপ সাবস্ক্রিপশন ক্যানسেল করার ৩টি সহজ ধাপ

  3. আইমেসেজ থেকে অ্যাপ আইকন সহজে সরান: ধাপে ধাপে গাইড

  4. iOS 12-এ Messages-এ ফটো অ্যাক্সেস করুন: ধাপে ধাপে গাইড