iOS লাইভ অ্যাক্টিভিটিস
লাইভ অ্যাক্টিভিটিস আপনার অ্যাপের সবচেয়ে সাম্প্রতিক ডেটা iPhone বা iPad-এর লক স্ক্রিনে এবং ডাইনামিক আইল্যান্ডে প্রদর্শন করে। এই বৈশিষ্ট্যটি ব্যবহারকারীদের এক নজরে লাইভ তথ্য দেখতে এবং প্রদর্শিত তথ্যের সাথে সম্পর্কিত দ্রুত কাজ সম্পাদন করতে দেয়।
এখানে লাইভ অ্যাক্টিভিটিস ব্যবহারের কয়েকটি উদাহরণ দেওয়া হলো:
- একটি ডেলিভারি অ্যাপে অর্ডারের স্থিতি দেখান;
- একটি প্রশিক্ষণ অ্যাপে রিয়েল-টাইম কাউন্টডাউন প্রদান করুন;
- একটি ট্যাক্সি অ্যাপে ট্র্যাকিং তথ্য দেখান;
- একটি স্পোর্টস অ্যাপে গেমের পরিসংখ্যান এবং বর্তমান স্কোর প্রদর্শন করুন;
- একটি আবহাওয়া অ্যাপে ঘণ্টার পূর্বাভাস প্রদান করুন।
আপনি নিচে বর্ণিত Pushwoosh iOS SDK ব্যবহার করে লাইভ অ্যাক্টিভিটিস সক্ষম করতে পারেন। লাইভ অ্যাক্টিভিটিস পরিচালনা করতে এবং তাদের বিষয়বস্তু আপডেট করতে, /updateLiveActivity পদ্ধতি ব্যবহার করুন।
সেটআপ
Anchor link toএকটি উইজেট এক্সটেনশন যোগ করুন
Anchor link to১. একটি নতুন টার্গেট তৈরি করুন
File > New > Target-এ যান এবং Widget Extension নির্বাচন করুন।

২. উইজেট এক্সটেনশন কনফিগারেশন অনুগ্রহ করে একটি নাম লিখুন এবং Include Live Activity নির্বাচন করে Finish-এ ক্লিক করুন।

