# News: Articles for #LIFF

2020/06/15

發布 LIFF v2.2.0 追加的 LIFF error code

關於下列的方法,當 Promise 被 reject 時皆已追加 LiffError code 的資訊於其中,以便讓錯誤訊息更容易被理解。

更多訊息,請見各方法的Error Response說明:


2020/05/21

已發布永久鏈結的 API 至文件上

LIFF SDK 能夠為當前的頁面建立一個永久鏈結。 我們將會發布建立永久鏈結的方法並放置於API 文件上。

  • liff.permanentLink.createUrl()
  • liff.permanentLink.setExtraQueryParams()

這些 API 已包含在最新的 LIFF SDK 中,因此當前 LIFF SDK 的版本不需變動。

更多關於取得永久連結的資訊,請參考LIFF技術文件中的Get a permanent link for the current page

2020/05/20

[更新] 近期內你將可以在LIFF endpoint URL中增加路徑(path)功能

2020年5月29日註記

這項規格更動原本預計在2020年5月的最後一週施行,但因考量到對現有LIFF app的影響,我們將改採取下列措施:

  • 如2020年5月20日的通知內容,我們將在endpoint URL中新增使用路徑的功能。
  • 我們計畫以不影響現有LIFF app的方式來新增此規格。
  • 規格更動預計於2020年6月下半施行。

對於重複的規格變動所造成混淆,我們致上誠摯的歉意。

