# LIFF v1 APIリファレンス

# クライアントAPI

# 動作環境

LIFF v1をサポートするOSとLINEのバージョンは以下のとおりです。

OpenChatでのLIFFアプリの利用はサポートされていません

現在のところ、OpenChatではLIFFアプリの利用は正式にサポートされていません。たとえば、LIFFアプリからプロフィール情報を取得できない場合があります。

# LIFF SDKのエラー

LIFF SDKのエラーはLiffErrorオブジェクトで返されます。

エラーの例

# LiffErrorオブジェクト

code

String

エラーコード

message

String

エラーメッセージ。定義されたメッセージが存在する場合に返されます。

# エラー内容

エラーコード エラーメッセージ 説明
INIT_FAILED Failed to init LIFF SDK LIFF SDKのJavaScriptリソースをロードできませんでした。
INIT_FAILED Current environment is not supported. Please open it with LINE サポートされていない環境でLIFFアプリを開こうとしました。
INIT_FAILED Could not authenticate LIFF app JSON Webトークン(JWT)が無効または存在しません。LINEでLIFFを起動してください。また、JWTは必ず指定してください。
INVALID_ARGUMENT - 引数が無効です。
INTERNAL_ERROR - 内部エラーです。
THINGS_NO_LINKED_DEVICES There are no linked devices. デバイスがありません。
BLUETOOTH_CONNECT_FAILED Failed to connect to device. デバイスとの接続に失敗しました。
BLUETOOTH_ALREADY_CONNECTED The device is already connected. デバイスは接続済みです。
BLUETOOTH_CONNECTION_LOST The device has been disconnected. デバイスが接続されていません。
BLUETOOTH_UNSUPPORTED_OPERATION The operation is not supported on this characteristic. 指定したcharacteristicでは、指定した操作がサポートされていません。
BLUETOOTH_SERVICE_NOT_FOUND The service is not found in the GATT server. 指定したサービスが、GATTサーバーに存在しません。
BLUETOOTH_CHARACTERISTIC_NOT_FOUND The characteristic is not found in the service. 指定したcharacteristicが、サービスに存在しません。

# liff.init()

LIFFアプリを初期化します。このメソッドを実行すると、LIFF SDKの他のメソッドを実行できるようになります。

リクエストの例

# 構文

liff.init(successCallback, errorCallback)

# 引数

successCallback

Function

必須

呼び出しの成功時にデータオブジェクトを返すコールバック

errorCallback

Function

必須

呼び出しの失敗時にエラーオブジェクトを返すコールバック

# 戻り値

コールバックの第一引数に、各種APIを呼び出すために必要な情報を含むデータオブジェクトが渡されます。

戻り値の例

# データオブジェクト

language

String

LINEの言語設定

context.type

String

コンテキストのタイプ。LINE内でLIFFアプリが開かれた場所を示します。以下のいずれかの値が含まれます。

  • utou:1対1のトーク
  • room:トークルーム
  • group:グループ
  • none:トーク画面以外

context.viewType

String

LIFFアプリの画面サイズ。以下のいずれかの値が含まれます。

  • compact
  • tall
  • full

詳しくは、「LIFFアプリをチャネルに追加する」を参照してください。

context.userId

String

ユーザーID。

context.utouId

String

1対1トークID。context.typeプロパティがutouの場合に含まれます。

context.roomId

String

トークルームID。context.typeプロパティがroomの場合に含まれます。

context.groupId

String

グループID。context.typeプロパティがgroupの場合に含まれます。

# liff.openWindow()

指定したURLをLINE内ブラウザまたは外部ブラウザで開きます。

