# iOS लाइव एक्टिविटीज़

<Aside type="tip">
iOS लाइव एक्टिविटीज़ के बारे में एक वीडियो देखें
<YouTube id="jRrDh_pIZCE" playlabel="यूट्यूब वीडियो: iOS लाइव एक्टिविटीज़" /> 
</Aside>


[लाइव एक्टिविटीज़](https://developer.apple.com/design/human-interface-guidelines/live-activities) आपके ऐप का सबसे ताज़ा डेटा iPhone या iPad की लॉक स्क्रीन पर और डायनामिक आइलैंड में दिखाती हैं। यह सुविधा उपयोगकर्ताओं को एक नज़र में लाइव जानकारी देखने और प्रदर्शित जानकारी से संबंधित त्वरित कार्य करने की अनुमति देती है।

लाइव एक्टिविटीज़ का उपयोग करने के कुछ उदाहरण यहां दिए गए हैं:

*   डिलीवरी ऐप में ऑर्डर की स्थिति दिखाएं;
*   ट्रेनिंग ऐप में रीयल-टाइम काउंटडाउन प्रदान करें;
*   टैक्सी ऐप में ट्रैकिंग जानकारी दिखाएं;
*   स्पोर्ट्स ऐप में गेम के आँकड़े और वर्तमान स्कोर प्रदर्शित करें;
*   मौसम ऐप में घंटे के हिसाब से पूर्वानुमान प्रदान करें।

आप नीचे बताए अनुसार Pushwoosh iOS SDK का उपयोग करके लाइव एक्टिविटीज़ को सक्षम कर सकते हैं। लाइव एक्टिविटीज़ को प्रबंधित करने और उनकी सामग्री को अपडेट करने के लिए, [/updateLiveActivity](/hi/developer/api-reference/ios-live-activities-api#updateliveactivity) विधि का उपयोग करें।



## सेटअप 
<Aside type="caution" title="महत्वपूर्ण" >
Pushwoosh में लाइव एक्टिविटीज़ केवल [टोकन-आधारित कॉन्फ़िगरेशन](/hi/developer/first-steps/connect-messaging-services/ios-configuration/ios-token-based-configuration/) का समर्थन करती हैं। [प्रमाणपत्र-आधारित कॉन्फ़िगरेशन](/hi/developer/first-steps/connect-messaging-services/ios-configuration/ios-platform-configuration/) समर्थित नहीं है।
</Aside> 

### एक विजेट एक्सटेंशन जोड़ें

1.  एक नया लक्ष्य बनाएँ

**File > New > Target** पर जाएँ और **Widget Extension** चुनें।

<img src="/ios-push-notifications-ios-live-activities-1.webp" alt=""/>

2.  विजेट एक्सटेंशन कॉन्फ़िगरेशन
कृपया एक नाम दर्ज करें और **Include Live Activity** का चयन करना सुनिश्चित करें और **Finish** पर क्लिक करें।

<img src="/ios-push-notifications-ios-live-activities-2.webp" alt=""/>

### Info.plist कॉन्फ़िगरेशन
प्राथमिक लक्ष्य में Info.plist फ़ाइल खोजें, "Supports Live Activities" कुंजी डालें, और इसका मान YES पर सेट करें।

```xml
	<key>NSSupportsLiveActivities</key>
	<true/>
```

### ऐप से लाइव एक्टिविटीज़ सक्षम करना
लाइव एक्टिविटीज़ को सक्षम करने के लिए, उनके कोड को अपने मौजूदा विजेट एक्सटेंशन में जोड़ें या यदि आपके ऐप में पहले से नहीं है तो एक नया बनाएँ। लाइव एक्टिविटीज़ अपने यूजर इंटरफेस के लिए [SwiftUI](https://developer.apple.com/documentation/SwiftUI) और [WidgetKit](https://developer.apple.com/documentation/WidgetKit) कार्यक्षमता का उपयोग करती हैं। ActivityKit प्रत्येक लाइव एक्टिविटी के जीवन चक्र को संभालता है: इसका API एक लाइव एक्टिविटी का अनुरोध करने, अपडेट करने और समाप्त करने और ActivityKit पुश नोटिफिकेशन प्राप्त करने के लिए उपयोग किया जाता है। आप [Apple दस्तावेज़ीकरण](https://developer.apple.com/documentation/activitykit/displaying-live-data-with-live-activities) में लाइव एक्टिविटीज़ के बारे में अधिक जान सकते हैं।

 1. Xcode में अपने प्रोजेक्ट की ContentView फ़ाइल पर नेविगेट करें और एक बटन बनाएँ

```swift
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()
}
```
<img src="/ios-push-notifications-ios-live-activities-4.webp" alt=""/>

 2. लाइव एक्टिविटीज़ को प्रबंधित करने के लिए एक LiveActivityManager.swift फ़ाइल बनाएँ

```swift
import Foundation
import ActivityKit
import UIKit
import PushwooshFramework
import 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)")
        }
    }
}

```

 3. बस, अब हम प्रोजेक्ट चलाते हैं और 'Start Live Activity' बटन दबाते हैं। फिर हम लॉक स्क्रीन पर नेविगेट करते हैं और बनाई गई लाइव एक्टिविटी देखते हैं।


<img src="/live-activities-1.webp" alt=""/>

### रिमोट पुश नोटिफिकेशन के साथ लाइव एक्टिविटी शुरू करें

1.  रिमोट पुश नोटिफिकेशन के माध्यम से एक लाइव एक्टिविटी शुरू करने के लिए, आपको Pushwoosh को pushToStartTokenUpdates टोकन भेजना होगा।

```swift
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)
            }
        }
    }
}
```
2.  रिमोट पुश नोटिफिकेशन के साथ एक लाइव एक्टिविटी शुरू करें

<Aside type="tip">
 दूरस्थ रूप से एक लाइव एक्टिविटी शुरू करने के अनुरोध पर निर्देशों और उदाहरणों के लिए हमारे [Pushwoosh API संदर्भ](/hi/developer/api-reference/ios-live-activities-api#startliveactivity) का पालन करें।
</Aside>

### लाइव एक्टिविटीज़ का प्रबंधन

Pushwoosh iOS SDK लाइव एक्टिविटीज़ के साथ काम करने के लिए निम्नलिखित विधियाँ प्रदान करता है:

```swift
// Send Live Activity Push To Start Token to Pushwoosh
static func sendPushToStartLiveActivity(token: String)
static func sendPushToStartLiveActivity(token: String, completion: @escaping (Error?) -> Void)

// Start Live Activity Methods with Activity ID
static func startLiveActivity(token: String, activityId: String)
static func startLiveActivity(token: String, activityId: String, completion: @escaping (Error?) -> Void)

// Stop Live Activity Methods
static func stopLiveActivity()
static func stopLiveActivity(completion: @escaping (Error?) -> Void)

static func stopLiveActivity(activityId: String)
static func stopLiveActivity(activityId: String, completion: @escaping (Error?) -> Void)

```

आप एक्टिविटी आईडी पैरामीटर का उपयोग करके सेगमेंट द्वारा लाइव एक्टिविटीज़ को भी अपडेट कर सकते हैं। एक एक्टिविटी बनाते समय, आपको विधि में एक अद्वितीय एक्टिविटी आईडी पैरामीटर पास करना होगा, जो एक विशिष्ट उपयोगकर्ता सेगमेंट के लिए प्रासंगिक होगा।

उदाहरण के लिए, N उपयोगकर्ताओं ने एक लाइव एक्टिविटी में एक ही ईवेंट की सदस्यता ली है। यह आवश्यक है कि एक्टिविटी आईडी पैरामीटर इन सभी N उपयोगकर्ताओं के लिए अद्वितीय हो।

जब आप एक लाइव एक्टिविटी के साथ काम करना समाप्त कर लें, तो इन विधियों का उपयोग करें:
```swift
static func stopLiveActivity()
static func stopLiveActivity(completion: @escaping (Error?) -> Void)
```
<Aside type="note">
 आप [Pushwoosh API](/hi/developer/api-reference/ios-live-activities-api) के माध्यम से iOS लाइव एक्टिविटीज़ का प्रबंधन कर सकते हैं।
</Aside>

### `Setup()` विधि।
Pushwoosh `PushwooshLiveActivities.setup` फ़ंक्शन पेश करके एक्टिविटी आईडी के हस्तांतरण को सरल बनाता है, जो एप्लिकेशन के भीतर एक लाइव एक्टिविटी के पूरे जीवनचक्र को संभालता है। यह फ़ंक्शन स्वचालित रूप से pushToStart और pushToUpdate टोकन अपडेट दोनों को सुनता है। इस विधि का उपयोग करके, एप्लिकेशन को अब लाइव एक्टिविटीज़ की शुरुआत को मैन्युअल रूप से ट्रैक करने या एक्टिविटी अपडेट के लिए टोकन अपडेट प्रबंधित करने की आवश्यकता नहीं है।

हम इस विधि का उपयोग करने की सलाह देते हैं क्योंकि यह हमारी तरफ से सभी टोकन प्रबंधन को संभालता है, जिससे आपको अपने अंत में बनाए रखने के लिए आवश्यक कोड की मात्रा कम हो जाती है। यह एकीकरण को सरल बनाता है और आपके ऐप के लिए एक सहज, अधिक कुशल अनुभव सुनिश्चित करता है।

AppDelegate में, सुनिश्चित करें कि आप `PushwooshFramework` और `PushwooshLiveActivities` आयात करते हैं और `Pushwoosh.LiveActivities` मॉड्यूल से `setup` विधि को कॉल करते हैं।

**AppDelegate.swift**
```swift
if #available(iOS 16.1, *) {
    Pushwoosh.LiveActivities.setup(FoodDeliveryAttributes.self)
}
```
**FoodDeliveryAttributes**

```swift
import WidgetKit
import SwiftUI
import ActivityKit
import PushwooshFramework
import 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` प्रोटोकॉल के अनुरूप है। इसका उपयोग ऐप के भीतर एक लाइव एक्टिविटी की विशेषताओं को परिभाषित करने के लिए किया जाता है।

<Aside type="note">
 आप Pushwoosh API की /updateLiveActivity विधि का उपयोग करके लाइव एक्टिविटीज़ का प्रबंधन और उनकी सामग्री को अपडेट कर सकते हैं। अधिक जानकारी के लिए, कृपया [यह गाइड](/hi/developer/api-reference/ios-live-activities-api) पढ़ें।
</Aside>

## माइग्रेशन गाइड

Pushwoosh iOS SDK के संस्करण 6.8.0 से, हमने SDK संरचना को अपडेट किया है। लाइव एक्टिविटीज़ विधियों को अब `PushwooshLiveActivities` मॉड्यूल के माध्यम से एक्सेस किया जाता है।

यदि आप Pushwoosh iOS SDK के 6.8.0 से पहले के संस्करण का उपयोग कर रहे थे और नीचे सूचीबद्ध विधियों को कॉल कर रहे थे, और तब से संस्करण 6.8.0 या बाद के संस्करण में अपडेट किया है, तो कृपया निम्नलिखित परिवर्तनों पर ध्यान दें:

```swift
static func setup<Attributes: PushwooshLiveActivityAttributes>(_ activityType: Attributes.Type)
static func defaultSetup()
static func defaultStart(_ activityId: String, attributes: [String: Any], content: [String: Any])
```

अब, इन विधियों तक पहुँचने के लिए, आपको LiveActivity मॉड्यूल का उपयोग करना चाहिए।

```swift
import PushwooshFramework
import PushwooshLiveActivities

```

```swift
Pushwoosh.LiveActivities.setup(FoodDeliveryAttributes.self)
Pushwoosh.LiveActivities.defaultSetup()
Pushwoosh.LiveActivities.defaultStart("activity_id",
                            attributes: ["key_attribute": "value_attribute"],
                            content: ["key_content": "value_content"])
```

हमने नीचे सूचीबद्ध `Pushwoosh.sharedInstance()` के माध्यम से विधियों के लिए समर्थन भी बनाए रखा है, लेकिन कृपया ध्यान दें कि इन विधियों को भविष्य के रिलीज में पदावनत कर दिया जाएगा।

``` swift
// Send Live Activity Push To Start Token to Pushwoosh
static func sendPushToStartLiveActivity(token: String)
static func sendPushToStartLiveActivity(token: String, completion: @escaping (Error?) -> Void)

// Start Live Activity Methods with Activity ID
static func startLiveActivity(token: String, activityId: String)
static func startLiveActivity(token: String, activityId: String, completion: @escaping (Error?) -> Void)

// Stop Live Activity Methods
static func stopLiveActivity()
static func stopLiveActivity(completion: @escaping (Error?) -> Void)

static func stopLiveActivity(activityId: String)
static func stopLiveActivity(activityId: String, completion: @escaping (Error?) -> Void)
```