# एंड्रॉइड पर लाइव अपडेट

Pushwoosh `pushwoosh-liveupdates` मॉड्यूल (SDK 6.9.0 और बाद के संस्करण) के माध्यम से एंड्रॉइड लाइव अपडेट का समर्थन करता है। लाइव अपडेट एक सतत, प्रगति-शैली की सूचना है जिसे सिस्टम लॉक स्क्रीन पर, सूचना ड्रॉअर में, और स्टेटस बार में एक स्टेटस चिप के रूप में बढ़ावा देता है, ताकि उपयोगकर्ता आपके ऐप को खोले बिना किसी गतिविधि का अनुसरण कर सकें।

पूरा जीवनचक्र सर्वर से संचालित होता है: आपका बैकएंड गतिविधि शुरू होने पर एक पुश भेजता है, जैसे-जैसे यह आगे बढ़ता है और पुश भेजता है, और समाप्त होने पर एक अंतिम पुश भेजता है। SDK प्रत्येक को स्वचालित रूप से प्रस्तुत करता है।

## लाइव अपडेट क्या हैं

लाइव अपडेट एंड्रॉइड 16 (API 36) में एक उपयोगकर्ता-प्रारंभित, समय-संवेदनशील गतिविधि को शुरू से अंत तक सतह पर लाने के तरीके के रूप में पेश किए गए थे। वे प्लेटफ़ॉर्म की प्रगति-केंद्रित सूचनाओं और `Notification.ProgressStyle` API पर आधारित हैं। वैचारिक रूप से वे iOS लाइव गतिविधियों के एंड्रॉइड समकक्ष हैं।

यह पृष्ठ केवल Pushwoosh एकीकरण को कवर करता है। प्लेटफ़ॉर्म व्यवहार, प्रचार नियमों और डिज़ाइन मार्गदर्शन के लिए, आधिकारिक एंड्रॉइड दस्तावेज़ देखें:

