# मैनुअल विकास एकीकरण मार्गदर्शिका (9 भाषाएँ, AI आवश्यक नहीं)

यह मार्गदर्शिका Licentivo प्रदाता पर लागू है। दूसरे लाइसेंसिंग सिस्टम वाले व्यापारी बैकएंड में “लाइसेंस चयन और कस्टमाइज़ेशन” से कस्टम सेवा चुन सकते हैं, [कस्टम लाइसेंसिंग API और एकीकरण प्रवाह](/hi/launch-documents/external-licensing/) से जुड़ सकते हैं और अपना लाइसेंसिंग सिस्टम SDK उपयोग जारी रख सकते हैं।

> वर्तमान अप्रकाशित बदलाव खाता पहचान विनिमय उपयोग करते हैं; ज़िम्मेदारियाँ और माइग्रेशन सीमाएँ [खरीद अवधि और खाता SDK सीमा](/hi/launch-documents/account-purchase-boundary/) में हैं। Launch खरीद अवधि गणना करता है; Licentivo SDK प्राधिकरण करता है।

केवल संबंधित भाषा का Launch एकीकरण पैकेज इंस्टॉल करें। Launch पैकेज में आधिकारिक SDK, डिफ़ॉल्ट एडाप्टर और लिंक कॉन्फ़िगरेशन शामिल हैं; आधिकारिक लाइसेंसिंग पता `https://www.licentivo.com` पर स्थिर है। ऐप वर्तमान Launch स्टोर में पंजीकृत खरीदार खाते से लॉगिन करता है।

## पहले से भरा आरंभीकरण कोड प्राप्त करें

1. Launch बैकएंड में सॉफ़्टवेयर, बिक्री प्लान और Licentivo लाइसेंस नीति का संबंध पूरा करें और संबंधित वातावरण में प्रकाशित करें।
2. **प्रोग्राम एकीकरण → एकीकरण जाँच और कोड** खोलें, सॉफ़्टवेयर, भाषा और परीक्षण/उत्पादन वातावरण चुनें।
3. “उत्पाद जानकारी पढ़ें और एकीकरण कोड बनाएँ” पर क्लिक करें। Launch साइट का वर्तमान सार्वजनिक पता, मौजूदा उत्पाद मैपिंग और हस्ताक्षर सार्वजनिक कुंजी स्वतः पढ़ता है।
4. पृष्ठ का कनेक्शन फ़ंक्शन अपने प्रोजेक्ट में कॉपी करें और नीचे अनुसार इंटरफ़ेस तथा व्यवसाय कॉल मैनुअल लिखें। स्वतः भरे पैरामीटर देखकर संबंधित भाषा का `Connect/connect` स्वयं भी कॉल कर सकते हैं।

दो आंतरिक उत्पाद ID मैनुअल भरने या `launch-config.json` अथवा `product.json` बनाने की आवश्यकता नहीं। पृष्ठ से स्रोत कनेक्शन फ़ंक्शन सहेजा जा सकता है। सर्वर का निजी `config.yaml` केवल Launch सेवा स्टार्टअप के लिए है, ग्राहक सॉफ़्टवेयर के साथ प्रकाशित नहीं हो सकता।

साइट पता वर्तमान इंस्टेंस के वैध सार्वजनिक पते से आता है (स्टार्टअप कॉन्फ़िगरेशन `public_url` या बैकएंड वेबसाइट सेटिंग का वैध सार्वजनिक पता)। यह डोमेन या पोर्ट सहित IP पता हो सकता है, पर प्रोटोकॉल आवश्यक है; उत्पादन एकीकरण में वैध HTTPS उपयोग करें। सुनने का पता `http_addr` ग्राहक पहुँच पता नहीं है। साइट पता, उत्पाद मैपिंग या वातावरण बदलने के बाद वर्तमान साइट से कनेक्शन फ़ंक्शन फिर लें; पुरानी साइट का सत्र और कैश नई साइट का प्राधिकरण नहीं बन सकते।

