跳到正文

軟體授權心跳與離線驗證

這兩個設定都在“授權策略”中,但解決的是兩件事:有網時多久聯系伺服器,以及聯系不上時還能使用多久。

心跳間隔:多久驗證一次

在“心跳請求間隔(秒)”中填寫 600,SDK 就會在執行期間大約每 10 分鐘傳送一次心跳。每次成功都會取得最新的執行規則,并刷新本機授權快取。

可填寫 600–86400 秒。填寫 0 會關閉定時心跳,應用程式仍可以主動呼叫驗證或刷新。定時請求會增加 0–10% 的隨機延遲,實際間隔不會低于 600 秒。

綁定裝置且快取有效時,啟動會先恢復授權,再在管理後台聯網刷新,關閉定時心跳時也會刷新。不允許離線或使用浮動席位時,啟動必須等伺服器確認。

離線時間:伺服器聯系不上時能用多久

“允許離線方式”有三種選擇。它不會替你修改心跳間隔。

允許指定時長
例如填寫 24 小時:從最近一次成功聯網驗證開始,簽章快取最多有效 24 小時。期間斷網或伺服器臨時故障,軟體可以繼續用;超過這個時間后,需要成功聯網驗證。
不允許離線回退
啟動必須成功聯系伺服器,請求失敗時不會靠磁碟快取放行。執行中取得的短期簽章最多有效 max(10, 心跳间隔) 秒;應用程式需要持續驗證并檢查功能權限。
允許永久離線
已經取得的本機簽章可以長期使用,網路失敗時仍能檢查權限。如果授權本身只有 30 天,仍會在 30 天到期;永久離線不會把期限授權變成永久授權。

介面用 offline_mode 表示這三種選擇,依次為 limited, none, permanent。指定時長時,offline_seconds 為 1–31536000 秒;另外兩種方式填 0。

這幾個組合會怎樣執行?

心跳 / 離線設定實際行為
10 分鐘 / 24 小時有網時每 10 分鐘驗證。斷網后按最后一次成功驗證的時間,最多繼續使用 24 小時
10 分鐘 / 永久離線仍然每 10 分鐘嘗試心跳,成功時更新規則;聯系不上時繼續使用有效簽章
0 / 永久離線有有效快取時,啟動可直接使用,不定時傳送請求。應用程式主動驗證或刷新時仍會聯系伺服器
0 / 24 小時不定時心跳,但快取仍會到期;應用程式要自行安排驗證,不能靠關閉心跳延長離線時間

建議離線時間長于心跳間隔。如果設成“每小時心跳,但只允許離線 1 分鐘”,簽章會在下一次定時心跳前過期,應用程式必須另行驗證。

修改策略后,舊授權會更新嗎?

會。儲存授權策略時,伺服器會在同一筆交易中把裝置或席位上限、功能、功能次數、授權方式、維護期和版本限制同步到所有關聯且未撤銷的授權。頁面不需要再逐筆勾選「套用策略」。

同步會保留每份授權自己的期限類型、有效天數、首次啟用、到期時間、客戶歸屬、已用次數和單獨延長的維護期。策略的期限類型只用於之後簽發的新授權,不會把現有的 30 天授權改成永久授權。

如果切換裝置綁定與浮動席位時仍有使用中裝置或工作階段,或者新上限低於目前占用量,儲存會傳回 ACTIVE_DEVICES_CONFLICT,策略和所有關聯授權都不會發生部分更新。先釋放衝突裝置,再重新儲存。

儲存成功後,關聯的舊授權和新授權都會在下一次成功啟用、驗證或心跳時採用新規則,SDK 會用新簽章取代快取。使用相同 Idempotency-Key 重試仍會傳回原本請求的結果。

持續斷網的裝置暫時不知道規則變了,仍按已有簽章使用。僅僅接上網路也不會自動改寫快取,要有一次成功的請求。應用程式可以在網路恢復時主動刷新。

「套用策略」仍有一個用途。

需要把選取的授權改為另一份策略時,在授權頁面勾選記錄並使用「套用策略」預覽移轉。編輯授權目前已關聯的策略時,直接儲存即可自動同步。

主動聯網刷新

下面的方法始終嘗試聯系伺服器,包括“永久離線 + 關閉心跳”的情況。成功后更新簽章;網路失敗會報刷新失敗,同時保留仍允許使用的舊快取;明確被撤銷或釋放時清除快取。

語言呼叫方式
Goclient.RefreshOnline(ctx)
Javaclient.refreshOnline()
Cln_refresh_online(client)
C++client.RefreshOnline()
C#await client.RefreshOnline()
Pythonclient.refresh_online()
JavaScriptawait client.refreshOnline()

刷新成功計一次啟用 API 請求。如果剛更新的策略開啟了原來關閉的心跳,再呼叫對應語言的 StartHeartbeat 啟動調度。持續離線時,裝置也無法收到撤銷或釋放通知。