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

### Android SDK 5 से 6 में माइग्रेशन

1.  अपने प्रोजेक्ट को [आधिकारिक दस्तावेज़ीकरण](https://developer.android.com/jetpack/androidx/migrate) के अनुसार AndroidX में माइग्रेट करें।
2.  यदि आप **Firebase Cloud Messaging** का उपयोग कर रहे हैं तो ऐप की **build.gradle** फ़ाइल में एक नया मॉड्यूल जोड़ें।

```groovy title="build.gradle"
implementation 'com.pushwoosh:pushwoosh-firebase:+'
```

जो लोग **Amazon** का उपयोग करते हैं, और **Firebase** का उपयोग नहीं करते हैं, उनके लिए कोई बदलाव आवश्यक नहीं है।

### Android SDK के पिछले संस्करणों से माइग्रेशन

Pushwoosh की अधिकांश कक्षाएं और विधियां 5.0 रिलीज़ के बाद से पदावनत (deprecated) हो गईं और उनमें से कुछ विलुप्त हो गईं। **PushManager**, **BasePushMessageReceiver**, **BaseRegistrationReceiver**, **SendPushTagsCallback**, **PushFragment** और **PushEventListener** कक्षाएं अभी भी `com.pushwoosh:pushwoosh-deprecated` लाइब्रेरी के हिस्से के रूप में उपलब्ध हैं, लेकिन जल्द से जल्द नए API में माइग्रेट करने की अनुशंसा की जाती है।

## PushManager

**PushManager** में विभिन्न सुविधाओं के लिए विभिन्न विधियाँ शामिल थीं। इन विधियों को अब विभिन्न कक्षाओं और पुस्तकालयों के बीच विभाजित किया गया है:\
`com.pushwoosh:pushwoosh`: **Pushwoosh**, **PushwooshNotificationSettings**, **PushwooshInApp**।\
`com.pushwoosh:pushwoosh-badge`: **PushwooshBadge**।\
`com.pushwoosh:pushwoosh-location`: **PushwooshLocation**।\
`com.pushwoosh:pushwoosh-beacon`: **PushwooshBeacon**।

## BaseRegistrationReceiver

**BaseRegistrationReceiver** का उपयोग पुश पंजीकरण और अपंजीकरण घटनाओं को संभालने के लिए किया जाता था। इस रिसीवर को अब सरल कॉलबैक तंत्र द्वारा प्रतिस्थापित किया गया है:

```java
Pushwoosh.getInstance().registerForPushNotifications(result -> {
    if (result.isSuccess()) {
        String token = result.getData();
        // सफल पंजीकरण को संभालें
    }
    else {
        PushwooshException exception = result.getException();
        // पंजीकरण त्रुटि को संभालें
    }
});
```

## BasePushMessageReceiver

**BasePushMessageReceiver** का उपयोग अग्रभूमि (foreground) में पुश सूचना प्राप्त होने पर iOS सूचना व्यवहार की नकल करने के लिए किया जाता था। यह आने वाली सूचना को रद्द करके और **onMessageReceive** कॉलबैक को लागू करके प्राप्त किया गया था। यह बोझिल था और एप्लिकेशन के सक्रिय होने पर मैन्युअल पंजीकरण और एप्लिकेशन के पृष्ठभूमि में जाने पर अपंजीकरण की आवश्यकता होती थी।\
इस रिसीवर को **NotificationServiceExtension** द्वारा प्रतिस्थापित किया गया है:

```txt title="AndroidManifest.xml"
<meta-data
    android:name="com.pushwoosh.notification_service_extension"
    android:value="com.your.package.name.YourNotificationServiceExtension"/>
```

```java title="YourNotificationServiceExtension.java"
public class YourNotificationServiceExtension extends NotificationServiceExtension {
    @Override
    public boolean onMessageReceived(final PushMessage message) {
        if (isAppOnForeground()) {
            Handler mainHandler = new Handler(getApplicationContext().getMainLooper());
            mainHandler.post(() -> {
                handlePush(message);
            });

            // यह इंगित करता है कि सूचना प्रदर्शित नहीं की जानी चाहिए
            return true;
        }

        return false;
    }

    @Override
    protected void startActivityForPushMessage(PushMessage message) {
        super.startActivityForPushMessage(message);
        handlePush(message);
    }

    @MainThread
    private void handlePush(PushMessage message) {
        // TODO: पुश संदेश को संभालें
    }
}
```

इस एक्सटेंशन का उपयोग सूचना आगमन और स्वीकृति घटनाओं को संभालने के लिए भी किया जाता है, इस प्रकार मैन्युअल गतिविधि एकीकरण में उपयोग किए गए सभी बोझिल कोड को प्रतिस्थापित किया जाता है।

## PushFragment

**PushFragment** गतिविधि जीवनचक्र (Activity lifecycle) से जुड़े जटिल एकीकरण के लिए एक हल्का विकल्प था। लेकिन दूसरी ओर इसके लिए **FragmentActivity** वंशानुक्रम की आवश्यकता थी और इसने परोक्ष रूप से अधिक जटिल खंड जीवनचक्र (Fragment lifecycle) का उपयोग किया।\
**PushFragment** और **PushEventListener** को अब **Pushwoosh#registerForPushNotifications(Callback)** और **NotificationServiceExtension** द्वारा प्रतिस्थापित किया गया है।

## कस्टम पुश ब्रॉडकास्ट रिसीवर (PW_NOTIFICATION_RECEIVER)

**PW_NOTIFICATION_RECEIVER** का उपयोग उपयोगकर्ता द्वारा सूचना पर क्लिक करने पर व्यवहार को अनुकूलित करने के लिए किया जाता था। इसने गतिविधि संदर्भ (Activity context) के बाहर सूचनाओं को संभालने और सूचना सामग्री के आधार पर विभिन्न गतिविधियों को खोलने की अनुमति दी। इस एकीकरण ने आंतरिक Pushwoosh SDK API का उपयोग किया जो अब मौजूद नहीं है।\
इस रिसीवर को अब पूरी तरह से **NotificationServiceExtension** द्वारा प्रतिस्थापित किया गया है:

```java title="YourNotificationServiceExtension.java"
public class YourNotificationServiceExtension extends NotificationServiceExtension {
    @Override
    protected void startActivityForPushMessage(PushMessage message) {
    	// super.startActivityForPushMessage() डिफ़ॉल्ट लॉन्चर गतिविधि शुरू करता है
    	// या ${applicationId}.MESSAGE क्रिया के साथ चिह्नित गतिविधि।
    	// इस व्यवहार को ओवरराइड करने के लिए बस इसे कॉल न करें।
        // super.startActivityForPushMessage(message);

        // इसके बजाय अपनी गतिविधि शुरू करें:
        Intent launchIntent  = new Intent(getApplicationContext(), YourActivity.class);             
        launchIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
 
        // (वैकल्पिक) गतिविधि को सूचना डेटा पास करें
        launchIntent.putExtra(Pushwoosh.PUSH_RECEIVE_EVENT, message.toJson().toString());
 
        context.startActivity(launchIntent);
    }
}
```

## सूचना फैक्टरी

सूचना फैक्टरी से जुड़े कुछ ब्रेकिंग बदलाव भी थे:

**1.** **AbsNotificationFactory** को **NotificationFactory** से बदल दिया गया\
**2.** **AbsNotificationFactory#onPushReceived(PushData)** और **AbsNotificationFactory#onPushHandle(Activity)** विधियों को **NotificationServiceExtension** वर्ग (**onMessageReceived**, **startActivityForPushMessage**) से बदल दिया गया।\
**3.** **DefaultNotificationFactory** को **PushwooshNotificationFactory** से बदल दिया गया।\
**4.** **PushData** को **PushMessage** से बदल दिया गया।

## इन-ऐप संदेश

**1.** **InAppFacade** को **PushwooshInApp** से बदल दिया गया।\
**2.** निम्नलिखित API के साथ जावास्क्रिप्ट नेटिव इंटरफ़ेस के लिए `pushwoosh` ऑब्जेक्ट पेश किया गया था:\
**getHwid(): string** - वर्तमान डिवाइस के लिए pushwoosh hwid लौटाता है।\
**getVersion(): string** - वर्तमान pushwoosh SDK संस्करण लौटाता है।\
**postEvent(event: string, attributes?: object, successCallback?: function, errorCallback?: function)** - postEvent अनुरोध भेजता है।\
**sendTags(tags: object)** - वर्तमान डिवाइस से जुड़े टैग भेजें।\
**getTags(successCallback: function, errorCallback?: function)** - वर्तमान डिवाइस से जुड़े टैग लौटाता है।\
**closeInApp()** - इन-ऐप html पेज को बंद करता है।

## अपनी प्रतिक्रिया हमारे साथ साझा करें

आपकी प्रतिक्रिया हमें एक बेहतर अनुभव बनाने में मदद करती है, इसलिए यदि आपको SDK एकीकरण प्रक्रिया के दौरान कोई समस्या आती है तो हम आपसे सुनना पसंद करेंगे। यदि आपको कोई कठिनाई आती है, तो कृपया [इस फॉर्म के माध्यम से](https://docs.google.com/forms/d/e/1FAIpQLSd_0b8jwn-V_JmoPLIxIFYbHACCQhrzidOZV3ELywoQPXRSxw/viewform) हमारे साथ अपने विचार साझा करने में संकोच न करें।