दो उत्पाद नंबर सिस्टम का मौजूदा आंतरिक संबंध हैं: Launch सॉफ़्टवेयर उत्पाद और Licentivo लाइसेंस उत्पाद। एकीकरण पृष्ठ चयनित सॉफ़्टवेयर से स्वतः भरता है; खरीदार केवल स्टोर खाता भरता है। सर्वर कॉन्फ़िगर Licentivo कनेक्शन से हस्ताक्षर सार्वजनिक कुंजी पढ़ता है, प्रबंधन कुंजी और ग्राहक लाइसेंस क्रेडेंशियल स्रोत में नहीं आते।

## `Connect/connect` का उद्देश्य

`Connect/connect` अलग भाषाओं में “Launch ऐप क्लाइंट बनाएँ” कार्रवाई का नाम है। Go, C# और कुछ नेटिव इंटरफ़ेस बड़े प्रारंभिक अक्षर वाला `Connect` उपयोग करते हैं, Python, JavaScript, Ruby आदि अपनी शैली में `connect` उपयोग करते हैं। बैकएंड का `connectLaunch()`, `connect_launch()` या `LaunchConnection.Open()` सार्वजनिक पैरामीटर पहले से भरा प्रोजेक्ट फ़ंक्शन है, जो भीतर संबंधित भाषा प्रवेश कॉल करता है।

कनेक्शन केवल आरंभीकरण करता है: यह स्टोर पता, उत्पाद मैपिंग, वातावरण और हस्ताक्षर सार्वजनिक कुंजियाँ सत्यापित करता है, Launch क्लाइंट बनाता है और पैकेज के आधिकारिक Licentivo SDK को कॉन्फ़िगर करता है। यह ग्राहक पहचान सत्यापित या भुगतान सुविधाएँ सीधे नहीं खोलता। पूरा क्रम है:

```text
Connect/connect → Login or Restore → RunFeature → Logout / Close
                                       └──────────→ ReleaseDevice (explicit device unlink only)
```

ऐप चलने तक वही क्लाइंट ऑब्जेक्ट रखें ताकि SDK heartbeat और floating सीट सही संभाल सके। सामान्य बंद करने पर डिवाइस बाइंडिंग रहती है; ग्राहक का स्पष्ट लॉगआउट और ReleaseDevice संगत प्रवेश वही आधिकारिक SDK लॉगआउट प्रक्रिया कॉल करते हैं।

## इंस्टॉलेशन और आरंभीकरण प्रवेश