注意
  • liff.openWindow()の外部ブラウザでの利用は、保証対象外です。
  • iOS版LINEが10.16.0より前のバージョンの場合、urlプロパティに、クエリパラメータ(?key=value)が含まれず、かつURLフラグメント(#URL-fragment)が設定されていると、URLフラグメントに不正な値が追加されたURLにリンクされます。以下の表は、urlプロパティにhttps://example.com#URL-fragmentを設定した場合のリンク先の例です。
iOS版LINEバージョン リンク先
10.16.0より前のバージョン https://example.com#URL-fragment?is_liff_external_open_window=false
10.16.0以降のバージョン https://example.com#URL-fragment

リクエストの例

# 構文

liff.openWindow(params)

# 引数

params

Object

必須

パラメータオブジェクト

params.url

String

必須

URL。絶対パスで指定します。

params.external

Boolean

任意

指定したURLを外部ブラウザで開くかどうかを、以下のどちらかの値で指定します。デフォルト値はfalseです。

  • true:外部ブラウザで開きます。
  • false:LINE内ブラウザで開きます。

# 戻り値

なし

# liff.getAccessToken()

LIFF SDKが取得した「現在のユーザーのアクセストークン」を取得します。

LIFFアプリからサーバーにユーザー情報を送信するときに、このAPIで取得したアクセストークンを利用できます。 サーバーでユーザー情報を使用する方法について詳しくは、『LIFFドキュメント』の「LIFFアプリおよびサーバーでユーザー情報を使用する」を参照してください。

アクセストークンの有効性

アクセストークンは、発行後12時間有効です。 なお、ユーザーがLIFFアプリを閉じると、アクセストークンは無効化されます。

LIFF SDKがアクセストークンを取得するタイミング
  • LIFFブラウザでLIFFアプリを起動した場合は、liff.init()を呼び出したときに、LIFF SDKがアクセストークンを取得します。
  • 外部ブラウザでLIFFアプリを起動した場合は、以下の手順を行ったのちに、LIFF SDKがアクセストークンを取得します。
    1. LIFFアプリで、liff.login()を呼び出す。
    2. ユーザーがLINEログインする。
    3. LIFFアプリで、再度liff.init()を呼び出す。

リクエストの例

# 構文

liff.getAccessToken()

# 引数

なし

# 戻り値

現在のユーザーのアクセストークンを文字列で返します。

# liff.getProfile()

現在のユーザーのプロフィールを取得します。

リクエストの例

# 構文

liff.getProfile()

# 引数

なし

# 戻り値

Promiseオブジェクトが返されます。

Promiseがresolveされると、ユーザーのプロフィール情報を含むオブジェクトが渡されます。

userId

String

ユーザーID

displayName

String

表示名

pictureUrl

String

画像のURL。ユーザーが設定していない場合は返されません。

statusMessage

String

ステータスメッセージ。ユーザーが設定していない場合は返されません。

このメソッドは内部でaxios (opens new window)を使用して、LINEログインAPIを呼び出します。エラー制御についてはaxiosのドキュメントと『LINEログイン v2.1 APIリファレンス』の「ステータスコード」を参照してください。

ユーザーのプロフィール情報の例

# liff.sendMessages()

ユーザーの代わりに、LIFFアプリが開かれているトーク画面にメッセージを送信します。トーク画面以外でLIFFアプリが開かれた場合は、メッセージは送信できません。

ウェブブラウザからLIFFアプリを開いたときの制限

LINE URLスキームhttps://line.me/R/app/{liffId}を使ってウェブブラウザからLIFFアプリを開いた場合は、liff.sendMessages()メソッドを実行してもメッセージを送信できません。

リクエストの例

# 構文

liff.sendMessages(messages)

# 引数

messages

Objectの配列

必須

メッセージオブジェクト
最大件数:5
Messaging APIの以下のタイプのメッセージを送信できます。

ボットのLINE公式アカウントが参加しているトークでメッセージが送信されると、LINEプラットフォームからボットサーバーにWebhookイベントが送信されます。liff.sendMessages()メソッドで画像、動画、および音声のメッセージが送信されると、結果として送信されるWebhookイベントのcontentProvider.typeプロパティの値はexternalになります。詳しくは、『Messaging APIリファレンス』の「メッセージイベント」を参照してください。

# 戻り値

メッセージの送信が成功した場合は、戻り値はありません。

このメソッドは内部でaxios (opens new window)を使用して、LINEプラットフォームを呼び出します。エラー制御についてはaxiosのドキュメントと以下の「ステータスコード」を参照してください。

# ステータスコード
ステータスコード 説明
400 メッセージが無効です。
401 認証に失敗しました。
403 アクセストークンに適切な権限がありません。

# liff.closeWindow()

LIFFアプリを閉じます。

リクエストの例

# 構文

liff.closeWindow()

# 引数

なし

# 戻り値

なし

# liff.initPlugins()

プラグインを有効化します。

たとえば、Bluetoothプラグインを有効化すると、Bluetoothプラグインが提供するクライアントAPI(liff.bluetooth.*)が使用できます。

リクエストの例

# 構文

liff.initPlugins(pluginNames)

# 引数

pluginNames

Stringの配列

必須

プラグインの名前。以下のいずれかの値を指定します。

  • bluetooth
    ※なお、Bluetoothプラグインは、Android版のLINEまたはiOS版のLINE 9.19.0未満の場合のみ、有効化できます。iOS版のLINE 9.19.0以降では 有効化に失敗し、FORBIDDENエラーが返されます。

# 戻り値

Promiseオブジェクトが返されます。

  • プラグインの有効化が成功すると、Promiseがresolveされます。
  • プラグインの有効化に失敗すると、Promiseがrejectされ、エラー情報が渡されます。

# liff.bluetooth.getAvailability()

iOS版LINEバージョン9.19.0以降では使用できません

技術的な問題があり、iOS版LINEバージョン9.19.0以降では、liff.bluetooth.getAvailability()の提供を一時停止しています。

Bluetoothプラグインが利用できるかどうかを確認します。このメソッドを実行すると、以下の内容が確認されます。

  • チャネルに追加したLIFFアプリのBluetoothサポートの有無

    注意

    チャネルに追加したLIFFアプリのBLE機能を有効にしていないと、Bluetoothプラグインは有効化できません。

  • スマートフォンのBluetooth設定

  • ユーザーがLINE Thingsの利用規約に同意していること

  • ユーザーがLINEをAndroidで使用している場合は、位置情報の取得権限

注意

あらかじめliff.initPlugins()を使用して、Bluetoothプラグインを有効化してください。

リクエストの例

# 構文

liff.bluetooth.getAvailability()

# 引数

なし

# 戻り値

Promiseオブジェクトが返されます。

Bluetoothプラグインが利用できるかどうかが確認されると、Promiseがresolveされ、Bluetoothプラグインが利用できるかどうかを示すBooleanオブジェクトが渡されます。

# liff.bluetooth.requestDevice()

iOS版LINEバージョン9.19.0以降では使用できません

技術的な問題があり、iOS版LINEバージョン9.19.0以降では、liff.bluetooth.requestDevice()の提供を一時停止しています。

連携済みのデバイスをスキャンし、情報を取得します。

フィルターを使って、アドバタイズメントパケットを受け入れるデバイスを制限できます。

注意

あらかじめliff.initPlugins()を使用して、Bluetoothプラグインを有効化してください。

リクエストの例

# 構文

liff.bluetooth.requestDevice(options)

# 引数

options

Object

任意

フィルターを表すRequestDeviceOptionsオブジェクト。省略したときは、すべてのデバイスからのアドバタイズメントパケットを受け入れます。

# データオブジェクト
# RequestDeviceOptionsオブジェクト

filters

Objectの配列

必須
# LINEBluetoothRequestDeviceFilterオブジェクト

deviceId

String

必須

アドバタイズメントパケットを受け入れるデバイスのデバイスID

# 戻り値

Promiseオブジェクトが返されます。

連携済みのデバイスをスキャンし、情報を取得できると、Promiseがresolveされ、デバイスの情報を示すBluetoothDeviceオブジェクトが渡されます。

# データオブジェクト
# BluetoothDeviceオブジェクト

id

String

必須

デバイスID

name

String

任意

デバイス名

gatt

Object

任意

watchingAdvertisements

Boolean

必須

アドバタイズメントパケットの監視状況(※)

メソッド 戻り値 説明
watchAdvertisements Promise <void> アドバタイズメントパケットの受け入れを開始します。(※)
unwatchAdvertisements void アドバタイズメントパケットの受け入れを停止します。(※)
addEventListener void イベントリスナーを登録します。advertisementreceivedイベント(※)とgattserverdisconnectedイベントに、イベントリスナーを登録できます。
removeEventListener void 登録済みのイベントリスナーを削除します。advertisementreceivedイベント(※)とgattserverdisconnectedイベントに登録したイベントリスナーを削除できます。

※試験的に実装している機能です。これらの機能は予告なく変更、または停止される可能性があります。

# BluetoothRemoteGATTServerオブジェクト

デバイスと通信するには、GATTサーバー(汎用アトリビュートプロファイルサーバー)を表すBluetoothRemoteGATTServerオブジェクトを使用します。

liff.bluetooth.requestDevice()実行後、Promiseがresolveすると、BluetoothDeviceオブジェクトのgattプロパティから、BluetoothRemoteGATTServerにアクセスできます。

device

Object

必須

connected

Boolean

必須

接続している場合はtrue。接続していない場合はfalse

メソッド 戻り値 説明
connect Promise <BluetoothRemoteGATTService> デバイスと接続します。
disconnect void デバイスのGATTサーバーから切断します。
getPrimaryService(serviceUUID) Promise <BluetoothRemoteGATTService> GATTサーバーのプライマリサービスを取得します。serviceUUIDには、128ビットのUUIDを文字列で指定します。
注:このメソッドはUUIDを検証しません。UUIDの検証は、characteristicの読み込み、書き込み、通知の開始、通知の停止を実行する際に行われます。
# BluetoothRemoteGATTServiceオブジェクト

BluetoothRemoteGATTServiceオブジェクトは、characteristicを取得するためのオブジェクトです。

device

Object

必須

uuid

String

必須

GATT Service UUID

メソッド 戻り値 説明
getCharacteristic(characteristicUUID) Promise <BluetoothRemoteGATTCharacteristic> characteristicを取得します。characteristicUUIDには、128ビットのUUIDを文字列で指定します。
注:このメソッドはUUIDを検証しません。UUIDの検証は、characteristicの読み込み、書き込み、通知の開始、通知の停止を実行する際に行われます。
# BluetoothRemoteGATTCharacteristicオブジェクト

BluetoothRemoteGATTCharacteristicオブジェクトは、デバイスのcharacteristicの読み込み、書き込み、通知の開始、通知の停止を実行するためのオブジェクトです。

service

Object

任意

uuid

String

必須

UUID

value

Object

任意
メソッド 戻り値 説明
readValue Promise <DataView (opens new window)> characteristicの値を読み取ります。
writeValue(value) Promise <void> characteristicにBufferSource (opens new window)の値を書き込みます。
startNotifications Promise <BluetoothRemoteGATTCharacteristic> characteristic変更の通知を開始します。
stopNotifications Promise <BluetoothRemoteGATTCharacteristic> characteristic変更の通知を停止します。
addEventListener void イベントリスナーを登録します。targetプロパティを含むcharacteristicvaluechangedイベントに、イベントリスナーを登録できます。
removeEventListener void 登録済みのイベントリスナーを削除します。characteristicvaluechangedイベントに登録したイベントリスナーを削除できます。
注意

readValue()メソッド、writeValue()メソッド、startNotifications()メソッド、stopNotifications()メソッドは、UUIDとプロパティを検証します。存在しないUUIDやプロパティを指定した場合は、エラーが発生します。

リクエストの例

# イベント

# advertisementreceivedイベント

アドバタイズメントパケットを受信すると、advertisementreceivedイベントが発生します。

注意

advertisementreceivedイベントは、試験的に実装している機能です。この機能は予告なく変更、または停止される可能性があります。

device

Object

必須

name

String

任意

デバイス名

rssi

Number

任意

RSSI

manufacturerData

Object

任意

Map<Number, DataView>オブジェクト。会社識別コード(Company Identifier Code)をDataViewオブジェクトにマップしたデータです。

# gattserverdisconnectedイベント

さまざまな理由でBluetooth接続が切断されると、gattserverdisconnectedイベントが発生します。必ずイベントリスナーを登録してください。

リクエストの例

# characteristicvaluechangedイベント

characteristicが変更されると、characteristicvaluechangedイベントが発生します。

# liff.bluetooth.referringDevice

iOS版LINEバージョン9.19.0以降では使用できません

技術的な問題があり、iOS版LINEバージョン9.19.0以降では、liff.bluetooth.referringDeviceの提供を一時停止しています。

LIFFアプリがデバイス経由で起動された場合、liff.bluetooth.referringDeviceに、そのデバイスの情報を示すBluetoothDeviceオブジェクトが設定されます。

# サーバーAPI

# チャネルアクセストークンを準備する

LIFFのサーバーAPIを利用する場合は、チャネルアクセストークンが必要です。

# LINEログインのチャネルの場合

LINEログインのチャネルのチャネルアクセストークンを発行してください。

詳しくは、『Messaging APIリファレンス』の「チャネルアクセストークンを発行する」を参照してください。

# Messaging APIのチャネルの場合

Messaging APIのチャネルのチャネルアクセストークンを発行してください。

詳しくは、『Messaging APIドキュメント』の「チャネルアクセストークン」を参照してください。

# LIFFアプリをチャネルに追加する

LIFFアプリをチャネルに追加します。チャネルごとに、最大30件のLIFFアプリを追加できます。

リクエストの例

# HTTPリクエスト

POST https://api.line.me/liff/v1/apps

# リクエストヘッダー

Authorization

Bearer {channel access token}
詳しくは、「チャネルアクセストークンを準備する」を参照してください。

Content-Type

application/json

# リクエストボディ

view.type

String

必須

LIFFアプリの画面サイズ。以下のいずれかの値を指定します。

  • full
  • tall
  • compact

詳しくは、「LIFFアプリの画面サイズ」を参照してください。

view.url

String

必須

エンドポイントURL。LIFFアプリを実装したウェブアプリのURLです(例:https://{Heroku app name}.herokuapp.com)。LIFF URLを利用してLIFFアプリを起動した際に、このURLが利用されます。

URLスキームはhttpsである必要があります。なお、URLフラグメント(#URL-fragment)は指定できません。

view.moduleMode

Boolean

任意

LIFFアプリをモジュールモードで使用する場合は、true。モジュールモードの場合は、ヘッダーのシェアボタンが非表示になります。

description

String

任意

LIFFアプリの名前

features.ble

Boolean

任意

LINE ThingsのためにBluetooth® Low Energyに対応させる場合はtrue。対応させない場合はfalse

permanentLinkPattern

String

任意

LIFF URLの追加情報の処理方法。以下のいずれかの値を指定します。デフォルト値はconcatです。

  • concat:連結
  • replace:置換(後方互換性モード)

詳しくは、『LIFFドキュメント』の「LIFFアプリを開く」を参照してください。

# レスポンス

ステータスコード200と以下のプロパティを含むJSONオブジェクトを返します。

liffId

String

LIFFアプリID

レスポンスの例

# エラーレスポンス

以下のいずれかのステータスコードを返します。

ステータスコード 説明
400 以下のどちらかです。
  • リクエストに無効な値が含まれています。
  • チャネルに追加できるLIFFアプリ数の上限に達しています。
401 認証に失敗しました。

# LIFFアプリの設定を更新する

LIFFアプリの設定を、部分的に更新します。

リクエストの例

# HTTPリクエスト

PUT https://api.line.me/liff/v1/apps/{liffId}

# リクエストヘッダー

Authorization

Bearer {channel access token}
詳しくは、「チャネルアクセストークンを準備する」を参照してください。

Content-Type

application/json

# パスパラメータ

liffId

更新するLIFFアプリのID

# リクエストボディ

view.type

String

任意

LIFFアプリの画面サイズ。以下のいずれかの値を指定します。

  • full
  • tall
  • compact

詳しくは、「LIFFアプリの画面サイズ」を参照してください。

view.url

String

任意

エンドポイントURL。LIFFアプリを実装したウェブアプリのURLです(例:https://{Heroku app name}.herokuapp.com)。LIFF URLを利用してLIFFアプリを起動した際に、このURLが利用されます。

URLスキームはhttpsである必要があります。なお、URLフラグメント(#URL-fragment)は指定できません。

view.moduleMode

Boolean

任意

LIFFアプリをモジュールモードで使用する場合は、true。モジュールモードの場合は、ヘッダーのシェアボタンが非表示になります。

description

String

任意

LIFFアプリの名前

features.ble

Boolean

任意

LINE ThingsのためにBluetooth® Low Energyに対応させる場合はtrue。対応させない場合はfalse

permanentLinkPattern

String

任意

LIFF URLの追加情報の処理方法。以下のいずれかの値を指定します。

  • concat:連結
  • replace:置換(後方互換性モード)

詳しくは、『LIFFドキュメント』の「LIFFアプリを開く」を参照してください。

注意

リクエストボディに指定しなかったプロパティは変更されません。

# レスポンス

ステータスコード200を返します。

# エラーレスポンス

以下のいずれかのステータスコードを返します。

ステータスコード 説明
401 認証に失敗しました。
404 以下のどちらかです。
  • 指定したLIFFアプリは存在しません。
  • 指定したLIFFアプリは別のチャネルに追加されています。

# すべてのLIFFアプリを取得する

チャネルに追加されているすべてのLIFFアプリの情報を取得します。

リクエストの例

# HTTPリクエスト

GET https://api.line.me/liff/v1/apps

# リクエストヘッダー

Authorization

Bearer {channel access token}
詳しくは、「チャネルアクセストークンを準備する」を参照してください。

# レスポンス

ステータスコード200と以下のプロパティを含むJSONオブジェクトを返します。

apps

Objectの配列

LIFFアプリオブジェクトの配列

apps[].liffId

String

LIFFアプリID

apps[].view.type

String

LIFFアプリの画面サイズ。以下のいずれかの値が含まれます。

  • full
  • tall
  • compact

詳しくは、「LIFFアプリの画面サイズ」を参照してください。

apps[].view.url

String

エンドポイントURL。LIFFアプリを実装したウェブアプリのURLです(例:https://{Heroku app name}.herokuapp.com)。LIFF URLを利用してLIFFアプリを起動した際に、このURLが利用されます。

apps[].view.moduleMode

Boolean

LIFFアプリをモジュールモードで使用する場合は、true。モジュールモードの場合は、ヘッダーのシェアボタンが非表示になります。

apps[].description

String

LIFFアプリの名前

apps[].features.ble

Boolean

LINE ThingsのためにBluetooth® Low Energyに対応している場合はtrue。対応しない場合はfalse

apps[].permanentLinkPattern

String

LIFF URLの追加情報の処理方法。以下のいずれかの値が含まれます。

  • concat:連結
  • replace:置換(後方互換性モード)

詳しくは、『LIFFドキュメント』の「LIFFアプリを開く」を参照してください。

レスポンスの例

# エラーレスポンス

以下のいずれかのステータスコードを返します。

ステータスコード 説明
401 認証に失敗しました。
404 チャネルにLIFFアプリがありません。

# LIFFアプリをチャネルから削除する

LIFFアプリをチャネルから削除します。

リクエストの例

# HTTPリクエスト

DELETE https://api.line.me/liff/v1/apps/{liffId}

# リクエストヘッダー

Authorization

Bearer {channel access token}
詳しくは、「チャネルアクセストークンを準備する」を参照してください。

# パスパラメータ

liffId

削除するLIFFアプリのID

# レスポンス

ステータスコード200を返します。

# エラーレスポンス

以下のいずれかのステータスコードを返します。

ステータスコード 説明
401 認証に失敗しました。
404 以下のどちらかです。
  • 指定したLIFFアプリは存在しません。
  • 指定したLIFFアプリは別のチャネルに追加されています。