目前開發者可在LINE Developers Console的LIFF tab的URL後輸入路徑 (/path)、query parameters (?key=value)與URL fragments (#URL-fragment),但僅有Domain Name與URL中的query parameters會被使用。

隨著接下來的更新內容,LIFF endpoint URL將會有以下更動:

  • 可使用路徑 (/path)。
  • 不可再輸入URL fragment (#URL-fragment)。

舉例而言,如果您在Heroku部屬LIFF app,您可以在LINE Developers Console的基本資訊中輸入https://{Heroku app name}.herokuapp.com/path/?key=value作為Endpoint URL

附有路徑的LIFF URL追加至console

URL scheme請務必使用https。

能在console中輸入的路徑(path)意味著可以降低發布新頁面所需的時間。例如,當前發布頁面為活動頁面時,您可以直接在endpoint URL中輸入您的活動頁面網址https://example.com/2020campaign上去。

注意

對於在console中註冊endpoint URL以及用來開啟LIFF app的URL scheme,兩者URL fragment的使用條件並不相同。請多加留意避免混淆。

Endpoint URL:
https://example.com/2020campaignhttps://example.com/2020campaign/?key=value
不可增加URL fragment。

用來開啟LIFF app的URL scheme:
https://liff.line.me/{liffId}/path_A/path_B/#URL-fragment
可以加上URL fragment。

欲知更多巧參閱LIFF的技術文件中關於Adding a LIFF app to your channel的部分。

對於舊有規格所造成的混淆,我們致上真摯的歉意。我們將會持續改善提供給開發者的服務品質,同時感謝您的諒解。

# 預計變更規格的日期

2020年6月下半。

2020/05/19

在LIFF app中已可使用OGP標籤

目前可以在LIFF app中的各個頁面中設定OGP標籤。例如在聊天室內分享您的LIFF app連結(https://liff.line.me/{liffId})時,您將可以隨意設置標題、說明、與縮圖等等。

下方為LIFF可支援的OGP標籤。 更多關於OGP標籤的訊息,請參考The Open Graph protocol (opens new window)

<html lang="ja" prefix="og: http://ogp.me/ns#">
<meta property="og:title" content="The title">
<meta property="og:type" content="`website`, `blog`, or `article`">
<meta property="og:description" content="A one to two sentence description">
<meta property="og:url" content="The URL">
<meta property="og:site_name" content="The name that represents the overall site">
<meta property="og:image" content="An image URL">
注意

當使用line://app/{liffId}(不建議使用)的形式分享連結時,OGP標籤將會被忽略。

2020/05/08

LIFF版本政策與生命週期已釋出

為了使各個LIFF版本的目的更明確,我們將公開LIFF版本政策。 我們同時也公開了各個主要版本的生命週期,讓使用者可以為LIFF的版本升級做適當的準備。

請使用最新版本的LIFF SDK

2019年10月16日的通知,LIFF v1將會被中止。 在中止後,您將無法使用LIFF v1來開啟LIFF app。

更多關於主要版本的生命週期與LIFF v1的中止時間,請參考LIFF技術文件中的LIFF SDK生命週期

# LIFF版本政策

自LIFF v2.2.0開始,LIFF的版本號將會遵循Semantic Versioning (opens new window) (SemVer)所設定的規範。

SemVer定義了下方的版本格式:

主版號(MAJOR).次版號(MINOR).修訂號(PATCH)

舉例而言,在v1.2.3, 1是主版號,2是次版號,3則是修訂號。

LIFF版本政策解釋了主要版本的生命週期並就各個版本(主要版本、次要版本、修訂版本)對開發者的意義提出說明。

# LIFF SDK (sdk.js)的更新政策

自LIFF v2.1.13發布後,我們準備了兩種CDN路徑。 在將LIFF SDK整合至LIFF app時,請指定符合您目的的CDN路徑。

CDN路徑 說明
CDN edge路徑 僅指定主要版本的方法。 不用更新您的LIFF app,也可以使用最新版本的LIFF SDK。
例: https://static.line-scdn.net/liff/edge/2/sdk.js
CDN固定路徑 可指定至修訂版本的方法。只要未更新LIFF app,即可繼續使用指定的修訂版本。由於其不會自動更新,故不會受到LIFF SDK升級的影響。
例: https://static.line-scdn.net/liff/edge/versions/2.1.13/sdk.js

使用Edge路徑的範例:

<script charset="utf-8" src="https://static.line-scdn.net/liff/edge/2/sdk.js"></script>
關於維持向下相容的CDN路徑

為了確保已上線的LIFF app運作,我們將提供下列CDN路徑來維持LIFF SDK的作業。使用此CDN路徑的LIFF SDK會與CDN edge路徑的LIFF SDK同一版本。

維持向下相容的CDN路徑為:
https://static.line-scdn.net/liff/edge/2.1/sdk.js

注意

我們建議您將LIFF app中向下相容的CDN路徑改為CDN edge路徑。因為無論LIFF SDK的生命週期預計為何時,使用向下相容的CDN路徑都可能遭到中止。

待方針確立後我們會盡速通知。

在LIFF技術文件中查看更多關於LIFF版本政策的資訊。

2020/04/30

LIFF v2 已提供 liff.getLineVersion() 與 liff.id 的用法

目前已將方法 - liff.getLineVersion() 與屬性 - liff.id 新增至 LIFF v2 當中。

liff.getLineVersion() 將允許取得使用者的 LINE 版本。

如果使用者是藉由LINE內建瀏覽器開啟LIFF app,該使用者的LINE版本即會以字串回傳。如果使用者是以外部瀏覽器開啟LIFF app,則會回傳null

liff.id 的屬性為 liff.init() 初始化後所持有的 LIFF app ID (字串型態)。

欲了解更多請參考LIFF v2 API reference中的liff.getLineVersion()liff.id

2020/04/21

提醒:關於 liff.shareTargetPicker() 回傳值的修改通知

由於我們將會更改 LIFF v2 的 liff.shareTargetPicker() 回傳值。 若您目前的實作正使用到此功能,請參考相關規格並修改。

注意

目前尚未確定關於變更後的 liff.shareTargetPicker() 回傳值規格。

# 概要

在規格改變前,LIFF app 僅可確認 target picker 是否已顯示,但無法確認訊息是否已被傳送。

在規格改變後,LIFF app 不僅可以確認訊息是否已被傳送,並且能配合使用情境,進行相關功能的實作。

# 尚未變更規格之前

# 範例

if (liff.isApiAvailable('shareTargetPicker')) {
  liff.shareTargetPicker([
    {
      type: "text",
      text: "Hello, World!"
    }
  ])
    .then(
      console.log("ShareTargetPicker was launched")
    ).catch(function(res) {
      console.log("Failed to launch ShareTargetPicker")
    })
}

# 語法

liff.shareTargetPicker(messages)

# 回傳值

回傳Promise物件。

當 target picker 顯示後,Promise 會被 resolve。

如果 target picker 在顯示前發生錯誤,除了 Promise 會被 reject 外,並且會發送 LiffError。更多關於 LiffError 物件的資訊,請參考 LIFF SDK errors 文件

注意
  • 若使用者在顯示 target picker 時未選擇傳送目的地,將無法確認 target picker 顯示後的情況。
  • Promise 被 resolve 與 reject 的 callback 函數中,LIFF app 在某些裝置中無法使用 alert()

# 規格變更之後

# 範例

if (liff.isApiAvailable('shareTargetPicker')) {
  liff.shareTargetPicker([
    {
      type: "text",
      text: "Hello, World!"
    }
  ])
  .then(function(res) {
    if (res) {
      // succeeded to send message in TargetPicker
      console.log(`[${res.status}] Message [${this.msgType}] is sent!`)
    } else {
      // canceled to send message
      console.log('TargetPicker was closed!')
    }
  }).catch(function(error) {
    // something wrong happened before sending message properly
    console.log('something wrong happen')
  })
}

# 語法

liff.shareTargetPicker(messages)

# 回傳值

回傳Promise物件。

如果訊息被正確傳送,Promise 會被 resolve 並發送含有成功狀態的訊息。

如果使用者在訊息被傳送前取消或關閉 target picker,Promise 會被 resolve,但不會發送含有成功狀態的訊息。

如果 target picker 在顯示前發生錯誤,除了 Promise 會被 reject 外,並且會發送 LiffError。更多關於 LiffError 物件的資訊,請參考 LIFF SDK errors 文件

之後我們預計會隨著規格的變更,並修改 Error 的定義。

注意

Promise 被 resolve 與 reject 的 callback 函數中,LIFF app 在某些裝置中無法使用 alert()

# 預計規格變更的時間

未定。

2020/04/03

LIFF v2已追加liff.isApiAvailable()

LIFF v2已追加liff.isApiAvailable()。 可確認指定的API是否能在LIFF應用程式啟動的環境下使用。

注意

可指定的API有限。 目前的適用對象為liff.shareTargetPicker()。 今後在可於liff.isApiAvailable()指定的API增加時,將再次通知。

# 確認可否使用Target Picker

透過事先執行liff.isApiAvailable(),在不可使用Target Picker的環境下執行liff.shareTargetPicker()之際,可避免用戶畫面顯示錯誤訊息。

if (liff.isApiAvailable('shareTargetPicker')) {
  liff.shareTargetPicker([
    {
      type: "text",
      text: "Hello, World!"
    }
  ])
    .then(
      alert("ShareTargetPicker was launched")
    ).catch(function(res) {
      alert("Failed to launch ShareTargetPicker")
    })
}

詳情請參閱《LIFF v2 API Reference》的「liff.isApiAvailable()」。

2020/02/07

LIFF v1 API 及停用日期變更

日前新聞宣佈 LIFF v1 Server API 將於 2020 年 3 月 31 日停用,因考量用戶意見,將繼續提供相關 API。

LIFF v1 停用日期確認後,將即時發佈相關通知。同時,請 v1 用戶儘快改用 v2。

功能 原訂停用日期 新的停用日期
LIFF v1 Client API 未來將停用 未來將停用 (此計畫維持不變)
LIFF v1 Server API 2020 年 3 月 31 日停用 繼續提供服務
未來仍將停用 LIFF v1

如同 2019 年 10 月 16 日新聞所述,LIFF v1 將被停用,請改用最新版本。

2020/02/05

使用者無法在 Messaging API channel 新增 LIFF app

如同 2019 年 11 月 11 日新聞所述,由於 LIFF v2 功能改善,使用者無法繼續在 Messaging API channel 新增 LIFF app。

欲了解已在 Messaging API channel 新增的 LIFF app 將受到哪些限制,以及如何改將 LIFF app 綁定至 LINE Login channel,請查看 2019 年 11 月 11 日發佈的新聞內容。


2020/01/21

LIFF v1 Server API 將於 2020 年 3 月 31 日停用

LINE Front-end Framework (LIFF) v1 Server API 將於 2020 年 3 月 31 日起停止使用,下列 API 功能將被移除:

請使用最新版 LIFF

即日起請改用 LIFF v2。如同 2019 年 10 月 16 日新聞所述,LIFF v1 即將停用。

# 請使用 LIFF v2

上方所列的 Server API 功能可透過 LINE Developers Console 繼續使用,欲了解如何在 channel 新增 LIFF app,請查看:

如欲透過 LINE Developers Console 使用上列其他 3 項 Server API 功能,請點選該連結、查看技術文件。

LINE 團隊將持續改善服務品質,感謝您的配合。

2020/01/14

如使用已中止的 LIFF SDK API,請調整程式碼

如同 2019 年 11 月 29 日新聞所述,基於特定技術考量,下列使用於 iOS 的 LINE (v9.19.0 或之後版本) API 功能已被暫停使用:

  • liff.scanCode()
  • liff.bluetooth.*

自今日起,end user 於 iOS 使用的 LINE (v9.19.0 或之後版本) LIFF app 部分 API 功能如下:

API 功能
liff.scanCode() API 為 undefined
liff.bluetooth.* 如呼叫 liff.initPlugins(['bluetooth']) 時,Bluetooth plug-in 無法初始化,將顯示 FORBIDDEN 錯誤訊息。

如開發者使用 liff.scanCode(),強烈建議參考上述說明,確認功能可正常運作。

調整前:

liff.scanCode().then(result => {
  // result = { value: '' }
});

調整後:

if (liff.scanCode) {
	liff.scanCode().then(result => {
	  // result = { value: '' }
	});
}

如欲取得更多相關訊息,請至 LIFF v2 API reference

LINE 團隊正積極改善服務品質,造成不便敬請包涵!

2019/11/29

部分 LIFF 功能暫停使用

基於特定技術考量,下列 LIFF 功能已被暫停使用;恢復使用後,將即時發佈相關通知:

  • liff.scanCode()
  • liff.bluetooth.*

# 受影響之作業環境

環境 版本
LINE for iOS 上述功能暫時無法於 iOS 9.19.0 或之後版本中取得。
LINE for Android 目前不受影響,但近期內將發佈相關新聞。

LINE 團隊正積極排除此問題,造成不便敬請包涵!

2019/11/11

停止在 Messaging API channel 新增 LIFF app

LIFF v2 即將改以 LINE Login channel 為核心。此外,將全面停止開發者在 Messaging API channel 新增 LIFF app。強烈建議開發者改在 LINE Login channel 新增 LIFF app。

# 變更生效日期

2020 年 2 月

# 影響

Channel 類型 影響
LINE Login channel 未受影響。
Messaging API channel 變更後,將無法再在 Messaging API channel 新增 LIFF app。原本綁定 Messaging API channels 的 LIFF app 於變更後仍可使用。
請勿再在 Messaging API channel 新增 LIFF app

目前,開發者仍可在 Messaging API channel 新增 LIFF app,然而,基於以下限制,強烈建議開發者停止繼續在 Messaging API channel 新增 LIFF app:

  • Bot link 無法使用。
  • LIFF 延伸功能可能不受支援。
  • LIFF app 未來可能無法繼續使用。

在 LINE Login channel 新增的 LIFF app 並無以上限制,且可使用 LIFF v2 所有功能。

# 將 LIFF app 綁定至 LINE Login channel

為繼續使用原本綁定 Messaging API channel 的 LIFF app,請在 LINE Login channel 新增該 LIFF app。新增後,LINE Developers Console 將發佈新的 LIFF app ID。因此,請注意:

  • 使用 LIFF v2 的開發者,請改用 liff.init()所指定的 LIFF app ID。
  • LIFF 上線所使用的 LIFF URL(例如:line://app/1234567890-AbcdEfgh)將被變更。
請移除綁定 Messaging API channel 的 LIFF app

為避免混淆,在 LINE Login channel 新增 LIFF app 後,請刪除原本綁定 Messaging API channel 的 LIFF app。

2019/10/16

LIFF v2 正式上線

LINE Front-end Framework (LIFF) v2 為 LINE 運作 app 的平台。

請使用最新版 LIFF

LIFF v1 未來將被終止使用。

# 現在起,LIFF app 可於外部瀏覽器中執行

使用 LIFF v1,LIFF app 只能在 LINE app 瀏覽器中執行。使用 LIFF v2,LIFF app 則可於外部瀏覽器中執行。開發者可使用與一般 web 應用相同的開發環境進行 LIFF app 開發。

# 取得用戶資料與 email

由於與 LINE Login v2.1 的相容性已獲得改善,現在,開發者可從 LINE 平台取得用戶 ID 和 email address。LIFF app 可使用此數據,提供與用戶資料和發送電子郵件相關的功能。

此外,LIFF app 在外部瀏覽器中執行時,開發者仍可使用 LINE Login (網頁登入流程),這也代表即使 LIFF app 正在外部瀏覽器中執行,開發者也可使用相同的訊息。

# 讀取 QR code

開發者可使用 LINE QR code reader 取得用戶所讀取的字串。

# 取得 LIFF app 設定詳細資料

開發者可取得下列有關 LIFF app 設定的詳細資料:

  • 執行 LIFF app 的作業系統 (iOS / Android / 外部瀏覽器)
  • LIFF app 是否正在 app 內的瀏覽器中執行 (是 / 否)
  • 語言設定

如欲取得更多資料,請至 LINE Front-end Framework