AHHA
AHHA部落格LIFF 教學:建立流程、Endpoint URL 與 Size 設定完整說明

LIFF 教學:建立流程、Endpoint URL 與 Size 設定完整說明

2026年9月17日線上預約· Howshin Wang
同一個頁面用 LIFF 網址與一般網址開啟的對照:前者身分已帶入,後者要求重新登入

TL;DR

  • 建立 LIFF app 的地方是 LINE Login 頻道的 LIFF 分頁,不是官方帳號管理後台。一個頻道最多可以加 30 個 LIFF app。
  • Endpoint URL 必須是 https,而且不能帶 # 片段。它同時決定了 liff.init() 的作用範圍——只有在該網址本身或它的下層路徑才保證運作。
  • 建立完成後會拿到 LIFF ID 與 LIFF URL(https://liff.line.me/{LIFF ID}。給客戶的要是後者,不是你自己的網址。
  • LIFF 網址與一般網址會開在兩種不同的瀏覽器。 前者開 LIFF 瀏覽器、帶得到客戶身分;後者開 LINE 內建瀏覽器、拿不到身分,會要求重新登入。這是「明明設定都對卻要客戶再登入一次」最常見的原因。
  • 設定完打不開,先查頻道狀態是不是還停在開發中——那個狀態下只有開發者本人能開。

LIFF(LINE Front-end Framework)讓網頁開在 LINE 裡面,並且把客戶的 LINE 身分帶進去。概念與能做的事另有一篇完整說明,這裡只處理設定:從哪裡建立、每個欄位填什麼、以及設定完打不開時要查哪幾個地方。

一、建立 LIFF app 前要先有的頻道

LIFF app 掛在 LINE Login 頻道底下,所以要先有一個。在 LINE Developers Console 建立 provider 之後,於其下新增 LINE Login 頻道。

如果還需要推播訊息給客戶,另外要一個 Messaging API 頻道。Messaging API 頻道必須從 LINE 官方帳號管理後台開啟,不是在開發者後台直接建立(官方帳號本身的申請與收費見 LINE 官方帳號教學)——順序反過來會得到一個無法與官方帳號連動的頻道,這個錯誤要整個重來。

兩個頻道都要把狀態從開發中切換為已發布。停在開發中時,只有列為測試者的帳號能開啟,其他人看到的是錯誤畫面。

二、LIFF app 的註冊步驟與必填欄位

在 LINE Login 頻道裡切到 LIFF 分頁、按新增,依序填寫:

名稱會顯示在 LIFF app 之間切換時的提示訊息與多分頁檢視上。官方文件明訂名稱不能包含「LINE」或近似字串,取名時容易踩到。

Size 是 Compact、Tall、Full 三選一,決定網頁在 LINE 裡佔多少高度;Endpoint URL 填你的網頁網址。這兩欄各有一些細節,下面兩節分開講。

Scopes 決定這個 LIFF app 能向客戶要到哪些資料,加好友選項則有三種:On (normal) 在授權畫面附上加好友選項、On (aggressive) 在授權畫面之後再跳一個確認畫面、Off 則不顯示。這兩欄同樣往下看第五節。

存檔後系統產生兩樣東西:LIFF ID(格式像 1234567890-AbcdEfgh)與 LIFF URLhttps://liff.line.me/{LIFF ID})。要放進圖文選單或傳給客戶的是 LIFF URL。

一個 LINE Login 頻道最多可以加 30 個 LIFF app。

三、Endpoint URL 的規則與 liff.init() 的作用範圍

Endpoint URL 有兩條硬性規定:必須是 https,以及不能包含 # 片段

比較容易忽略的是它的第二個作用——它決定了 liff.init() 在哪些網址上保證運作。官方文件寫的是:liff.init() 只在與 Endpoint URL 完全相同、或位於其下層的網址上保證運作。

舉例來說,Endpoint URL 設為 https://example.com/path1/

執行 liff.init() 的網址 是否保證運作
https://example.com/path1/
https://example.com/path1/path2/ 是(下層)
https://example.com/ 否(上層)
https://other.com/path1/ 否(不同網域)

設得太深會讓上層頁面落在範圍外。如果整個站都可能用到 LIFF,Endpoint URL 就該設在根路徑;只有單一功能要用,才設到該功能的路徑。

落在範圍外時的症狀不一定是報錯。主控台會出現一段警告:

liff.init() was called with a current URL that is not related to the endpoint URL.

而多分頁檢視、取得永久連結這類功能會在此時失效——官方文件另外註明,目前網址若不是以 Endpoint URL 開頭,永久連結取不到、分享也會失敗。

四、Size 的三種選擇:Compact、Tall、Full

Size 決定網頁在 LINE 裡的高度,三選一:

Size 適合的內容
Compact 單一動作,例如確認、投票、簡短表單
Tall 多數情況的預設選擇,例如預約流程、商品列表
Full 需要整個畫面的內容,例如多分頁的小程式、地圖

Full 時,標頭預設會顯示一個動作按鈕。啟用 Module mode 可以把它隱藏,但那個選項只有在 Size 選 Full 時才會出現。

Size 選錯不會壞掉,只是體驗差——Compact 塞進一個長表單,客戶要在一個很矮的視窗裡捲動;Full 拿來放一個確認按鈕則顯得空。這個欄位事後隨時可以改,不必在這一步停太久。

五、Scope 與加好友選項

Scope 決定 LIFF app 能取得什麼。常用的四個:

  • profile:取得客戶的顯示名稱、頭像與 user ID。要辨識客戶身分就需要它。
  • openid:取得 ID token,用來在自己的伺服器端驗證身分。
  • email:取得電子信箱。這個選項只有在該 LINE Login 頻道已申請 OpenID Connect 電子郵件權限之後才會出現,不是預設就有。
  • chat_message.write:允許 LIFF app 代替客戶送出訊息到聊天室。

勾選的 scope 會顯示在客戶第一次開啟時的授權畫面上。只勾實際會用到的——授權畫面上的項目愈多,客戶猶豫的機會愈大,而多勾的權限並不會讓功能變好。

加好友選項值得多想一下。從 LIFF 進來的客戶不會自動成為官方帳號好友,而沒加好友就收不到任何推播。如果這個 LIFF app 之後要靠推播通知客戶(預約確認、提醒),把選項設成 On (normal) 至少讓客戶在授權時看得到入口。

六、LIFF 網址與一般網址是兩種瀏覽器

設定都正確卻還是出問題時,原因多半在這裡,而官方文件不會直接告訴你。

同一個網頁,用兩種網址開會進入兩種不同的環境:

  • https://liff.line.me/{LIFF ID} → 開啟 LIFF 瀏覽器liff.isInClient() 為 true,客戶身分帶得進來,不需要重新登入。
  • https://你的網域/該頁面 → 開啟 LINE 內建瀏覽器。那只是一般的 webview,沒有 LIFF 的身分脈絡,程式通常會判斷成「未登入」並要求客戶登入一次。

症狀是這樣的:圖文選單的某一格用純網址設定,客戶按下去進得了頁面,但被要求重新登入——設定看起來完全正常,因為頁面確實打開了。

還有一個連帶限制:一個 LIFF app 只綁一個 Endpoint URL,所以不能用 liff.line.me/{LIFF ID}/其他路徑 跳到同層的另一個頁面。要在同一個 LIFF 裡切換不同功能,得做成同一個 app 內的分頁,或是用查詢參數(例如 ?tab=mybookings)讓程式自己判斷該顯示哪一段。

七、設定完卻打不開的常見原因

依照排查成本由低到高:

頻道還停在開發中。 LINE Login 與 Messaging API 兩個頻道的狀態都要切到已發布,否則只有測試者開得起來。這一條佔了「別人打不開但我可以」這類回報的多數。

用的是純網址不是 LIFF 網址。 見上一節。圖文選單、訊息裡的連結、QR code,任何要帶身分的入口都該用 https://liff.line.me/{LIFF ID}

Endpoint URL 設錯層級。 執行 liff.init() 的頁面若在 Endpoint URL 的上層,就落在保證範圍外,主控台會有警告但畫面不一定報錯。

Endpoint URL 指向錯的網域。 要填的是網站自己的網域,不是架站平台的主網域。這在使用架站平台時特別容易填錯。

Scope 沒勾。 呼叫 liff.getProfile() 卻沒勾 profile,或呼叫 liff.getIDToken() 卻沒勾 openid,方法會失敗而不是回傳空值。

真機測試不能省。以上幾項有一半在桌機的開發者工具裡看起來都是正常的,要用手機從 LINE 實際點一次才看得出來。

參考來源

LIFFLIFF 教學LINE LoginEndpoint URLLIFF IDLINE 整合

常見問題

Q

LIFF app 要在哪裡建立?

LINE Developers ConsoleLINE Login 頻道底下,切到 LIFF 分頁按新增,不是在 LINE 官方帳號管理後台。

一個 LINE Login 頻道最多可以加 30 個 LIFF app。建立完成後會產生 LIFF ID 與 LIFF URL 兩樣東西。

Q

Endpoint URL 要填什麼?有什麼限制?

填你自己網頁的網址。兩條硬性規定:必須是 https,而且不能包含 # 片段

它還有第二個作用——決定 liff.init() 在哪些網址上保證運作。官方規則是只有與 Endpoint URL 完全相同、或位於其下層的網址才在保證範圍內。設得太深會讓上層頁面落在範圍外,所以整站都可能用到 LIFF 時,應該設在根路徑。

Q

Compact、Tall、Full 該選哪一個?

Compact 適合單一動作,例如確認或簡短表單;Tall 是多數情況的預設選擇,例如預約流程;Full 適合需要整個畫面的內容,例如多分頁的小程式。

選 Full 時標頭預設會出現一個動作按鈕,要隱藏得啟用 Module mode,而那個選項只有 Size 選 Full 才會出現。這個欄位事後隨時可以改。

Q

為什麼客戶點進 LIFF 還是被要求重新登入?

多半是用了一般網址而不是 LIFF 網址。兩者會開在兩種不同的瀏覽器

https://liff.line.me/{LIFF ID} 開的是 LIFF 瀏覽器,客戶身分帶得進來;用你自己的網域直接開,走的是 LINE 內建瀏覽器,那只是一般 webview,沒有 LIFF 的身分脈絡,程式通常會判斷成未登入。圖文選單、訊息連結、QR code,任何要帶身分的入口都該用 LIFF 網址。

Q

設定都填好了,別人卻打不開?

先查頻道狀態。LINE Login 與 Messaging API 兩個頻道都要從開發中切換為已發布,停在開發中時只有列為測試者的帳號開得起來——「我可以但別人不行」的回報多數是這一項。

其次查是不是用了純網址而非 LIFF 網址、Endpoint URL 的層級與網域是否正確、以及要呼叫的方法對應的 Scope 有沒有勾。這幾項有一半在桌機的開發者工具裡看起來都正常,要用手機從 LINE 實際點一次才看得出來。

線上預約模組

讓顧客自己完成預約

顧客自行選擇時段、填寫資料並收到確認信,不需逐則訊息往返確認。

  • 可設定每週開放時段與服務項目
  • 支援會員預約紀錄與套票扣點
  • LINE 整合,顧客在 LINE 內即可預約
  • 預約確認信自動寄出
了解線上預約系統免費試用 14 天

線上預約 分類其他文章

繼續閱讀同主題的延伸內容

LINE 圖文選單設定教學:尺寸規格、按鈕動作與自動回應完整說明
LINE 圖文選單怎麼設定、圖片尺寸與版型規格為何、按鈕動作可以選哪些、如何搭配自動回應訊息做出按下宮格就回覆文字或圖片的效果。本文依按鈕用途分流說明官方帳號管理後台與串接平台兩條路徑,並整理圖文選單…
如何利用 AHHA 預約功能,建立具有排課、師資管理與分帳的系統
課程制的生意跟一對一預約的順序相反:你要先把課排出來,學員才報名。AHHA 的預約功能兩種型態都支援,同一個站可以並存。排課表以週為單位,一週排好之後可以整批複製到後面幾週。
預約系統自己做:用 ahha 一步步設好服務、時段、押金到會員回訪
本篇內容為「照著做」的設定教學,不是選型比較。如果你還在猶豫要不要做、該選哪一種,先看線上預約系統完整指南把方向定下來,再回來動手。 最短路徑:建服務項目 → 設每週開放時段 → 把預約區塊放上頁面,…
LIFF 是什麼?讓客人在 LINE 對話框內預約、查會員、看訂單
LIFF(LINE Front-end Framework)是 LINE 平台提供的網頁應用嵌入框架,讓網頁能在 LINE 對話框內直接顯示與運行,省去客戶跳出 LINE 開瀏覽器的動線斷層。 LIF…

留言討論

只有會員能留言(防止垃圾訊息),留言顯示於此頁。

載入中...
← 返回部落格