0.1.6 की नौ भाषाओं की सार्वजनिक इंस्टॉलेशन जाँच पूरी सफल है (9/9), नीचे तालिका की सभी विधियाँ सत्यापित हैं। [GitHub Release](https://github.com/spf86/licentivo-launch-sdk/releases/tag/v0.1.6) नेटिव पैकेज और ऑफ़लाइन फ़ाइलें भी देता है, उपयोग [डाउनलोड पैकेज इंस्टॉलेशन निर्देश](/hi/launch-documents/integration-packages/#install-a-downloaded-distribution) में है।

| भाषा | केवल Launch इंस्टॉल करें | पृष्ठ द्वारा दिया कनेक्शन फ़ंक्शन | पैकेज में सीधा आरंभीकरण API |
| --- | --- | --- | --- |
| Go | `go get github.com/spf86/licentivo-launch-sdk/pkg/launchclient@v0.1.6` | `connectLaunch()` | `launchclient.Connect` |
| Python 3.10+ | `python -m pip install licentivo-launch==0.1.6` | `connect_launch()` | `Application.connect` |
| C# / .NET 8+ | `dotnet add package Licentivo.Launch --version 0.1.6` | `LaunchConnection.Open()` | `Application.Connect` |
| Java 17+ | Maven/Gradle: `com.licentivo.launch:launch-client:0.1.6` | `LaunchConnection.open()` | `Launch.connect` |
| Node.js 20.3+ | `npm install @licentivo/launch@0.1.6` | `connectLaunch()` | `Application.connect` |
| Rust 1.85+ | `cargo add licentivo-launch@=0.1.6` | `connect_launch()` | `Application::connect` |
| Ruby 3.1+ | `gem install licentivo-launch --version 0.1.6` | `connect_launch` | `Application.connect` |
| C11 | [GitHub Release](https://github.com/spf86/licentivo-launch-sdk/releases/tag/v0.1.6) से नेटिव पैकेज डाउनलोड करें, CMake से आयात करें | `connect_launch()` | `launch_application_connect` |
| C++17 | वही Launch नेटिव पैकेज उपयोग करें | `connectLaunch()` | `Application::Connect` |

सार्वजनिक स्रोत और प्रति-भाषा README [Launch SDK रिपॉज़िटरी](https://github.com/spf86/licentivo-launch-sdk) में, नेटिव पैकेज और ऑफ़लाइन फ़ाइलें [v0.1.6 Release](https://github.com/spf86/licentivo-launch-sdk/releases/tag/v0.1.6) में और सार्वजनिक इंस्टॉलेशन परिणाम [नौ भाषाओं की रजिस्ट्री जाँच](https://github.com/spf86/licentivo-launch-sdk/blob/main/docs/registry-verification.json) में हैं। प्रत्येक पैकेज का README इंस्टॉलेशन कमांड और API देता है। JavaScript पैकेज में TypeScript घोषणाएँ हैं। सामान्य भाषा निर्भरताएँ पैकेज मैनेजर हल करता है, जैसे Python का cryptography, C# का BouncyCastle और Ruby का base64; आधिकारिक SDK पैकेज इंस्टॉल नहीं करना है।

Go सार्वजनिक मॉड्यूल नाम `github.com/spf86/licentivo-launch-sdk` है, आयात पथ `github.com/spf86/licentivo-launch-sdk/pkg/launchclient` है, ऐप को स्थानीय replace नहीं चाहिए। Windows नेटिव पैकेज amd64 GNU/MinGW उपयोग करता है, Linux amd64 नेटिव पैकेज भी है। Ruby प्लेटफ़ॉर्म पैकेज और Rust/native Windows वितरणों में curl शामिल है; अन्य प्लेटफ़ॉर्म स्रोत बिल्ड को सामान्य C11, curl/OpenSSL विकास निर्भरताएँ चाहिए। प्लेटफ़ॉर्म टूलचेन निर्देश प्रत्येक पैकेज README में हैं।

## लॉगिन और संरक्षित कार्रवाइयाँ

नीचे स्निपेट पिछले चरण में कॉपी कनेक्शन फ़ंक्शन उपयोग करते हैं। `email`, `password` आपके लॉगिन इंटरफ़ेस से आते हैं; पासवर्ड स्रोत या कॉन्फ़िगरेशन में न लिखें। `export` को प्लान नीति में वास्तव में मौजूद सुविधा नाम से बदलना आवश्यक है।

### Go

```go
app, err := connectLaunch()
if err != nil { return err }
defer app.Close()
if _, err := app.Login(ctx, email, password); err != nil { return err }
return app.RunFeature("export", func() error {
    return exportReport()
})
```

`ctx` ऐप जीवनचक्र संदर्भ उपयोग करे, लॉगिन अनुरोध समाप्त होते ही heartbeat रद्द न करें। नेटवर्क कार्य बैकग्राउंड वर्कर में रखें। बहाली के लिए `Restore(ctx)`; खाता लॉगआउट के लिए `Logout(ctx)`; डिवाइस रिलीज़ के लिए `ReleaseDevice(ctx)` कॉल करें।

### Python

```python
with connect_launch() as app:
    app.login(email, password)
    result = app.run_feature("export", export_report)
```

`restore()` मौजूदा सुरक्षित सत्र बहाल करता है; सत्र न होने पर लॉगिन स्क्रीन दिखाएँ। `logout()` खाता साफ़ करता है; `release_device()` स्पष्ट डिवाइस रिलीज़ करता है। सिंक्रोनस नेटवर्क कार्य डेस्कटॉप इवेंट लूप अवरुद्ध न करें।

### C# / .NET

```csharp
await using var app = LaunchConnection.Open();
await app.Login(email, password);
await app.RunFeature("export", async () => {
    await ExportReport();
});
```

`await Restore()`, `await Logout()` और `await ReleaseDevice()` उपयोग करें। ऐप जीवित रहने तक SDK जीवनचक्र बनाए रखें, असिंक्रोनस इंटरफ़ेस प्रवाह उपयोग करें।

### Java

```java
try (var app = LaunchConnection.open()) {
    app.login(email, passwordChars);
    app.runFeature("export", () -> exportReport());
}
```

पासवर्ड के लिए `char[]` उपयोग करें। सत्र न होने पर `restore()` `NO_SESSION` विफलता लौटाता है, लॉगिन स्क्रीन दिखाएँ; अन्य विफलता प्राधिकरण नहीं है। `logout()` और `releaseDevice()` अलग कार्रवाइयाँ हैं। try-with-resources बंद करने के लिए ज़िम्मेदार है।

### JavaScript / Node.js / TypeScript

```javascript
const app = connectLaunch();
try {
  await app.login(email, password);
  const result = await app.runFeature('export', () => exportReport());
} finally {
  await app.close();
}
```

सत्र न होने पर `restore()` `null` लौटाता है; सामान्य बहाली के बाद ही व्यवसाय चलाएँ। `logout()` का बूलियन परिणाम दूरस्थ लॉगआउट पुष्ट होने का संकेत है, डिवाइस रिलीज़ विफल होने पर त्रुटि दिखाएँ। कोड Node.js, Electron मुख्य प्रक्रिया या विश्वसनीय बैकएंड में चलता है; ब्राउज़र और Electron रेंडरर प्राधिकरण क्रेडेंशियल नहीं रखते।

### Rust

```rust
let mut app = connect_launch()?;
app.login(&email, &password)?;
let result = app.run_feature("export", || {
    export_report()?;
    Ok(())
})?;
app.close();
```

कॉलबैक `Result<T, Failure>` लौटाता है। `restore()`, `logout()`, `release_device()` परिणाम लौटाते हैं, विफलता संभालना आवश्यक है। `Drop` भी रनटाइम बंद करता है। डिफ़ॉल्ट नेटिव कोर build.rs से कंपाइल और लिंक होता है, आधिकारिक SDK स्वयं लिंक नहीं करना पड़ता।

### Ruby

```ruby
app = connect_launch
begin
  app.login(email, password)
  result = app.run_feature('export') { export_report }
ensure
  app.close
end
```

`restore` सत्र बहाल करता है, `logout` खाता लॉग आउट करता है, `release_device` डिवाइस रिलीज़ करता है। संरक्षित कार्रवाई कोड ब्लॉक उपयोग करती है; अपवाद सफलता में नहीं बदला जा सकता।

### C

```c
static int export_action(void *context) {
    return export_report(context); /* Return 1 only on success. */
}

launch_application *app = connect_launch();
if (!app) return 0;
int ok = launch_application_login(app, email, password);
if (ok) ok = launch_application_run_feature(app, "export", export_action, context);
/* Check launch_application_error(app) on failure; never log credentials. */
launch_application_close(app);
return ok;
```

`launch_application_restore` तीन अवस्थाओं वाला है: `1` बहाल, `0` सत्र नहीं, `-1` विफल। केवल सत्र न होने पर सामान्य लॉगिन दिखाएँ; अस्वीकृति या अपवाद सफलता नहीं है। `logout` और `release_device` के परिणाम भी जाँचें।

CMake केवल Launch आयात करता है:

```cmake
find_package(LicentivoLaunch CONFIG REQUIRED)
add_executable(myapp main.c)
licentivo_launch_link(myapp)
```

### C++

```cpp
auto app = connectLaunch();
app.Login(email.c_str(), password.c_str());
app.RunFeature("export", [&] { exportReport(); });
```

`Restore()`, `Logout()`, `ReleaseDevice()` C++ अपवाद अर्थ का पालन करते हैं। RAII destructor बंद करता है। CMake `licentivo_launch_link(myapp CXX)` उपयोग करता है, Launch SDK लिंकिंग और वितरण में रनटाइम लाइब्रेरी स्वतः संभालता है।

## जीवनचक्र, सुरक्षित स्टोरेज और त्रुटियाँ

कनेक्शन ऑब्जेक्ट बनाना केवल आरंभीकरण है। ऐप को सफल लॉगिन या बहाली करनी होगी और हर व्यावसायिक कार्रवाई में सुविधा सुरक्षा कॉलबैक उपयोग करना होगा। भुगतान ऑर्डर, मौजूदा सत्र या क्लिक योग्य बटन SDK सत्यापन की जगह नहीं लेते।

डिफ़ॉल्ट सत्र केवल मेमोरी में रहता है। लॉगिन याद रखने हेतु सुरक्षित स्टोरेज चाहिए: Go, Python, C# और नेटिव C/C++ Windows वर्तमान उपयोगकर्ता DPAPI देते हैं; Java, Node, Rust और Ruby कॉलर कुंजी वाला AES-GCM स्टोरेज देते हैं। क्रॉस-प्लेटफ़ॉर्म ऐप सिस्टम क्रेडेंशियल स्टोर से जुड़ें। कुंजी और ciphertext एक सामान्य निर्देशिका में न रखें।

सामान्य बंद करना उपयोगकर्ता द्वारा जानबूझकर याद रखा सत्र बनाए रखता है और रनटाइम रोकता है। खाता लॉगआउट पहले आधिकारिक SDK का एकीकृत लॉगआउट कॉल करता है, फिर Launch का अपना खाता रिकॉर्ड साफ़ करता है। ReleaseDevice उसी प्रक्रिया का संगत प्रवेश है; दूरस्थ निरस्तीकरण लंबित होने पर सफल रिलीज़ न बताएँ। आधिकारिक SDK की कैश निर्देशिका या लॉगआउट बहाली लॉग साफ़ न करें। Launch सत्र सुरक्षा का अर्थ नहीं कि आधिकारिक SDK की सभी डिवाइस फ़ाइलें एन्क्रिप्ट हैं; कैश निर्देशिका अनुमति सीमित करें।

| स्थिति | एप्लिकेशन कार्रवाई |
| --- | --- |
| खाता या पासवर्ड विफल | सामान्य लॉगिन विफलता दिखाएँ, खाता मौजूद है या नहीं प्रकट न करें |
| EMAIL_VERIFICATION_REQUIRED | स्टोर ईमेल सत्यापन पूरा करने का मार्गदर्शन दें |
| ENTITLEMENT_PENDING | सिंक जारी दिखाएँ, पैकेज के सीमित पुनः प्रयास और Retry-After अनुसार प्रतीक्षा करें |
| ENTITLEMENT_NOT_PURCHASED | खरीदने या खाता बदलने का मार्गदर्शन दें |
| ENTITLEMENT_EXPIRED | नवीनीकरण का मार्गदर्शन दें, पुरानी क्रेडेंशियल से अस्वीकृति न दरकिनार करें |
| ENTITLEMENT_SUSPENDED | संरक्षित सुविधाएँ रोकें, व्यापारी से संपर्क करें |
| डिवाइस संख्या पूरी | डिवाइस प्रबंधन या स्पष्ट रिलीज़ का मार्गदर्शन दें |
| नेटवर्क/HTTP 5xx | केवल SDK द्वारा सत्यापित और अब भी वैध ऑफ़लाइन प्राधिकरण उपयोग हो सकता है |

स्पष्ट 401/403/404, खाता बेमेल, रद्दीकरण या दर सीमा ऑफ़लाइन प्राधिकरण सफलता नहीं बन सकते। पहले सक्रियण और ऑफ़लाइन निषिद्ध नीतियों को अब भी नेटवर्क चाहिए। सर्वर डोमेन/IP उपलब्ध न हो तो कनेक्शन समस्या दिखाएँ, चुपचाप दूसरी साइट से न जुड़ें।

## स्वीकृति और संदर्भ

वास्तविक लॉगिन, स्वामी खाते का प्राधिकरण, संरक्षित कार्रवाई, पुनरारंभ बहाली, वैध ऑफ़लाइन और ऑफ़लाइन समाप्ति, कैश छेड़छाड़, लॉगआउट, खाता बदलाव और डिवाइस रिलीज़ सत्यापित करें। यह दस्तावेज़ AI उपयोग आवश्यक नहीं करता। परीक्षण टूल और बाहरी स्वीकृति सीमा [acceptance.md](/hi/launch-documents/acceptance/) में; स्थानीय पैकेज और बिल्ड निर्देश [integration-packages.md](/hi/launch-documents/integration-packages/) में हैं।

कॉन्फ़िगरेशन जाँच, कोड जनरेशन और स्थानीय परीक्षण वास्तविक भुगतान, लाइसेंस जारीकरण या आधिकारिक साइट सक्रियण की सफलता स्वतः साबित नहीं करते। बाहरी स्टोर और भुगतान sandbox कॉन्फ़िगरेशन के बाद अलग स्वीकृति आवश्यक है।