- [प्रगति-केंद्रित सूचनाएं](https://developer.android.com/about/versions/16/features/progress-centric-notifications)
- [लाइव अपडेट सूचनाएं बनाएं (व्यूज़)](https://developer.android.com/develop/ui/views/notifications/live-update)
- [लाइव अपडेट सूचनाएं बनाएं (कम्पोज़)](https://developer.android.com/develop/ui/compose/notifications/live-update)

## लाइव अपडेट का उपयोग कब करें

लाइव अपडेट एक ऐसी गतिविधि के लिए हैं जो चल रही है, उपयोगकर्ता-प्रारंभित है, और समय-संवेदनशील है — कुछ ऐसा जिसमें एक स्पष्ट शुरुआत और अंत हो और उपयोगकर्ता अभी सक्रिय रूप से उसकी परवाह करता हो। Pushwoosh ग्राहकों के लिए विशिष्ट परिदृश्य:

- **खाद्य वितरण** — ऑर्डर स्वीकार किया गया, तैयार किया जा रहा है, डिलीवरी के लिए बाहर, आ रहा है।
- **राइड-हेलिंग और टैक्सी** — ड्राइवर सौंपा गया, रास्ते में, आ रहा है, यात्रा प्रगति पर है।
- **ऑर्डर और शिपमेंट ट्रैकिंग** — एक ऑर्डर की लाइव स्थिति जो सक्रिय रूप से पारगमन में है।
- **लाइव खेल और मीडिया** — मैच का स्कोर और समय जैसे-जैसे खेल आगे बढ़ता है।
- **फिटनेस** — बीता हुआ समय और प्रगति के साथ एक सक्रिय कसरत या दौड़।
- **फिनटेक** — एक लेनदेन या सत्यापन प्रवाह जो अपने चरणों से गुजर रहा है।

क्योंकि जीवनचक्र वास्तविक घटनाओं से संचालित होता है जिनके बारे में आपका बैकएंड पहले से ही जानता है (एक ऑर्डर की स्थिति बदलती है, एक कूरियर चलता है), एक लाइव अपडेट आमतौर पर आपके मौजूदा इवेंट प्रवाह में वायर्ड एक API कॉल होता है — न कि कुछ ऐसा जो कोई व्यक्ति हाथ से भेजता है।

<Aside type="caution">
लाइव अपडेट का उपयोग प्रचार, चैट संदेशों, या परिवेशी जानकारी के लिए न करें, और उपयोगकर्ता द्वारा खारिज किए गए लाइव अपडेट को कभी भी दोबारा पोस्ट न करें। एंड्रॉइड प्रचारित सूचनाएं पोस्ट करने की ऐप की क्षमता को रद्द कर सकता है। [उपयुक्त उपयोग पर एंड्रॉइड मार्गदर्शन](https://developer.android.com/develop/ui/views/notifications/live-update#best-practices) का पालन करें।
</Aside>

## आवश्यकताएं

- एंड्रॉइड 16 (API 36) या नया। पुराने उपकरणों पर मॉड्यूल निष्क्रिय रहता है और प्रत्येक लाइव अपडेट API कॉल एक सुरक्षित नो-ऑप है।
- Pushwoosh एंड्रॉइड SDK 6.9.0 या बाद का संस्करण।

## pushwoosh-liveupdates मॉड्यूल जोड़ें

अपने **app/build.gradle** में निर्भरता जोड़ें:

```groovy
dependencies {
    implementation 'com.pushwoosh:pushwoosh-liveupdates:<latest-version>'
}
```

`<latest-version>` को [Maven Central](https://mvnrepository.com/artifact/com.pushwoosh/pushwoosh-liveupdates) से वर्तमान संस्करण से बदलें।

मॉड्यूल स्टार्टअप पर स्वचालित रूप से खोजा जाता है। यह आवश्यक `POST_PROMOTED_NOTIFICATIONS` अनुमति की घोषणा करता है, अपना स्वयं का सूचना चैनल पंजीकृत करता है, और डिफ़ॉल्ट सूचना पथ से पहले लाइव अपडेट पुश को इंटरसेप्ट करता है। कोई अतिरिक्त आरंभीकरण कोड नहीं है — SDK आपके लिए चल रहे और प्रचारित झंडे सेट करता है, बड़े आइकन को डाउनलोड करता है, एक्शन बटन को मैप करता है, और सूचना पोस्ट करता है।

## एक लाइव अपडेट भेजें

आप [मैसेजिंग API v2](/hi/developer/api-reference/messaging-api-v2/) के माध्यम से `android` सामग्री ब्लॉक में एक `live_update` ऑब्जेक्ट जोड़कर लाइव अपडेट भेजते हैं। एक `transactional` अनुरोध का उपयोग करें — एक लाइव अपडेट उस विशिष्ट उपयोगकर्ता को लक्षित करता है जिसकी गतिविधि को वह ट्रैक करता है। `schedule` फ़ील्ड आवश्यक है; `{ "after": "0s" }` तुरंत भेजता है। जीवनचक्र में तीन ऑपरेशन होते हैं, जो `live_update.op` में सेट होते हैं:

- `OPERATION_START` — एक गतिविधि के लिए पहला पुश। चल रही सूचना पोस्ट करता है।
- `OPERATION_UPDATE` — उसी गतिविधि के लिए बाद का पुश। इसे चुपचाप ताज़ा करता है।
- `OPERATION_END` — टर्मिनल पुश। सूचना को खारिज करता है।

एक ही गतिविधि से संबंधित सभी पुश को एक ही `live_update.id` साझा करना होगा। वह आईडी अपडेट को एक साथ बांधती है और यह भी है कि आप ऐप से अपडेट को खारिज करने के लिए उपयोग करते हैं।

प्रत्येक पुश पूरी तरह से सूचना का वर्णन करता है — पिछले पुश से कुछ भी आगे नहीं बढ़ता है। प्रत्येक फ़ील्ड जिसे आप रखना चाहते हैं, जैसे कि सेगमेंट और बड़ा आइकन, प्रत्येक `OPERATION_UPDATE` के साथ फिर से भेजें; एक छोड़ा गया फ़ील्ड अनुपस्थित के रूप में प्रस्तुत किया जाता है।

### लाइव अपडेट पैरामीटर

ये कुंजियाँ `android` सामग्री ब्लॉक के `live_update` ऑब्जेक्ट के अंदर जाती हैं। शीर्षक, मुख्य भाग और बड़ा आइकन मानक एंड्रॉइड पुश फ़ील्ड (`title`, `body`, `custom_icon`) का उपयोग करते हैं, जो `live_update` के साथ भेजे जाते हैं।

| पैरामीटर | प्रकार | विवरण |
|---|---|---|
| `op` | स्ट्रिंग | जीवनचक्र ऑपरेशन: `OPERATION_START`, `OPERATION_UPDATE`, या `OPERATION_END`। आवश्यक। |
| `id` | स्ट्रिंग | एक लाइव अपडेट के सभी पुश द्वारा साझा की गई स्थिर गतिविधि आईडी। आवश्यक। |
| `progress` | इंट | प्रगति मान, संचित खंड लंबाई के विरुद्ध मापा जाता है। |
| `progress_indeterminate` | बूल | एक ठोस मान के बजाय एक अनिश्चित एनीमेशन दिखाएं। |
| `progress_bar` | बूल | प्रगति बार को बिल्कुल दिखाएं। डिफ़ॉल्ट `true` है। |
| `segments` | ऐरे | आदेशित प्रगति खंड, प्रत्येक `{ "color": "#RRGGBB", "length": N }`। |
| `extras` | ऑब्जेक्ट | एक कस्टम शैली प्रदाता को पास किया गया मनमाना डेटा। |
| `when` | int64 | हेडर समय एंकर, युग मिलीसेकंड में। |
| `chronometer` | बूल | हेडर समय को एक चालू टाइमर के रूप में दिखाएं। |
| `chronometer_count_down` | बूल | एक चालू टाइमर ऊपर की बजाय नीचे की ओर गिनता है। |
| `show_when` | बूल | हेडर समय कॉलम को बिल्कुल दिखाएं। डिफ़ॉल्ट `true` है। |

<Aside>
`op` मान सटीक एनम नामों `OPERATION_START`, `OPERATION_UPDATE`, या `OPERATION_END` में से एक होना चाहिए — छोटे रूपों को अनदेखा कर दिया जाता है। प्रत्येक फ़ील्ड अपना मूल JSON प्रकार वहन करता है: `segments` एक JSON ऐरे है और `extras` एक JSON ऑब्जेक्ट है, एन्कोडेड स्ट्रिंग्स नहीं।
</Aside>

चार समय फ़ील्ड इस प्रकार संयोजित होते हैं: `show_when` को `false` पर सेट करने के साथ समय छिपा होता है; अन्यथा `when` एंकर है, `chronometer` इसे एक लाइव काउंटर में बदल देता है, और `chronometer_count_down` उस काउंटर को पीछे की ओर चलाता है।

### स्टार्ट पुश

```bash
curl -X POST https://api.pushwoosh.com/messaging/v2/notify \
  -H "Authorization: Token YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "transactional": {
      "application": "XXXXX-XXXXX",
      "platforms": ["ANDROID"],
      "users": { "list": ["customer-42"] },
      "payload": {
        "content": {
          "localized_content": {
            "default": {
              "android": {
                "title": "Order #4521",
                "body": "We are preparing your order",
                "custom_icon": "https://example.com/restaurant.png",
                "live_update": {
                  "op": "OPERATION_START",
                  "id": "order_4521",
                  "progress": 1,
                  "segments": [
                    { "color": "#34A853", "length": 3 },
                    { "color": "#FBBC05", "length": 4 },
                    { "color": "#4285F4", "length": 3 }
                  ],
                  "extras": { "eta": "18:40" }
                }
              }
            }
          }
        }
      },
      "schedule": { "after": "0s" },
      "message_type": "MESSAGE_TYPE_TRANSACTIONAL"
    }
  }'
```

### अपडेट पुश

जब भी गतिविधि आगे बढ़े तो उसी `id` के साथ एक `OPERATION_UPDATE` भेजें। सेगमेंट और आइकन को दोहराएं — एक अपडेट जो उन्हें छोड़ देता है, उनके बिना प्रस्तुत होता है।

```bash
curl -X POST https://api.pushwoosh.com/messaging/v2/notify \
  -H "Authorization: Token YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "transactional": {
      "application": "XXXXX-XXXXX",
      "platforms": ["ANDROID"],
      "users": { "list": ["customer-42"] },
      "payload": {
        "content": {
          "localized_content": {
            "default": {
              "android": {
                "title": "Order #4521",
                "body": "Your courier is on the way",
                "custom_icon": "https://example.com/restaurant.png",
                "live_update": {
                  "op": "OPERATION_UPDATE",
                  "id": "order_4521",
                  "progress": 7,
                  "segments": [
                    { "color": "#34A853", "length": 3 },
                    { "color": "#FBBC05", "length": 4 },
                    { "color": "#4285F4", "length": 3 }
                  ]
                }
              }
            }
          }
        }
      },
      "schedule": { "after": "0s" },
      "message_type": "MESSAGE_TYPE_TRANSACTIONAL"
    }
  }'
```

### एंड पुश

टर्मिनल पुश को केवल ऑपरेशन और आईडी की आवश्यकता होती है।

```bash
curl -X POST https://api.pushwoosh.com/messaging/v2/notify \
  -H "Authorization: Token YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "transactional": {
      "application": "XXXXX-XXXXX",
      "platforms": ["ANDROID"],
      "users": { "list": ["customer-42"] },
      "payload": {
        "content": {
          "localized_content": {
            "default": {
              "android": {
                "live_update": {
                  "op": "OPERATION_END",
                  "id": "order_4521"
                }
              }
            }
          }
        }
      },
      "schedule": { "after": "0s" },
      "message_type": "MESSAGE_TYPE_TRANSACTIONAL"
    }
  }'
```

## उपस्थिति को अनुकूलित करें

SDK `progress`, `progress_indeterminate`, और `segments` से निर्मित एक डिफ़ॉल्ट प्रगति शैली भेजता है। प्रगति बार पर पूर्ण नियंत्रण लेने के लिए, `LiveUpdateProgressStyleProvider` लागू करें और स्वयं एक `Notification.ProgressStyle` को आकार दें।

प्रदाता एकल अनुकूलन बिंदु है। SDK अभी भी चैनल सेटअप, चल रहे और प्रचारित झंडे, बड़े आइकन, एक्शन बटन और हेडर समय का मालिक है — एक कस्टम प्रदाता केवल प्रगति बार को आकार दे सकता है, इसलिए यह प्रचार पात्रता को नहीं तोड़ सकता है। यह स्टेटलेस होना चाहिए: लौटाई गई शैली को केवल आपूर्ति की गई `LiveUpdateState` से प्राप्त करें। यदि यह फेंकता है, तो SDK डिफ़ॉल्ट शैली पर वापस आ जाता है और सूचना अभी भी पोस्ट होती है।

<Tabs>
<TabItem label="Java">
```java
import android.app.Notification;
import androidx.annotation.NonNull;
import com.pushwoosh.liveupdates.LiveUpdateProgressStyleProvider;
import com.pushwoosh.liveupdates.LiveUpdateSegment;
import com.pushwoosh.liveupdates.LiveUpdateState;
import java.util.List;

public class OrderStyleProvider implements LiveUpdateProgressStyleProvider {
    @NonNull
    @Override
    public Notification.ProgressStyle createStyle(@NonNull LiveUpdateState state) {
        Notification.ProgressStyle style = new Notification.ProgressStyle();
        if (state.getProgress() != null) {
            style.setProgress(state.getProgress());
        }
        style.setProgressIndeterminate(state.isProgressIndeterminate());

        List<LiveUpdateSegment> segments = state.getSegments();
        int boundary = 0;
        for (int i = 0; i < segments.size(); i++) {
            LiveUpdateSegment seg = segments.get(i);
            style.addProgressSegment(
                new Notification.ProgressStyle.Segment(seg.getLength()).setColor(seg.getColor()));
            boundary += seg.getLength();
            if (i < segments.size() - 1) {
                style.addProgressPoint(new Notification.ProgressStyle.Point(boundary));
            }
        }
        return style;
    }
}
```
</TabItem>
<TabItem label="Kotlin">
```kotlin
import android.app.Notification
import com.pushwoosh.liveupdates.LiveUpdateProgressStyleProvider
import com.pushwoosh.liveupdates.LiveUpdateState

class OrderStyleProvider : LiveUpdateProgressStyleProvider {
    override fun createStyle(state: LiveUpdateState): Notification.ProgressStyle {
        val style = Notification.ProgressStyle()
        state.progress?.let { style.setProgress(it) }
        style.setProgressIndeterminate(state.isProgressIndeterminate)

        val segments = state.segments
        var boundary = 0
        segments.forEachIndexed { i, seg ->
            style.addProgressSegment(
                Notification.ProgressStyle.Segment(seg.length).setColor(seg.color))
            boundary += seg.length
            if (i < segments.size - 1) {
                style.addProgressPoint(Notification.ProgressStyle.Point(boundary))
            }
        }
        return style;
    }
}
```
</TabItem>
</Tabs>

**AndroidManifest.xml** में `<meta-data>` टैग के साथ प्रदाता को पंजीकृत करें। क्लास में एक सार्वजनिक नो-आर्ग्यूमेंट कंस्ट्रक्टर होना चाहिए।

```xml
<meta-data
    android:name="com.pushwoosh.LIVE_UPDATE_STYLE_PROVIDER"
    android:value="com.example.OrderStyleProvider" />
```

`live_update.extras` में भेजे गए JSON को पढ़ने और शैली को अपने स्वयं के व्यावसायिक डेटा के अनुकूल बनाने के लिए `LiveUpdateState.getExtras()` का उपयोग करें।

## अपने ऐप से लाइव अपडेट प्रबंधित करें

सर्वर प्रत्येक `OPERATION_START`, `OPERATION_UPDATE`, और `OPERATION_END` को संचालित करता है, इसलिए लाइव अपडेट पोस्ट करने या ताज़ा करने के लिए कोई ऐप-साइड API नहीं है। `PushwooshLiveUpdates` मुखौटा केवल वही कवर करता है जो सर्वर नहीं कर सकता है — स्थानीय रूप से एक अपडेट को खारिज करना और यह जांचना कि कौन से स्क्रीन पर हैं।

```java
import com.pushwoosh.liveupdates.PushwooshLiveUpdates;

// जब उपयोगकर्ता इन-ऐप गतिविधि समाप्त करता है, तो एक विशिष्ट लाइव अपडेट को खारिज करें,
// सर्वर के टर्मिनल "एंड" पुश की प्रतीक्षा किए बिना
PushwooshLiveUpdates.endLiveUpdate("order_4521");

// इस ऐप द्वारा वर्तमान में दिखाए जा रहे गतिविधि आईडी की सूची बनाएं
List<String> active = PushwooshLiveUpdates.getActiveIds();

// इस ऐप द्वारा दिखाई जा रही हर चीज़ को साफ़ करें, उदाहरण के लिए लॉगआउट पर
PushwooshLiveUpdates.endAllLiveUpdates();
```

सभी विधियाँ किसी भी थ्रेड से कॉल करने के लिए सुरक्षित हैं और एंड्रॉइड 16 से नीचे के उपकरणों पर एक नो-ऑप हैं।

## संबंधित लिंक

- [Pushwoosh एंड्रॉइड SDK अवलोकन](/hi/developer/pushwoosh-sdk/android-sdk/)
- [Pushwoosh एंड्रॉइड SDK API संदर्भ](https://pushwoosh.github.io/pushwoosh-android-sdk/)
- [मैसेजिंग API](/hi/developer/api-reference/messaging-api-v2/)
- [एंड्रॉइड प्रगति-केंद्रित सूचनाएं](https://developer.android.com/about/versions/16/features/progress-centric-notifications)