Info.plist কনফিগারেশন
Anchor link toপ্রাথমিক টার্গেটে Info.plist ফাইলটি খুঁজুন, “Supports Live Activities” কী যোগ করুন এবং এর মান YES সেট করুন।
<key>NSSupportsLiveActivities</key> <true/>অ্যাপ থেকে লাইভ অ্যাক্টিভিটিস সক্ষম করা
Anchor link toলাইভ অ্যাক্টিভিটিস সক্ষম করতে, আপনার বিদ্যমান উইজেট এক্সটেনশনে তাদের কোড যোগ করুন অথবা যদি আপনার অ্যাপে এটি না থাকে তবে একটি নতুন তৈরি করুন। লাইভ অ্যাক্টিভিটিস তাদের ইউজার ইন্টারফেসের জন্য SwiftUI এবং WidgetKit কার্যকারিতা ব্যবহার করে। ActivityKit প্রতিটি লাইভ অ্যাক্টিভিটির জীবনচক্র পরিচালনা করে: এর API একটি লাইভ অ্যাক্টিভিটি অনুরোধ, আপডেট এবং শেষ করতে এবং ActivityKit পুশ নোটিফিকেশন গ্রহণ করতে ব্যবহৃত হয়। আপনি Apple ডকুমেন্টেশনে লাইভ অ্যাক্টিভিটিস সম্পর্কে আরও জানতে পারেন।
১. Xcode-এ আপনার প্রকল্পের ContentView ফাইলে যান এবং একটি Button তৈরি করুন
import SwiftUI
struct ContentView: View { var body: some View { VStack(spacing: 20) {
Button(action: { LiveActivityManager.shared.startActivity() }, label: { Text("Start Live Activity") .foregroundColor(.white) .padding() .background(Color.blue) .cornerRadius(10) }) } .padding() }}
#Preview { ContentView()}
২. লাইভ অ্যাক্টিভিটিস পরিচালনা করার জন্য একটি LiveActivityManager.swift ফাইল তৈরি করুন
import Foundationimport ActivityKitimport UIKitimport PushwooshFrameworkimport PushwooshLiveActivities
class LiveActivityManager: NSObject, ObservableObject { public static let shared: LiveActivityManager = LiveActivityManager()
private var currentActivity: Activity<FoodDeliveryAttributes>? = nil
override init() { super.init() }
func startActivity() { guard ActivityAuthorizationInfo().areActivitiesEnabled else { print("You can't start live activity.") return } do { let pushwooshData = PushwooshLiveActivityAttributeData(activityId: "activity_id") let atttribute = FoodDeliveryAttributes(orderNumber: "1234567", pushwoosh: pushwooshData) let initialState = FoodDeliveryAttributes.ContentState( status: "Preparing your meal", estimatedTime: "25 min", emoji: "👨🍳", pushwoosh: nil ) let activity = try Activity<FoodDeliveryAttributes>.request( attributes: atttribute, content: .init(state:initialState , staleDate: nil), pushType: .token ) self.currentActivity = activity
Task { for await pushToken in activity.pushTokenUpdates { let pushTokenString = pushToken.reduce("") { $0 + String(format: "%02x", $1) } print("Activity:\(activity.id) push token: \(pushTokenString)")
// MARK: - Send Push Token to Pushwoosh Pushwoosh.LiveActivities.startLiveActivity( token: pushTokenString, activityId: "activity_id" ) } } } catch { print("Start Activity Error: \(error.localizedDescription)") } }}৩. এটাই সব, এখন আমরা প্রকল্পটি চালাই এবং ‘Start Live Activity’ বোতামটি চাপি। তারপর আমরা লক স্ক্রিনে যাই এবং তৈরি করা লাইভ অ্যাক্টিভিটি দেখতে পাই।

একটি রিমোট পুশ নোটিফিকেশন দিয়ে লাইভ অ্যাক্টিভিটি শুরু করুন
Anchor link to১. রিমোট পুশ নোটিফিকেশনের মাধ্যমে একটি লাইভ অ্যাক্টিভিটি শুরু করতে, আপনাকে Pushwoosh-এ pushToStartTokenUpdates টোকেন পাঠাতে হবে।
func getPushToStartToken() { if #available(iOS 17.2, *) { Task { for await data in Activity<LiveActivityAttributes>.pushToStartTokenUpdates { let token = data.map {String(format: "%02x", $0)}.joined() print("Activity PushToStart Token: \(token)")
// Send `pushToStartTokenUpdates` token to Pushwoosh try await Pushwoosh.LiveActivities.sendPushToStartLiveActivity(token: token) } } }}২. একটি রিমোট পুশ নোটিফিকেশন দিয়ে একটি লাইভ অ্যাক্টিভিটি শুরু করুন
লাইভ অ্যাক্টিভিটিস পরিচালনা
Anchor link toPushwoosh iOS SDK লাইভ অ্যাক্টিভিটিসের সাথে কাজ করার জন্য নিম্নলিখিত পদ্ধতিগুলো প্রদান করে:
// Send Live Activity Push To Start Token to Pushwooshstatic func sendPushToStartLiveActivity(token: String)static func sendPushToStartLiveActivity(token: String, completion: @escaping (Error?) -> Void)
// Start Live Activity Methods with Activity IDstatic func startLiveActivity(token: String, activityId: String)static func startLiveActivity(token: String, activityId: String, completion: @escaping (Error?) -> Void)
// Stop Live Activity Methodsstatic func stopLiveActivity()static func stopLiveActivity(completion: @escaping (Error?) -> Void)
static func stopLiveActivity(activityId: String)static func stopLiveActivity(activityId: String, completion: @escaping (Error?) -> Void)
// Schedule a Live Activity to start at a future date (iOS 26.0+)static func schedule<Attributes: PushwooshLiveActivityAttributes>(attributes: Attributes, contentState: Attributes.ContentState, at startDate: Date, alertTitle: String, alertBody: String) throws -> Activity<Attributes>
// Cancel a scheduled or running Live Activity by its Activity ID (iOS 16.2+)static func cancel<Attributes: PushwooshLiveActivityAttributes>(_ activityType: Attributes.Type, activityId: String)আপনি Activity ID প্যারামিটার ব্যবহার করে সেগমেন্ট অনুযায়ী লাইভ অ্যাক্টিভিটিস আপডেট করতে পারেন। একটি অ্যাক্টিভিটি তৈরি করার সময়, আপনাকে পদ্ধতিতে একটি অনন্য Activity ID প্যারামিটার পাস করতে হবে, যা একটি নির্দিষ্ট ব্যবহারকারী সেগমেন্টের জন্য প্রাসঙ্গিক হবে।
উদাহরণস্বরূপ, N সংখ্যক ব্যবহারকারী একটি লাইভ অ্যাক্টিভিটিতে একই ইভেন্টে সাবস্ক্রাইব করেছেন। এই N সংখ্যক ব্যবহারকারীর সকলের জন্য Activity ID প্যারামিটারটি অনন্য হওয়া আবশ্যক।
যখন আপনি একটি লাইভ অ্যাক্টিভিটির সাথে কাজ শেষ করবেন, তখন এই পদ্ধতিগুলো ব্যবহার করুন:
static func stopLiveActivity()static func stopLiveActivity(completion: @escaping (Error?) -> Void)ভবিষ্যতে শুরু করার জন্য একটি লাইভ অ্যাক্টিভিটি শিডিউল করা
Anchor link toএকটি লাইভ অ্যাক্টিভিটি অবিলম্বে শুরু করার পরিবর্তে, আপনি এটি ভবিষ্যতে শুরু করার জন্য শিডিউল করতে পারেন। alertTitle এবং alertBody ব্যবহারকারীকে স্থানীয় নোটিফিকেশন সতর্কবার্তায় দেখানো হয় যা শিডিউল করা অ্যাক্টিভিটি শুরু হলে ফায়ার হয়:
if #available(iOS 26.0, *) { let startDate = Date().addingTimeInterval(3600) // starts in 1 hour
do { let activity = try Pushwoosh.LiveActivities.schedule( attributes: atttribute, contentState: initialState, at: startDate, alertTitle: "Game starting!", alertBody: "The match is about to begin" ) self.currentActivity = activity } catch { print("Schedule Activity Error: \(error.localizedDescription)") }}startDate অবশ্যই ভবিষ্যতে হতে হবে, অন্যথায় কলটি ত্রুটি দেবে। অ্যাপটি ফোরগ্রাউন্ডে থাকাকালীন মূল থ্রেডে schedule কল করুন। Pushwoosh-এ কোনো শিডিউল-টাইম অনুরোধ নেই: সার্ভার অ্যাক্টিভিটি সম্পর্কে জানতে পারে যখন এটি আসলে শুরু হয় এবং setup() পদ্ধতি দ্বারা ইনস্টল করা একই টোকেন পর্যবেক্ষকের মাধ্যমে তার পুশ টোকেন গ্রহণ করে (নীচে দেখুন)।
অ্যাক্টিভিটি আইডি দ্বারা একটি লাইভ অ্যাক্টিভিটি বাতিল করা
Anchor link toActivity ইনস্ট্যান্সের একটি রেফারেন্স না রেখে তার অ্যাক্টিভিটি আইডি দ্বারা একটি লাইভ অ্যাক্টিভিটি বাতিল করতে cancel(_:activityId:) ব্যবহার করুন:
if #available(iOS 16.2, *) { Pushwoosh.LiveActivities.cancel(FoodDeliveryAttributes.self, activityId: "activity_id")}cancel ডিভাইসে অ্যাক্টিভিটিটি অবিলম্বে শেষ করে এবং Pushwoosh সার্ভারকে অবহিত করে। এটি stopLiveActivity(activityId:) থেকে ভিন্ন, যা শুধুমাত্র সার্ভারকে অবহিত করে এবং ডিভাইসে সরাসরি অ্যাক্টিভিটি শেষ করে না। cancel একটি লাইভ অ্যাক্টিভিটির জন্যও কাজ করে যা schedule দিয়ে শিডিউল করা হয়েছিল কিন্তু এখনও শুরু হয়নি — এটি শুরু হওয়ার আগেই বাতিল হয়ে যায়।
Setup() পদ্ধতি।
Anchor link toPushwoosh PushwooshLiveActivities.setup ফাংশন চালু করে অ্যাক্টিভিটি আইডি স্থানান্তরের প্রক্রিয়া সহজ করে, যা অ্যাপ্লিকেশনের মধ্যে একটি লাইভ অ্যাক্টিভিটির সম্পূর্ণ জীবনচক্র পরিচালনা করে। এই ফাংশনটি স্বয়ংক্রিয়ভাবে pushToStart এবং pushToUpdate টোকেন আপডেটের জন্য শোনে। এই পদ্ধতি ব্যবহার করে, অ্যাপ্লিকেশনটিকে আর লাইভ অ্যাক্টিভিটি শুরু করার ম্যানুয়াল ট্র্যাকিং বা অ্যাক্টিভিটি আপডেটের জন্য টোকেন আপডেট পরিচালনা করতে হবে না।
আমরা এই পদ্ধতিটি ব্যবহার করার সুপারিশ করছি কারণ এটি আমাদের দিকে সমস্ত টোকেন ব্যবস্থাপনা পরিচালনা করে, যা আপনার দিকে রক্ষণাবেক্ষণ করার জন্য প্রয়োজনীয় কোডের পরিমাণ হ্রাস করে। এটি ইন্টিগ্রেশনকে সহজ করে এবং আপনার অ্যাপের জন্য একটি মসৃণ, আরও দক্ষ অভিজ্ঞতা নিশ্চিত করে।
AppDelegate-এ, নিশ্চিত করুন যে আপনি PushwooshFramework এবং PushwooshLiveActivities ইম্পোর্ট করেছেন এবং Pushwoosh.LiveActivities মডিউল থেকে setup পদ্ধতি কল করেছেন।
AppDelegate.swift
if #available(iOS 16.1, *) { Pushwoosh.LiveActivities.setup(FoodDeliveryAttributes.self)}FoodDeliveryAttributes
import WidgetKitimport SwiftUIimport ActivityKitimport PushwooshFrameworkimport PushwooshLiveActivities
struct FoodDeliveryAttributes: PushwooshLiveActivityAttributes { public struct ContentState: PushwooshLiveActivityContentState { var status: String var estimatedTime: String var emoji: String var pushwoosh: PushwooshLiveActivityContentStateData? }
var orderNumber: String var pushwoosh: PushwooshLiveActivityAttributeData}FoodDeliveryAttributes: এই কাঠামোটি PushwooshLiveActivityAttributes প্রোটোকল মেনে চলে। এটি অ্যাপের মধ্যে একটি লাইভ অ্যাক্টিভিটির বৈশিষ্ট্যগুলো সংজ্ঞায়িত করতে ব্যবহৃত হয়।
মাইগ্রেশন গাইড
Anchor link toPushwoosh iOS SDK-এর 6.8.0 সংস্করণ থেকে, আমরা SDK কাঠামো আপডেট করেছি। লাইভ অ্যাক্টিভিটিস পদ্ধতিগুলো এখন PushwooshLiveActivities মডিউলের মাধ্যমে অ্যাক্সেস করা হয়।
আপনি যদি Pushwoosh iOS SDK-এর 6.8.0-এর আগের সংস্করণ ব্যবহার করে থাকেন এবং নীচের তালিকাভুক্ত পদ্ধতিগুলো কল করে থাকেন, এবং তারপর থেকে 6.8.0 বা তার পরবর্তী সংস্করণে আপডেট করে থাকেন, তাহলে অনুগ্রহ করে নিম্নলিখিত পরিবর্তনগুলো লক্ষ্য করুন:
static func setup<Attributes: PushwooshLiveActivityAttributes>(_ activityType: Attributes.Type)static func defaultSetup()static func defaultStart(_ activityId: String, attributes: [String: Any], content: [String: Any])এখন, এই পদ্ধতিগুলো অ্যাক্সেস করতে, আপনার LiveActivity মডিউল ব্যবহার করা উচিত।
import PushwooshFrameworkimport PushwooshLiveActivitiesPushwoosh.LiveActivities.setup(FoodDeliveryAttributes.self)Pushwoosh.LiveActivities.defaultSetup()Pushwoosh.LiveActivities.defaultStart("activity_id", attributes: ["key_attribute": "value_attribute"], content: ["key_content": "value_content"])আমরা নীচের তালিকাভুক্ত Pushwoosh.sharedInstance()-এর মাধ্যমে পদ্ধতিগুলোর জন্য সমর্থন বজায় রেখেছি, কিন্তু অনুগ্রহ করে মনে রাখবেন যে এই পদ্ধতিগুলো ভবিষ্যতের রিলিজে অবচিত (deprecated) করা হবে।
// Send Live Activity Push To Start Token to Pushwooshstatic func sendPushToStartLiveActivity(token: String)static func sendPushToStartLiveActivity(token: String, completion: @escaping (Error?) -> Void)
// Start Live Activity Methods with Activity IDstatic func startLiveActivity(token: String, activityId: String)static func startLiveActivity(token: String, activityId: String, completion: @escaping (Error?) -> Void)
// Stop Live Activity Methodsstatic func stopLiveActivity()static func stopLiveActivity(completion: @escaping (Error?) -> Void)
static func stopLiveActivity(activityId: String)static func stopLiveActivity(activityId: String, completion: @escaping (Error?) -> Void)