伺服器套件
呢頁係由英文翻譯過嚟嘅。如果兩個版本有出入,以英文頁為準。 睇英文頁
你部伺服器係嵌入入面持有密鑰嗰一半。伺服器套件包住你所用語言嘅 Lingara 函式庫,所以佢可以用你個 OAuth 用戶端登入,同埋為你嘅玩家簽發權杖、驗證 Lingara 傳畀你嘅 webhook,仲會喺玩家離開嗰陣刪除佢哋。下面嘅範例喺每種語言入面都跟住同樣嘅步驟。
建立按用量計費嘅用戶端
喺控制台度建立一個 OAuth 用戶端,然後將佢設做按用量計費方案。畀佢 embed:mint,即係用嚟簽發權杖同刪除玩家嘅權限範圍。用緊任何其他方案嘅用戶端都會被拒絕畀呢個權限範圍。另外仲要畀佢你想玩家權杖帶住嘅每一個權限範圍,因為權杖淨係可以持有你個用戶端持有嘅權限範圍。embed:mint 本身永遠唔會交畀玩家。
將用戶端嘅 ID 同密鑰放喺你部伺服器嘅環境入面,永遠唔好放入遊戲或者頁面。
註冊你嘅網頁來源
網站小工具需要一個綁定頁面來源嘅權杖。喺控制台度,喺你個用戶端嘅設定入面列出你個小工具會行嘅每一個來源,例如 https://www.example.com。你最多可以列 10 個。一個來源由協定、主機同可選嘅連接埠組成,唔包路徑。開發嗰陣,亦都可以用你自己連接埠上面嘅回送來源,例如 http://localhost:5173。權杖淨係喺佢簽發時對應嘅嗰個確切來源先會被接受,所以為任何其他來源簽發嘅權杖都會被 API 拒絕。遊戲唔需要來源。
簽發權杖
喺你自己嘅登入後面先簽發:你嘅權杖路由會先檢查你自己嘅工作階段,之後先為嗰個玩家簽發。按工作階段為呢條路由做速率限制。一個簽發請求有三個欄位:
player_ref:你自己對嗰個玩家嘅參照,1 到 128 位元組嘅 UTF-8。Lingara 淨係會儲存佢嘅雜湊值。
scopes:最多 5 個,喺玩家權杖可以持有嘅權限範圍入面揀:events:read、events:write、lesson_plans:read、lesson_plans:write 同 embed:play。唔填嘅話,權杖會持有其中你個用戶端持有嘅每一個。
origin:如果係網站,就係頁面嘅來源,一定要係你已經註冊咗嘅其中一個。如果係遊戲就唔使填。
回覆包含 token、expires_at、expires_in(以秒計嘅同一個到期時間,畀時鐘唔可靠嘅裝置用)、subject、權杖嘅 scopes,同埋 account_linked,佢話你知玩家有冇連結自己嘅 Lingara 帳戶。subject 向你個用戶端識別嗰個玩家,每一個關於佢嘅事件都會帶住佢。
將權杖同佢嘅到期時間完全照套件交接輸出嘅樣交畀玩家,經你自己嘅工作階段傳送,永遠唔好放喺 URL 入面,同埋用 Cache-Control: no-store 傳送回覆。玩家套件會喺權杖就嚟到期嗰陣再要過;權杖永遠唔會更新。
將 webhook 路由去對應嘅玩家
Lingara 會為佢傳畀你嘅每一個 webhook 簽署。喺做任何 JSON 解析之前,將原始請求主體交畀套件,因為簽署涵蓋嘅係佢嘅位元組。套件會驗證簽署,然後喺你自己嘅一張資料表入面搵事件嘅 subject 指明嘅玩家;呢張資料表同你嘅玩家資料放埋一齊,將每個 subject 對應到你嘅 player_ref。連結咗帳戶嘅玩家會有兩個 subject,所以要保持 subject 欄位唯一,同時容許同一個 player_ref 出現兩次。
傳送係至少一次:跳過你已經處理過嘅事件 ID。喺 10 秒之內回應,將任何慢嘅處理放入你自己嘅佇列。
刪除玩家
喺你自己嘅帳戶刪除流程入面,用玩家嘅 player_ref 刪除佢。Lingara 會撤銷嗰個玩家持有嘅每一個權杖,同埋移除為佢儲存嘅所有嘢。刪除一個唔存在嘅玩家都會成功,所以呢個呼叫可以安全咁重複做。刪除你自己嘅資料就仍然係你嘅責任。
自己帶 Lingara 帳戶嚟嘅玩家
有自己 Lingara 帳戶嘅玩家可以連結佢,咁佢哋嘅練習同計畫就會放喺嗰個帳戶度。暫時仲未有套件包住呢個功能;佢係由你部伺服器發出嘅兩個 API 呼叫。
你部伺服器用同簽發權杖一樣嘅用戶端,以 PKCE 行授權碼流程:玩家喺自己個瀏覽器度登入同同意,永遠唔會喺你個遊戲入面做,然後你部伺服器用佢嘅密鑰交換授權碼。喺嗰個同意入面要求 embed:play 同你簽發時用嘅每一個權限範圍,仲要包埋 events:read,如果唔係玩家連結之後你就會收唔到任何關於佢嘅消息。
之後用嗰次交換返回嘅委派權杖呼叫 linkEmbedPlayer,永遠唔好用你用戶端自己嘅權杖。佢嘅回覆包含:
status:今次呼叫建立咗連結就係 linked,連結本身已經生效就係 existing;
subject:嗰個帳戶嘅 subject,玩家由而家開始嘅事件都會帶住佢;
previous_subject:訪客嘅 subject,玩家之前嘅事件會保留佢;
linked_at:連結建立嘅時間;
scopes:由而家開始呢個玩家嘅權杖最多可以持有嘅權限範圍;
carried:今次呼叫按資料表搬去嗰個帳戶嘅資料列;
kept:佢留咗畀訪客嘅資料列,例如仲寫緊嘅計畫。
連結可以安全咁重複做,重複呼叫會完成搬移 kept 回報嘅內容。將帶住任何一個 subject 嘅事件都路由去同一個 player_ref。你下次為呢個玩家簽發權杖嗰陣,account_linked 會返回 true,而玩家做嘅所有嘢仍然係由你畀錢。
要結束連結,就用你用戶端自己嘅權杖呼叫 unlinkEmbedPlayer。冇任何嘢會搬返去訪客度。學習者亦都可以自己結束連結,方法係喺「已連結嘅 App」度移除你個 App。