Skip to content

API 總覽 ​

匯入 ​

ts
// 畫面層(WebView)
import { sdk, getLaunch, inContainer, MiniAppError } from '@im/miniapp-sdk';

// 邏輯層(runtime: 'dual')
import { sdk, definePage, setData, getData, MiniAppError } from '@im/miniapp-sdk/logic';

型別都從同一個入口匯出(import type { Session, ImLaunch } from '@im/miniapp-sdk')。

能力一覽 ​

API畫面層邏輯層最低容器版本
sdk.ready()、getLaunch()、inContainer()、sdk.on()✓—1.0.0
sdk.auth.getSession()✓✓1.0.0(refresh 1.2.0)
sdk.ui.*✓✓1.0.0
sdk.theme.*✓—1.0.0
sdk.navigate.*✓—1.0.0
sdk.system.*✓✓1.0.0
sdk.http.fetch()✓✓1.0.0
sdk.storage.*✓✓1.1.0
sdk.share.toChat()✓✓1.1.0
sdk.telemetry.report()✓✓1.1.0
sdk.view.*✓—1.1.0
definePage、setData、getData—✓1.1.0

需要畫面的呼叫只在小程序顯示時有效。保活期間:ui.toast、ui.dialog、ui.actionSheet、share.toChat 會以 INTERNAL 失敗;ui.setTitle、ui.loading、navigate.close 不會報錯,但沒有效果。

錯誤處理 ​

所有非同步 API 失敗時都以 MiniAppError reject:

ts
class MiniAppError extends Error {
  readonly code: string; // 見下表
}
code意思
NOT_IN_CONTAINER不在容器內(瀏覽器預覽)。由 SDK 產生,不會送到容器
NOT_ALLOWED方法不存在、權限沒宣告、或此執行層不能呼叫
PERMISSION_DENIED使用者拒絕授權
DOMAIN_BLOCKED網址不在 domains
INVALID_PARAMS參數不合法
RATE_LIMITED呼叫太頻繁,或同類操作已在進行中
QUOTA_EXCEEDED儲存空間已滿
NETWORK網路錯誤
TIMEOUT逾時
INTERNAL容器內部錯誤

各錯誤的常見原因見除錯與常見問題。

呼叫的行為 ​

  • 合併送出:同一個 microtask 內的呼叫合併成一批送給容器(一批最多 64 個、1 MB,SDK 自動分批)。單一呼叫的參數超過 1 MB 會直接以 INVALID_PARAMS 失敗。
  • 逾時:預設 30 秒沒有回應就以 TIMEOUT 失敗(SDK 端計時)。等使用者操作的呼叫(ui.dialog、ui.actionSheet、share.toChat)不設逾時。http.fetch 以 timeoutMs 為準,SDK 另外以 max(30 秒, timeoutMs + 5 秒) 保底。
  • 頻率:每個小程序平均每秒最多 50 次呼叫,瞬間最多 100 次,超過以 RATE_LIMITED 失敗。
  • 結果送達:容器約每一幀把結果與事件送回一次;App 在背景時最多延遲 100 ms。
  • 重新載入:頁面重新載入後,舊頁面還沒完成的呼叫結果會被丟棄。

事件 ​

事件時機訂閱方式
app.pauseApp 退到背景、小程序被關閉(進入保活)sdk.on('app.pause', cb)
app.resumeApp 回到前景、保活的小程序被打開sdk.on('app.resume', cb)
theme.change主題(深淺色、主題色、增強對比)、系統字級、安全區變更sdk.theme.onChange(cb)

容器在你的程式第一次呼叫 SDK 之前不會送事件(先排隊)。