Unduh MarkdownDokumen asli di GitHub
Panduan integrasi pengembangan manual (9 bahasa, tanpa AI)
Panduan ini berlaku untuk penyedia Licentivo. Pedagang yang sudah memiliki sistem lisensi lain dapat memilih layanan kustom di ‘Pemilihan dan kustomisasi lisensi’ pada panel administrasi, mengintegrasikannya sesuai API lisensi kustom dan alur integrasi, dan terus menggunakan SDK sistem lisensi sendiri.
Perubahan yang saat ini belum dirilis menggunakan pertukaran identitas akun; tanggung jawab dan batasan migrasi dijelaskan dalam Batas masa pembelian dan SDK akun. Launch menghitung masa pembelian; Licentivo SDK menjalankan lisensi.
Instal hanya paket integrasi Launch untuk bahasa yang sesuai. Paket Launch mencakup SDK resmi, adaptor default, dan konfigurasi tautan; alamat lisensi resmi ditetapkan ke https://www.licentivo.com. Aplikasi menggunakan akun pembeli yang terdaftar di toko Launch saat ini untuk masuk.
Dapatkan kode inisialisasi yang sudah diisi
- Di panel administrasi Launch, hubungkan perangkat lunak, paket penjualan, dan kebijakan lisensi Licentivo, lalu terbitkan di lingkungan yang sesuai.
- Buka Integrasi aplikasi → Pemeriksaan integrasi dan kode, lalu pilih perangkat lunak, bahasa, dan lingkungan uji/produksi.
- Klik ‘Baca informasi produk dan buat kode integrasi’. Launch otomatis membaca alamat publik situs saat ini, pemetaan produk yang ada, dan kunci publik tanda tangan.
- Salin fungsi koneksi pada halaman ke proyek Anda, lalu tulis antarmuka dan panggilan bisnis secara manual sesuai petunjuk di bawah. Anda juga dapat meninjau parameter yang sudah diisi dan memanggil
Connect/connectuntuk bahasa terkait sendiri.
Tidak perlu mengisi dua ID produk internal secara manual atau membuat launch-config.json maupun product.json. Halaman dapat menyimpan fungsi koneksi kode sumber. config.yaml privat server hanya untuk menjalankan layanan Launch dan tidak boleh didistribusikan bersama perangkat lunak pelanggan.
Alamat situs berasal dari alamat publik yang valid untuk instance saat ini (public_url dalam konfigurasi startup, atau alamat publik valid dalam pengaturan situs di panel administrasi). Alamat dapat berupa domain atau alamat IP dengan port, tetapi harus menyertakan protokol; integrasi produksi menggunakan HTTPS yang valid. Alamat pendengar http_addr bukan alamat akses pelanggan. Setelah mengubah alamat situs, pemetaan produk, atau lingkungan, dapatkan kembali fungsi koneksi dari situs saat ini; sesi dan cache situs lama tidak boleh digunakan sebagai otorisasi situs baru.
Dua nomor produk merupakan hubungan internal yang sudah ada: produk perangkat lunak Launch dan produk lisensi Licentivo. Halaman integrasi mengisinya otomatis berdasarkan perangkat lunak yang dipilih; pembeli hanya memasukkan akun toko. Server membaca kunci publik tanda tangan menggunakan koneksi Licentivo yang telah dikonfigurasi; kunci administrasi dan kredensial lisensi pelanggan tidak masuk ke kode sumber.
Fungsi Connect/connect
Connect/connect adalah nama dalam berbagai bahasa untuk operasi ‘membuat klien aplikasi Launch’. Go, C#, dan sebagian antarmuka native menggunakan Connect dengan huruf awal kapital; Python, JavaScript, Ruby, dan bahasa lain menggunakan connect sesuai gaya masing-masing. connectLaunch(), connect_launch(), atau LaunchConnection.Open() yang dibuat panel administrasi adalah fungsi proyek dengan parameter publik yang telah diisi; di dalamnya fungsi tersebut memanggil titik masuk bahasa yang sesuai.
Koneksi hanya melakukan inisialisasi: memvalidasi alamat toko, pemetaan produk, lingkungan, dan kunci publik tanda tangan, membuat klien Launch, serta mengonfigurasi Licentivo SDK resmi dalam paket. Koneksi tidak memverifikasi identitas pelanggan atau langsung membuka fitur berbayar. Urutan lengkapnya adalah:
Connect/connect → Login or Restore → RunFeature → Logout / Close
└──────────→ ReleaseDevice (explicit device unlink only)
Pertahankan objek klien yang sama selama aplikasi berjalan agar SDK menangani heartbeat dan kursi mengambang dengan benar. Penutupan biasa mempertahankan pengikatan perangkat; keluar secara eksplisit oleh pelanggan dan titik masuk kompatibilitas ReleaseDevice memanggil alur keluar SDK resmi yang sama.
Instalasi dan titik masuk inisialisasi
Verifikasi instalasi publik untuk sembilan bahasa pada 0.1.6 semuanya lulus (9/9); semua metode instalasi pada tabel berikut telah diverifikasi. GitHub Release juga menyediakan paket native dan file offline; lihat Petunjuk instalasi paket unduhan.
| Bahasa | Instal hanya Launch | Fungsi koneksi yang disediakan halaman | API inisialisasi langsung dalam paket |
|---|---|---|---|
| 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 | Unduh paket native dari GitHub Release, lalu impor dengan CMake | connect_launch() |
launch_application_connect |
| C++17 | Gunakan paket native Launch yang sama | connectLaunch() |
Application::Connect |
Kode sumber publik dan README setiap bahasa tersedia di repositori Launch SDK, paket native dan file offline di v0.1.6 Release, dan hasil instalasi publik di Verifikasi registry sembilan bahasa. README setiap paket menyediakan perintah instalasi dan API. Paket JavaScript mencakup deklarasi TypeScript. Dependensi bahasa biasa diselesaikan oleh manajer paket, misalnya cryptography untuk Python, BouncyCastle untuk C#, dan base64 untuk Ruby; paket SDK resmi tidak perlu diinstal.
Nama modul publik Go adalah github.com/spf86/licentivo-launch-sdk, dan path impor adalah github.com/spf86/licentivo-launch-sdk/pkg/launchclient; aplikasi tidak memerlukan replace lokal. Paket native Windows menggunakan amd64 GNU/MinGW, dan tersedia juga paket native Linux amd64. Paket platform Ruby serta distribusi Windows Rust/native menyertakan curl; build sumber pada platform lain memerlukan dependensi pengembangan C11 dan curl/OpenSSL biasa. Lihat README setiap paket untuk informasi toolchain platform.
Login dan operasi yang dilindungi
Cuplikan berikut menggunakan fungsi koneksi yang disalin pada langkah sebelumnya. email dan password berasal dari antarmuka login Anda sendiri; jangan tulis kata sandi ke kode sumber atau konfigurasi. export harus diganti dengan nama fitur yang benar-benar ada dalam kebijakan paket.
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 menggunakan konteks siklus hidup aplikasi dan tidak boleh langsung dibatalkan saat permintaan login berakhir sehingga heartbeat berhenti. Jalankan operasi jaringan pada thread pekerja latar belakang. Panggil Restore(ctx) untuk memulihkan, Logout(ctx) untuk keluar akun, dan ReleaseDevice(ctx) untuk melepas perangkat.
Python
with connect_launch() as app:
app.login(email, password)
result = app.run_feature("export", export_report)
restore() memulihkan sesi aman yang ada; tampilkan antarmuka login jika tidak ada sesi. logout() membersihkan akun; release_device() secara eksplisit melepas perangkat. Jangan biarkan operasi jaringan sinkron memblokir event loop desktop.
C# / .NET
await using var app = LaunchConnection.Open();
await app.Login(email, password);
await app.RunFeature("export", async () => {
await ExportReport();
});
Gunakan await Restore(), await Logout(), dan await ReleaseDevice(). Pertahankan siklus hidup SDK selama aplikasi berjalan dan gunakan alur antarmuka asinkron.
Java
try (var app = LaunchConnection.open()) {
app.login(email, passwordChars);
app.runFeature("export", () -> exportReport());
}
Gunakan char[] untuk kata sandi. restore() mengembalikan kegagalan NO_SESSION jika tidak ada sesi; tampilkan antarmuka login. Kegagalan lain tidak boleh dianggap sebagai otorisasi. logout() dan releaseDevice() adalah operasi yang berbeda. try-with-resources bertanggung jawab menutup sumber daya.
JavaScript / Node.js / TypeScript
const app = connectLaunch();
try {
await app.login(email, password);
const result = await app.runFeature('export', () => exportReport());
} finally {
await app.close();
}
restore() mengembalikan null jika tidak ada sesi; operasi bisnis hanya boleh dijalankan setelah pemulihan berhasil. Nilai boolean logout() menunjukkan apakah keluar jarak jauh telah dikonfirmasi; tampilkan kesalahan jika pelepasan perangkat gagal. Kode berjalan di Node.js, proses utama Electron, atau backend tepercaya; browser dan proses renderer Electron tidak menyimpan kredensial lisensi.
Rust
let mut app = connect_launch()?;
app.login(&email, &password)?;
let result = app.run_feature("export", || {
export_report()?;
Ok(())
})?;
app.close();
Callback mengembalikan Result<T, Failure>. restore(), logout(), dan release_device() mengembalikan hasil yang kegagalannya harus ditangani. Drop juga bertanggung jawab menutup runtime. Inti native default dikompilasi dan ditautkan oleh build.rs; Anda tidak perlu menautkan SDK resmi sendiri.
Ruby
app = connect_launch
begin
app.login(email, password)
result = app.run_feature('export') { export_report }
ensure
app.close
end
restore memulihkan sesi, logout keluar dari akun, dan release_device melepas perangkat. Operasi yang dilindungi menggunakan blok kode; exception tidak boleh diubah menjadi keberhasilan.
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 memiliki tiga status: 1 dipulihkan, 0 tidak ada sesi, dan -1 gagal. Hanya ketika tidak ada sesi antarmuka login ditampilkan secara normal; penolakan atau exception tidak boleh dianggap berhasil. Nilai balik logout dan release_device juga harus diperiksa.
CMake hanya mengimpor Launch:
find_package(LicentivoLaunch CONFIG REQUIRED)
add_executable(myapp main.c)
licentivo_launch_link(myapp)
C++
auto app = connectLaunch();
app.Login(email.c_str(), password.c_str());
app.RunFeature("export", [&] { exportReport(); });
Restore(), Logout(), dan ReleaseDevice() mengikuti semantik exception C++. Destruktor RAII bertanggung jawab menutup sumber daya. CMake menggunakan licentivo_launch_link(myapp CXX); Launch otomatis menangani penautan SDK dan runtime dalam paket distribusi.
Siklus hidup, penyimpanan aman, dan kesalahan
Membuat objek koneksi hanya menyelesaikan inisialisasi. Aplikasi harus berhasil login atau memulihkan sesi dan menggunakan callback perlindungan fitur pada setiap operasi bisnis. Pesanan berbayar, sesi yang ada, atau tombol yang dapat diklik tidak menggantikan verifikasi SDK.
Secara default sesi hanya disimpan dalam memori. Mengingat login memerlukan penyimpanan aman: Go, Python, C#, dan native C/C++ menyediakan DPAPI pengguna Windows saat ini; Java, Node, Rust, dan Ruby menyediakan penyimpanan AES-GCM menggunakan kunci pemanggil. Aplikasi lintas platform harus terhubung ke penyimpanan kredensial sistem. Jangan menaruh kunci dan ciphertext dalam direktori biasa yang sama.
Penutupan biasa mempertahankan sesi yang secara aktif dipilih pengguna untuk diingat dan menghentikan runtime. Keluar dari akun terlebih dahulu memanggil alur keluar terpadu SDK resmi, lalu membersihkan catatan akun milik Launch. ReleaseDevice adalah titik masuk kompatibilitas untuk alur yang sama; jangan melaporkan pelepasan berhasil ketika pencabutan jarak jauh masih menunggu penyelesaian. Jangan hapus direktori cache atau log pemulihan keluar SDK resmi. Perlindungan sesi Launch tidak berarti semua file perangkat SDK resmi sudah dienkripsi; batasi izin direktori cache.
| Status | Penanganan aplikasi |
|---|---|
| Akun atau kata sandi gagal | Tampilkan kegagalan login umum tanpa mengungkap apakah akun ada |
| EMAIL_VERIFICATION_REQUIRED | Arahkan pengguna menyelesaikan verifikasi email toko |
| ENTITLEMENT_PENDING | Tampilkan status sinkronisasi dan tunggu sesuai percobaan ulang terbatas paket serta Retry-After |
| ENTITLEMENT_NOT_PURCHASED | Arahkan pengguna membeli atau mengganti akun |
| ENTITLEMENT_EXPIRED | Arahkan pengguna memperpanjang; jangan gunakan kredensial lama untuk menghindari penolakan |
| ENTITLEMENT_SUSPENDED | Hentikan fitur yang dilindungi dan hubungi pedagang |
| Jumlah perangkat sudah penuh | Arahkan pengguna mengelola atau secara eksplisit melepas perangkat |
| Jaringan/HTTP 5xx | Hanya lisensi offline yang telah diverifikasi SDK dan masih berlaku yang boleh digunakan |
401/403/404 yang jelas, akun tidak cocok, pembatalan, atau pembatasan laju tidak boleh diubah menjadi keberhasilan lisensi offline. Aktivasi pertama dan kebijakan yang melarang offline tetap memerlukan jaringan. Jika domain/IP server tidak dapat diakses, tampilkan masalah koneksi dan jangan diam-diam terhubung ke situs lain.
Penerimaan dan referensi
Verifikasi login nyata, lisensi milik akun tersebut, operasi yang dilindungi, pemulihan setelah mulai ulang, offline yang valid dan kedaluwarsanya, manipulasi cache, keluar, pergantian akun, dan pelepasan perangkat. Dokumen ini tidak mengharuskan penggunaan AI. Lihat acceptance.md untuk alat pengujian dan batas penerimaan eksternal; lihat integration-packages.md untuk paket lokal dan petunjuk build.
Pemeriksaan konfigurasi, pembuatan kode, dan pengujian lokal tidak secara otomatis membuktikan keberhasilan pembayaran nyata, penerbitan lisensi, atau aktivasi situs resmi. Toko eksternal dan sandbox pembayaran harus dikonfigurasi dan diterima secara terpisah.