Giao thức CLV1 đã công khaiĐọc đặc tả
Mục lục thư viện

Thư viện tài liệuTích hợp

Biến ứng dụng

Biến là các cặp tên và giá trị mà phần mềm của bạn nhận được sau khi đăng nhập thành công. Bạn dùng chúng để gửi cấu hình, cờ tính năng, thông báo hay thiết lập riêng cho từng khách mà không cần phát hành bản build mới.

7 phút đọc

Biến dùng để làm gì

Một vài cách dùng phổ biến:

  • Thông báo hiển thị khi mở phần mềm, ví dụ lịch bảo trì hay khuyến mãi.
  • Cấu hình có thể đổi sau khi phát hành: địa chỉ máy chủ của riêng bạn (https://files.example.com), số lần thử lại, ngưỡng cảnh báo.
  • Hạn mức riêng cho một khách, ví dụ max_projects lớn hơn cho một license doanh nghiệp.
  • Dữ liệu có giá trị mà bạn chỉ muốn trao cho phiên hợp lệ, thay vì nhúng sẵn trong file chạy.

Biến thuộc riêng một ứng dụng. Giá trị luôn là chuỗi; dữ liệu có cấu trúc thì lưu dạng JSON và parse trong phần mềm.

Ba phạm vi

Phạm viÁp dụng choCần điền
Mọi người dùngMọi phiên của ứng dụngKhông
Một licenseMọi phiên chạy trên license đóID license (lic_…)
Một người dùngChỉ phiên đã đăng nhập bằng tài khoản đóID tài khoản (usr_…)

Phiên có tài khoản là phiên tạo bởi register(), login() hoặc redeem(). Phiên tạo bằng activate(key) hoặc trial() không gắn tài khoản nào, nên không bao giờ nhận biến phạm vi Một người dùng.

Thứ tự ưu tiên

Khi cùng một tên có ở nhiều phạm vi, server gộp lại thành một bảng duy nhất và giá trị cụ thể hơn thắng: người dùng, rồi license, rồi toàn cục. Ví dụ với ba biến cùng tên max_projects:

Phạm viGiá trị
Mọi người dùng3
Một license (license A)10
Một người dùng (tài khoản B)50
  • Máy kích hoạt bằng key của license A, không có tài khoản: nhận 10.
  • Tài khoản B đăng nhập, dù đang dùng license nào: nhận 50.
  • Mọi phiên còn lại: nhận 3.

Tìm ID license và ID người dùng

  • ID license: ở Phát hành & bản quyền › License, bấm ⋯ cuối dòng rồi chọn Sao chép ID, hoặc chọn Xem chi tiết, ID nằm ngay dưới tiêu đề. Phần mềm cũng có ID này trong grant.license.id.
  • ID người dùng: bảng Người dùng cuối › Người dùng không hiện ID. Bạn lấy nó từ trường endUserId trong payload webhook user.created, hoặc từ danh sách người dùng của Seller API.

Thêm biến trong dashboard

  1. Mở ứng dụng, vào Tích hợp › Biến.
  2. Bấm Thêm biến.
  3. Điền Tên: từ 1 đến 64 ký tự, bắt đầu bằng chữ cái hoặc dấu gạch dưới, sau đó chỉ gồm chữ cái không dấu, chữ số, _, . và -. Tên phân biệt hoa thường.
  4. Điền Giá trị: tối đa 16.384 ký tự, không được để trống trong dashboard.
  5. Chọn Phạm vi. Nếu không phải Mọi người dùng, ô ID license hoặc người dùng hiện ra và bắt buộc phải điền.
  6. Bật Bí mật nếu giá trị cần được mã hoá (xem phần dưới).
  7. Bấm Lưu. Thông báo Đã lưu biến xác nhận thành công.

Bảng liệt kê biến theo phạm vi rồi theo tên, với các cột Tên, Giá trị (biến bí mật hiện Đã ẩn), Phạm vi (kèm 12 ký tự đầu của ID) và Ngày tạo, cột này thực ra hiển thị lần lưu gần nhất.

Sửa và xoá

Bấm vào một dòng để mở hộp sửa. Tên bị khoá; muốn đổi tên, hãy xoá biến cũ và thêm biến mới. Mỗi bộ ba phạm vi, ID và tên chỉ có một biến, nên lưu lại với đúng bộ đó là ghi đè giá trị.

Để xoá, bấm biểu tượng thùng rác (Xoá) cuối dòng. Biến bị xoá ngay, không có hộp xác nhận và không hoàn tác được; thông báo Đã xoá biến hiện lên.

Mọi thành viên workspace đều xem được danh sách biến, nhưng chỉ Quản trị và Chủ sở hữu mới thêm, sửa, xoá được. Mỗi lần lưu hoặc xoá được ghi vào nhật ký kiểm toán với tên, phạm vi và cờ bí mật, không kèm giá trị.

Biến bí mật

Khi bật Bí mật, giá trị được mã hoá AES-256-GCM trước khi lưu và gắn với đúng ứng dụng, phạm vi, ID và tên của nó: bản mã chép sang dòng khác sẽ không giải mã được. Sau khi lưu:

  • Dashboard chỉ hiện Đã ẩn, Seller API trả value: null. Không có cách nào đọc lại giá trị.
  • Mở hộp sửa, ô Giá trị để trống. Muốn lưu bất kỳ thay đổi nào, bạn phải nhập lại toàn bộ giá trị. Tắt Bí mật khi nhập lại thì biến trở về dạng thường.

Chỉ phiên hợp lệ mới nhận biến

Server trao biến ở đúng hai chỗ: trong câu trả lời có chữ ký của một lần đăng nhập thành công (activate, trial, register, login, redeem), và qua lời gọi variables(). Lời gọi variables() đòi một phiên đang sống và kiểm tra giống heartbeat:

Mã lỗiKhi nào
session_requiredPhần mềm chưa đăng nhập
session_expiredPhiên đã hết hạn hoặc bị kết thúc
session_device_mismatchMã phiên được gửi từ một máy khác
device_revoked, device_blockedMáy đã bị gỡ khỏi license hoặc bị chặn
user_bannedTài khoản đang bị cấm
license_revoked, license_suspended, license_expiredLicense không còn dùng được (đã tính thời gian ân hạn của gói)

Server áp dụng quy tắc này cho mọi ứng dụng, bạn không cần bật gì. Đây là một phần của Kiểm soát phía server trong Bảo vệ Standard. Xem Hai chế độ bảo vệ.

Vài hệ quả cần biết:

  • Biến không nằm trong token offline. Khi phần mềm chạy offline, nó không nhận được biến mới.
  • Trong lúc bảo trì, phiên đang mở vẫn đọc biến bình thường; chỉ lượt đăng nhập mới bị chặn. Khi ứng dụng bị tạm dừng, mọi yêu cầu kể cả variables() nhận app_paused.

Đọc biến trong phần mềm

Với SDK JavaScript, biến có sẵn trong kết quả đăng nhập, và variables() lấy lại bản mới nhất mà không cần đăng nhập lại:

import { ClavisClient, ClavisError } from "@clavisauh/sdk";

const grant = await clavis.activate(key);
const notice = grant.variables["notice"]; // undefined nếu không có
const limits = JSON.parse(grant.variables["limits"] ?? "{}");

// Sau này, khi cần giá trị mới nhất
try {
  const variables = await clavis.variables();
  applyConfig(variables);
} catch (err) {
  if (err instanceof ClavisError && err.code === "session_expired") {
    await signInAgain();
  } else {
    throw err;
  }
}
  • variables là một object tên sang chuỗi, đã gộp theo thứ tự ưu tiên. Tên không có thì trả undefined, nên luôn chuẩn bị giá trị mặc định.
  • variables() trả về { variables }, không phải object biến trực tiếp.
  • Heartbeat không trả biến. Thay đổi trên dashboard đến phần mềm ở lần đăng nhập kế tiếp hoặc lần gọi variables() kế tiếp; server không tự đẩy xuống.
  • Câu trả lời được ký như mọi câu trả lời khác, nên SDK từ chối giá trị bị sửa trên đường truyền.
  • Đừng ghi giá trị bí mật ra đĩa hay vào log của phần mềm.

Quản lý biến qua Seller API

Để tự động hoá, ví dụ đặt hạn mức riêng cho một license ngay khi khách thanh toán, dùng Seller API với khoá có quyền variables:read hoặc variables:write:

  • GET /apps/{appId}/variables: liệt kê biến, giá trị bí mật trả null.
  • PUT /apps/{appId}/variables: tạo hoặc ghi đè theo bộ phạm vi, ID và tên.
  • DELETE /variables/{id}: xoá một biến.
{ "key": "max_projects", "value": "10", "scope": "license", "scopeRef": "lic_…", "isSecret": false }

Quy tắc về tên, độ dài và scopeRef giống hệt dashboard. Chi tiết trong tham chiếu Seller API.

Liên quan

Bạn cần giúp gì?

Câu hỏi thường gặp

ClavisAUH là gì?

Dịch vụ bản quyền và xác thực cho phần mềm desktop: license key, khoá thiết bị, đăng nhập người dùng và phản hồi có chữ ký. Tất cả quản lý trên một dashboard

Vì sao kẻ crack không làm giả được server?

SDK chỉ tin câu trả lời ký bằng khoá bí mật của ứng dụng. Khoá đó không bao giờ rời server của chúng tôi, nên server giả không ký được và bị từ chối

Trong file chạy của tôi có gì?

Mã ứng dụng và khoá công khai. Không có bí mật nào, vì mỗi thiết bị tự tạo cặp khoá riêng ở lần chạy đầu

Có chạy được khi offline không?

Có. Mọi gói đều có token offline có chữ ký dùng được 7 ngày, ứng dụng tự kiểm tra tại máy. Premium cho bạn chọn bao lâu. License đã thu hồi vẫn có thể chạy offline trong khoảng đó, trừ khi Chế độ chỉ online đang bật

Hỗ trợ những ngôn ngữ nào?

Hiện có JavaScript và TypeScript. Tiếp theo là C++, C# và Python, cùng một giao thức công khai

Gói Basic có miễn phí thật không?

Có. Không giới hạn thời gian, không cần thẻ. Cần nhiều hơn thì lên Premium

Liên hệ