深色模式

指南

錯誤處理與重試

SDK 已自動處理 token 過期、限流、暫時的 404 與版本撤回;丟到你手上的錯誤,依下表處理即可。

錯誤型別為 iOS LapidError、Android LapidException、Web LapidApiError 與其他 Lapid 錯誤類別。

建議做法

錯誤碼
代表
建議做法
SDK_NETWORK_ERROR
連線失敗或逾時
顯示「網路異常」,提供重試按鈕;SDK 不會自動重試資料請求
RATE_LIMITED
每秒請求過多
SDK 已重試最多 4 次仍失敗;稍後再試,並檢查是否重複請求
QUOTA_EXCEEDED
當日請求次數用完
到台北時間次日 00:00 才恢復,不要重試
DATASET_NOT_FOUND
該證券沒有這個資料集(例如興櫃的日 K)
顯示「無資料」,不是錯誤
SECURITY_NOT_FOUND
代號或 id 不存在
提示代號有誤
ENTITLEMENT_REQUIRED
你的 App 未開通這個資料集
聯絡我們開通;畫面隱藏該功能
DATASET_DISABLED
資料集暫時停用
顯示「暫停提供」,稍後再試
DATA_NOT_READY
尚無已發佈版本
稍後再試
UPSTREAM_UNAVAILABLE
伺服器暫時異常
稍後再試
SDK_INTEGRITY_ERROR
分塊內容與雜湊不符
重試;持續發生請回報
SDK_ATTESTATION_UNAVAILABLE
裝置驗證失敗(App Attest、Play Integrity)
提示更新系統或稍後再試;模擬器請用開發環境
TOKEN_INVALID、ATTESTATION_FAILED
授權被拒
通常是 appKey 錯誤或裝置被封鎖,請回報

完整錯誤碼見 錯誤碼。

SDK 已自動處理的情況

iOS 與 Android:

  • token 過期:重新取得 token 後重試 1 次。
  • 429 限流:依 Retry-After 等待 1 到 5 秒,最多重試 4 次。
  • 404:間隔 2 秒重試 2 次,再重讀目前版本試一次。
  • 410 版本已撤回:丟棄該版快取,換到目前版本重試 1 次。

Web SDK 只處理 token 過期(且需實作 tokenSource.invalidate),429、404、410 需自行處理。

判斷可否重試

iOS
do {
    _ = try await client.priceDaily(securityId: id)
} catch let error as LapidError {
    if error.code.isRetryable { /* 提供重試 */ }
}
Android
try {
    client.priceDaily(id)
} catch (e: LapidException) {
    if (e.code.retryable) { /* 提供重試 */ }
}
Web
try {
  await client.getPriceDaily(release, securityId);
} catch (e) {
  if (e instanceof LapidApiError) console.error(e.code, e.status);
}

iOS 用 error.code.isRetryable,Android 用 exception.code.retryable。兩者對 QUOTA_EXCEEDED 的判定不同(iOS 為否、Android 為是),建議對 QUOTA_EXCEEDED 一律不重試。