# Cordova SDK बेसिक इंटीग्रेशन गाइड

इस सेक्शन में यह जानकारी दी गई है कि Pushwoosh Cordova SDK को अपने एप्लिकेशन में कैसे इंटीग्रेट करें।

## आवश्यक शर्तें

Pushwoosh Cordova SDK को अपने ऐप में इंटीग्रेट करने के लिए, आपको निम्नलिखित की आवश्यकता होगी:

<Aside type="note" title="आवश्यकताएँ">
 - एक [Pushwoosh अकाउंट](https://sso.pushwoosh.com/login)।
 - आपके अकाउंट में सेटअप किया गया एक [Pushwoosh प्रोजेक्ट](/hi/product/first-steps/start-with-your-project/create-your-project)।
 - **iOS इंटीग्रेशन के लिए:**
    - पुश नोटिफिकेशन भेजने के लिए कॉन्फ़िगर किया गया एक iOS प्लेटफ़ॉर्म। हम सबसे सरल तरीके के रूप में [टोकन-आधारित ऑथेंटिकेशन कॉन्फ़िगरेशन](/hi/developer/first-steps/connect-messaging-services/ios-configuration/ios-token-based-configuration/) का उपयोग करने की सलाह देते हैं।
    - सिम्युलेटर पर पुश भेजने के लिए गेटवे को `Sandbox` पर सेट करें।
 - **Android इंटीग्रेशन के लिए:**
    - एक [कॉन्फ़िगर किया गया Android प्लेटफ़ॉर्म](/hi/developer/first-steps/connect-messaging-services/android-configuration/android-firebase-configuration)
    - आपके Firebase प्रोजेक्ट से `google-services.json` फ़ाइल और `package name`।
    - आपके Android एप्लिकेशन से जुड़ा एक Firebase प्रोजेक्ट। यदि आवश्यक हो तो [Firebase सेटअप गाइड](https://firebase.google.com/docs/android/setup#manually_add_firebase) का पालन करें।
 - आपके एप्लिकेशन के लिए Pushwoosh कंट्रोल पैनल से आपका `Pushwoosh Application Code` और [Pushwoosh Device API Token](/hi/developer/api-reference/api-access-token/#device-api-token)।
</Aside>

## इंटीग्रेशन के चरण

### 1. Pushwoosh Cordova SDK डिपेंडेंसी जोड़ें

Pushwoosh Cordova SDK डिपेंडेंसी को अपने प्रोजेक्ट में जोड़ें:

```bash
cordova plugin add pushwoosh-cordova-plugin
```

### 2. Cordova SDK इनिशियलाइज़ेशन

अपनी `index.js` फ़ाइल के रूट कंपोनेंट में, `deviceready` इवेंट हैंडलर के अंदर निम्नलिखित कोड जोड़ें। चरणों का ठीक उसी क्रम में पालन करें:

```javascript title="index.js"
document.addEventListener('deviceready', function() {
    var pushwoosh = cordova.require("pushwoosh-cordova-plugin.PushNotification");

    // 1. Register notification callbacks before initialization
    document.addEventListener('push-receive', function(event) {
        var notification = event.notification;
        console.log("Push received: " + JSON.stringify(notification));
    });

    document.addEventListener('push-notification', function(event) {
        var notification = event.notification;
        console.log("Push opened: " + JSON.stringify(notification));
    });

    // 2. Initialize Pushwoosh
    pushwoosh.onDeviceReady({
        appid: "__YOUR_APP_ID__"
    });

    // 3. Register the device to receive push notifications
    pushwoosh.registerDevice(
        function(status) {
            var pushToken = status.pushToken;
            // Handle successful registration
        },
        function(status) {
            // Handle registration error
        }
    );
}, false);
```

जहाँ:
- `__YOUR_APP_ID__` Pushwoosh कंट्रोल पैनल से एप्लिकेशन कोड है।

<Aside type="caution" title="इनिशियलाइज़ेशन का क्रम महत्वपूर्ण है">
इनिशियलाइज़ेशन अनुक्रम को ऊपर दिखाए गए सटीक क्रम का पालन **करना चाहिए**:

1. **पहले इवेंट लिसनर्स रजिस्टर करें** (`push-receive`, `push-notification`)
2. **फिर** `onDeviceReady()` को कॉल करें
3. **फिर** `registerDevice()` को कॉल करें

इस क्रम को बदलने से निम्नलिखित समस्याएँ हो सकती हैं:

- **`onDeviceReady()` के बाद रजिस्टर किए गए इवेंट लिसनर्स:** यदि ऐप को पुश नोटिफिकेशन (कोल्ड स्टार्ट) पर टैप करके लॉन्च किया गया था, तो `onDeviceReady()` तुरंत लॉन्च नोटिफिकेशन पेलोड को JavaScript को डिलीवर करता है। यदि आपके लिसनर्स उस समय तक रजिस्टर नहीं हुए हैं, तो **लॉन्च नोटिफिकेशन खो जाता है** और इसे रिकवर करने का कोई तरीका नहीं होता है।
- **`onDeviceReady()` से पहले `registerDevice()` को कॉल किया गया:** नेटिव SDK अभी तक आपकी ऐप आईडी के साथ ठीक से कॉन्फ़िगर नहीं हो सकता है, जिससे डिवाइस रजिस्ट्रेशन चुपचाप विफल हो सकता है या एक एरर लौटा सकता है।
- **`registerDevice()` के बाद रजिस्टर किए गए इवेंट लिसनर्स:** कोई भी पुश नोटिफिकेशन जो आपके लिसनर्स के आने से पहले आता है और प्रोसेस होता है, उसे DOM इवेंट के रूप में भेजा जाएगा और **चुपचाप छोड़ दिया जाएगा** क्योंकि प्लगइन में कोई रीप्ले मैकेनिज्म नहीं है।

प्लगइन JavaScript साइड पर छूटे हुए इवेंट्स को क्यू या बफर नहीं करता है। `document.dispatchEvent()` द्वारा फायर किए गए DOM इवेंट्स केवल उन लिसनर्स को डिलीवर किए जाते हैं जो डिस्पैच के समय पहले से ही रजिस्टर होते हैं।
</Aside>


### 3. iOS नेटिव सेटअप

#### 3.1 कैपेबिलिटीज़

अपने प्रोजेक्ट में पुश नोटिफिकेशन को सक्षम करने के लिए, आपको कुछ कैपेबिलिटीज़ जोड़ने की आवश्यकता है।

Signing & Capabilities सेक्शन में, निम्नलिखित कैपेबिलिटीज़ जोड़ें:
- `Push Notifications`
- `Background Modes`। इस कैपेबिलिटी को जोड़ने के बाद, `Remote notifications` के लिए बॉक्स को चेक करें।

यदि आप टाइम सेंसिटिव नोटिफिकेशन (iOS 15+) का उपयोग करना चाहते हैं, तो `Time Sensitive Notifications` कैपेबिलिटी भी जोड़ें।

#### 3.2 Info.plist

अपने `Runner/Info.plist` में `__PUSHWOOSH_DEVICE_API_TOKEN__` की को [Pushwoosh Device API Token](/hi/developer/api-reference/api-access-token/#device-api-token) पर सेट करें:
```swift title="info.plist"
<key>Pushwoosh_API_TOKEN</key>
<string>__PUSHWOOSH_DEVICE_API_TOKEN__</string>
```

#### 3.3 मैसेज डिलीवरी ट्रैकिंग

आपको अपने प्रोजेक्ट में एक Notification Service Extension टारगेट जोड़ना होगा। यह सटीक डिलीवरी ट्रैकिंग और iOS पर रिच मीडिया जैसी सुविधाओं के लिए आवश्यक है।

एक्सटेंशन टारगेट और उसके भीतर आवश्यक Pushwoosh कोड जोड़ने के लिए [नेटिव गाइड के चरणों](/hi/developer/pushwoosh-sdk/ios-sdk/setting-up-pushwoosh-ios-sdk/basic-integration-guide/#4-message-delivery-tracking) का पालन करें।

### 4. Android नेटिव सेटअप

#### 4.1 डिपेंडेंसी इंस्टॉल करें

सुनिश्चित करें कि आवश्यक डिपेंडेंसी और प्लगइन्स आपकी Gradle स्क्रिप्ट में जोड़े गए हैं:

Google Services Gradle प्लगइन को अपने प्रोजेक्ट-लेवल `build.gradle` डिपेंडेंसी में जोड़ें:

```groovy title="android/build.gradle"
buildscript {
  dependencies {
    classpath 'com.google.gms:google-services:4.3.15'
  }
}
```

प्लगइन को अपनी ऐप-लेवल `build.gradle` फ़ाइल में लागू करें:

```groovy title="app/build.gradle"
apply plugin: 'com.google.gms.google-services'
```

#### 4.2 Firebase कॉन्फ़िगरेशन फ़ाइल जोड़ें

`google-services.json` फ़ाइल को अपनी प्रोजेक्ट डायरेक्टरी में `android/app` फ़ोल्डर में रखें।

#### 4.3 Pushwoosh मेटाडेटा जोड़ें

अपने `main/AndroidManifest.xml` में `<application>` टैग के अंदर [Pushwoosh Device API Token](/hi/developer/api-reference/api-access-token/#device-api-token) जोड़ें:

```xml title="AndroidManifest.xml"
<meta-data android:name="com.pushwoosh.apitoken" android:value="__YOUR_DEVICE_API_TOKEN__" />
```

> **महत्वपूर्ण:** सुनिश्चित करें कि आप अपने Pushwoosh कंट्रोल पैनल में सही ऐप को टोकन एक्सेस दें। [और जानें](/hi/developer/api-reference/api-access-token/#edit-token)

### 5. प्रोजेक्ट चलाएँ

1. प्रोजेक्ट को बिल्ड और रन करें।
2. Pushwoosh कंट्रोल पैनल पर जाएँ और [एक पुश नोटिफिकेशन भेजें](/hi/product/messaging-channels/push-notifications/send-push-notifications/one-time-push)।
3. आपको ऐप में नोटिफिकेशन दिखना चाहिए।

## विस्तारित इंटीग्रेशन

इस स्तर पर, आपने पहले ही SDK को इंटीग्रेट कर लिया है और पुश नोटिफिकेशन भेज और प्राप्त कर सकते हैं। अब, आइए मुख्य कार्यक्षमता का पता लगाएँ

### पुश नोटिफिकेशन इवेंट लिसनर्स

Pushwoosh SDK में दो इवेंट लिसनर्स हैं, जो पुश नोटिफिकेशन को हैंडल करने के लिए डिज़ाइन किए गए हैं:

- `push-receive` इवेंट तब ट्रिगर होता है जब ऐप फोरग्राउंड में होने पर एक पुश नोटिफिकेशन प्राप्त होता है
- `push-notification` इवेंट तब ट्रिगर होता है जब कोई यूज़र नोटिफिकेशन खोलता है

इन इवेंट लिसनर्स को `onDeviceReady()` को कॉल करने से **पहले** रजिस्टर किया **जाना चाहिए**, जैसा कि [ऊपर इनिशियलाइज़ेशन चरण](#2-cordova-sdk-initialization) में दिखाया गया है। आप अपनी आवश्यकताओं के अनुरूप हैंडलर लॉजिक को कस्टमाइज़ कर सकते हैं:

```javascript title="index.js"
// Register before onDeviceReady()
document.addEventListener('push-receive', function(event) {
    var message = event.notification.message;
    var payload = event.notification.userdata;
    console.log("Push received: " + message);
    // Add your custom logic here
});

document.addEventListener('push-notification', function(event) {
    var message = event.notification.message;
    var payload = event.notification.userdata;
    console.log("Push accepted: " + message);
    // Add your custom logic here (e.g., navigate to a specific screen)
});
```

### यूज़र कॉन्फ़िगरेशन

व्यक्तिगत यूज़र के व्यवहार और प्राथमिकताओं पर ध्यान केंद्रित करके, आप व्यक्तिगत कंटेंट दे सकते हैं, जिससे यूज़र की संतुष्टि और वफादारी बढ़ती है

```javascript
class Registration {
  afterUserLogin(user) {

    // Set user ID
    pushwoosh.setUserId(user.getId());
    
    // Setting additional user information as tags for Pushwoosh
    pushwoosh.setTags({
      "age": user.getAge(),
      "name": user.getName(),
      "last_login": user.getLastLoginDate()
    });
  }
}
```

### टैग्स

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

```javascript
class UpdateUser {
  afterUserUpdateProfile(user) {

    // Set list of favorite categories
    pushwoosh.setTags({
      "favorite_categories": user.getFavoriteCategoriesList()
    });
    
    // Set payment information
    pushwoosh.setTags({
      "is_subscribed": user.isSubscribed(),
      "payment_status": user.getPaymentStatus(),
      "billing_address": user.getBillingAddress()
    });
  }
}
```

### इवेंट्स

इवेंट्स ऐप के भीतर विशिष्ट यूज़र एक्शन या घटनाएँ हैं जिन्हें व्यवहार का विश्लेषण करने और संबंधित मैसेज या एक्शन को ट्रिगर करने के लिए ट्रैक किया जा सकता है

```javascript
class Registration {

  // Track login event
  afterUserLogin(user) {
    pushwoosh.postEvent("login", {
      "name": user.getName(),
      "last_login": user.getLastLoginDate()
    });
  }

  // Track purchase event
  afterUserPurchase(product) {
    pushwoosh.postEvent("purchase", {
      "product_id": product.getId(),
      "product_name": product.getName(),
      "price": product.getPrice(),
      "quantity": product.getQuantity()
    });
  }
}
```

## समस्या निवारण

यदि आपको इंटीग्रेशन प्रक्रिया के दौरान कोई समस्या आती है, तो कृपया [सपोर्ट और कम्युनिटी](/hi/developer/pushwoosh-sdk/support-and-community) सेक्शन देखें।