1. 製品とライセンスを準備する
ノードロック ライセンスと通常のエクスポート機能から始めます。基本的な認証フローが機能した後でのみ、従量制使用量を追加してください。
デバイス枠は現在のアクティベーション数で計算し、解除すると返却されます。通常ライセンスはオフラインでも枠を使用し、フローティングライセンスはリース満了時にも自動返却されます。
- [コンソール] > [製品] から製品 ID をコピーします。その製品の署名公開鍵を開き、すべてのキー ID/公開鍵のペアを初期化コードに貼り付けて、YOUR_PRODUCT_ID、YOUR_KEY_ID、および YOUR_PUBLIC_KEY を置き換えます。迅速な統合により、これらのパブリック コード定数を生成できます。製品構成ファイルは必要ありません。 SDK のデフォルトは https://www.licentivo.com. です
- クイック統合で、製品を作成または選択します。ポリシーでエクスポートという名前の機能を有効にし、テスト ライセンスを準備します。
2.SDKをインストールする
アプリのプロジェクトで以下のコマンドを実行するか、ビルド依存関係を追加して SDK 0.11.6 を導入します。パッケージマネージャーが SDK を取得するため、ソース ZIP の取得、手動展開、ローカルソースパスの指定は不要です。
npm install @licentivo/sdk@0.11.63. 実際の輸出を保護する
SDK スタートアップをアプリケーションのスタートアップ ハンドラーまたはアクティベーション ハンドラーに移動します。アクティベーション フォームからカスタマー キーを読み取り、自分の製品 ID と信頼できるキーを渡し、シャットダウンするまでクライアントを存続させます。実際のビジネス エントリ ポイントに RunFeature を置きます。レポート ライターを独自の操作に置き換えます。
import {writeFile} from 'node:fs/promises';
import {Client} from '@licentivo/sdk'; // Installed package: import from '@licentivo/sdk'.
// BEGIN LICENTIVO PRODUCT
// Copy Product ID and all key ID/public key pairs from Console > Products > Signing public keys.
const PRODUCT_ID = 'YOUR_PRODUCT_ID';
const TRUSTED_KEYS = {'YOUR_KEY_ID': 'YOUR_PUBLIC_KEY'};
// END LICENTIVO PRODUCT
export async function exportReport(path) {
// Replace this write with your existing, non-metered export operation.
await writeFile(path, 'A report generated by the licensed application.\n', {mode: 0o600});
}
async function main() {
// In Electron, create this in the main process, using customer activation input.
const client = await Client.openProduct(
PRODUCT_ID, TRUSTED_KEYS,
process.env.LICENTIVO_LICENSE_KEY ?? '',
error => console.error('Background verification:', error.message),
);
try {
const feature = process.env.LICENTIVO_FEATURE ?? 'export';
const path = process.env.LICENTIVO_OUTPUT ?? 'licensed-report.txt';
const action = () => exportReport(path);
if (process.env.LICENTIVO_METERED === '1') {
await client.runMeteredFeature(feature, 1, process.env.LICENTIVO_OPERATION_ID ?? '', action);
} else {
await client.runFeature(feature, action);
}
console.log(`License OK: ${feature} is available\nExport completed: ${path}`);
} finally {
await client.close(); // In your application, close only when the app exits.
}
}
main().catch(error => {console.error(error.message); process.exitCode = 2;});
4. シャットダウンするまでクライアントを存続させます。
このコマンドラインの例は、1 つの操作を実行して終了します。デスクトップ アプリケーションでは、起動時に 1 つのクライアントを開き、エクスポート アクションから機能コールバックを呼び出し、アプリケーションの終了時にのみクライアントを閉じます。
アクティブ化後、その後の起動では LICENTIVO_LICENSE_KEY を空のままにして、同じユーザーとキャッシュの場所にプライベート認証情報を復元できます。その認証情報をユーザーの application-data ディレクトリに保存します。閉じるとハートビートが停止し、同時接続枠が戻ります。通常の終了では、ノードロックされたデバイスが非アクティブ化されるべきではありません。
オフライン アクセスは、ポリシーで許可され、署名された許可が有効な場合にのみ利用できます。期限切れまたは拒否された機能はブロックされたままにする必要があります。従量制課金操作にはネットワーク接続が必要です。
Electron では、メイン プロセスでクライアントを所有し、狭い IPC インターフェイスを通じて必要な保護されたアクションのみを公開します。 runFeature を待って閉じます。アプリケーションの存続期間中クライアントを存続させます。非同期コールバックは、成功を報告する前に終了する必要があります。
5. 実行して結果を確認する
[コンソール] > [製品] から製品 ID をコピーします。その製品の署名公開鍵を開き、すべてのキー ID/公開鍵のペアを初期化コードに貼り付けて、YOUR_PRODUCT_ID、YOUR_KEY_ID、および YOUR_PUBLIC_KEY を置き換えます。迅速な統合により、これらのパブリック コード定数を生成できます。製品構成ファイルは必要ありません。 SDK のデフォルトは https://www.licentivo.com. です
- エクスポート アクセス権を持つ有効なライセンスによって licensed-report.txt が作成されることを確認します。
- LICENTIVO_LICENSE_KEY をクリアし、同じユーザー アカウントを使用して再度実行します。保存された認証情報が復元されます。
- LICENTIVO_FEATURE をライセンスに含まれていない機能に設定し、LICENTIVO_OUTPUT を新しいファイル名に設定します。プログラムは、そのファイルを作成せずに拒否を報告する必要があります。
- オフライン再起動は、許可され、期限切れになっていない署名付きの許可を使用してのみテストしてください。バックグラウンド更新エラーの後に失敗した機能チェックをバイパスしないでください。
$env:LICENTIVO_LICENSE_KEY = 'YOUR_LICENSE_KEY'
node main.mjsLICENTIVO_LICENSE_KEY=YOUR_LICENSE_KEY node main.mjsよくある統合の問題
製品 ID、すべてのキー ID/公開鍵のペア、および顧客のライセンス入力を確認します。公開検証キーは製品に属します。顧客のライセンスと保存されたデバイスの認証情報は別のものです。開発テスト キーやベンダー管理 API キーを配布しないでください。
機能が拒否されました、デバイス制限に達したか、ライセンスが期限切れになりました: コンソールでライセンスとポリシーを検査し、顧客に SDK エラーを表示します。認証が失敗した場合は、エクスポート関数を呼び出してはなりません。
RunFeature は機能へのアクセスをチェックします。従量制のバリアントは、設定された使用量を予約および決済します。実際のビジネス ジョブごとに安定した操作 ID を使用し、中断されたジョブを回復する前にその永続的な結果を検査します。
モジュールが見つかりません: main.mjs を含む同じプロジェクトに @licentivo/sdk をインストールします。構成された proxy_url には、Node.js バージョンと互換性のあるオプションの undici パッケージがさらに必要です。