LIFF v2 APIリファレンス

クライアントAPI

動作環境

LIFF v2の動作環境については、『LIFFドキュメント』の「概要」を参照してください。

なお、LIFFアプリをLINE内ブラウザで開いた場合と、外部ブラウザで開いた場合では、使用できる機能が異なります。たとえば、liff.scanCode()は、外部ブラウザでは利用できません。詳しくは、各クライアントAPIの説明をご覧ください。

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

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

LIFF SDKのエラー

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

LiffErrorオブジェクト

プロパティ タイプ 説明
code String コード
message String メッセージ。定義されたメッセージが存在する場合に返されます。

エラー内容

コード 説明
INIT_FAILED LIFF SDKの初期化時にエラーが発生しました。
INVALID_ARGUMENT 引数が無効です。
UNAUTHORIZED
  • ユーザーが認可しませんでした。
  • アクセストークンを指定せずにAPIが呼ばれました。
FORBIDDEN 必要な権限がありません。
INVALID_CONFIG LINEログインを行うには、liffIdを指定する必要があります。
INVALID_ID_TOKEN IDトークンが正規のものであることを確認できませんでした。
INVALID_ARGUMENT 無効な引数が指定されました。
THINGS_NO_LINKED_DEVICES デバイスがありません。
BLUETOOTH_SETTING_OFF Bluetooth機能がオフになっています。
THINGS_TERMS_NOT_AGREED ユーザーがLINE Thingsの利用規約に同意していません。
BLUETOOTH_NO_LOCATION_PERMISSION ユーザーが位置情報の取得を許可していません。
BLUETOOTH_LOCATION_DISABLED 位置情報取得機能がオフになっています。
BLUETOOTH_LE_API_UNAVAILABLE LIFFのBluetoothプラグインが使用できません。
BLUETOOTH_CONNECT_FAILED デバイスとの接続に失敗しました。
BLUETOOTH_ALREADY_CONNECTED デバイスは接続済みです。
BLUETOOTH_CONNECTION_LOST デバイスが接続されていません。
BLUETOOTH_UNSUPPORTED_OPERATION 指定したcharacteristicでは、指定した操作がサポートされていません。
BLUETOOTH_SERVICE_NOT_FOUND 指定したサービスが、GATTサーバーに存在しません。
BLUETOOTH_CHARACTERISTIC_NOT_FOUND 指定したcharacteristicが、サービスに存在しません。

エラーの例

{
  "code":"INIT_FAILED",
  "message":"Failed to init LIFF SDK"
}

liff.init()

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

note 注意

LIFFアプリを起動した直後は、「LIFFアプリをチャネルに追加する」で指定したエンドポイントURLにアクセスします。URLが変更される前に、liff.init()を呼び出してください。URLが変更されてからliff.init()を呼び出すと、INIT_FAILEDが返されます。

構文

liff.init(
  config: { liffId: string },
  successCallback?: Function,
  errorCallback?: Function
)

引数

プロパティ タイプ 必須 説明
config.liffId String 必須 LIFFアプリID。LIFFアプリをチャネルに追加すると取得できます。詳しくは、「LIFFアプリをチャネルに追加する」を参照してください。
注:LINE以外からLINEログインする場合は、liffIdが必要です。
successCallback Function 任意 LIFFアプリの初期化に成功したときにデータオブジェクトを返すコールバック
注:コールバックを使用する場合は必要です。
errorCallback Function 任意 LIFFアプリの初期化に失敗したときにエラーオブジェクトを返すコールバック
注:コールバックを使用する場合は必要です。

戻り値

successCallbackおよびerrorCallbackを省略した場合は、Promiseオブジェクトが返されます。

リクエストの例

// No sample code available
// No sample code available
# No sample code available
// No sample code available
// No sample code available
# No sample code available
# No sample code available
// Promiseオブジェクトを使用する方法
liff
  .init({
    liffId: "1234567890-abcedfgh" // use own liffId
  })
  .then(() => {
    // Start to use liff's api
  })
  .catch((err: LiffError) => {
    // Error happens during initialization
    console.log(err.code, err.message);
  });

// コールバックを使用する方法
liff.init({ liffId: "1234567890-abcedfgh" }, successCallback, errorCallback);

liff.getOS()

ユーザーがLIFFアプリを動作させている環境を取得します。

構文

liff.getOS()

引数

なし

戻り値

ユーザーがLIFFアプリを動作させている環境が、文字列で返されます。

戻り値 説明
ios iOS版のLINE内ブラウザ
android Android版のLINE内ブラウザ
web 外部ブラウザ

リクエストの例

// No sample code available
// No sample code available
# No sample code available
// No sample code available
// No sample code available
# No sample code available
# No sample code available
// No sample code available

liff.getLanguage()

LIFFアプリを動作させている環境の言語設定を取得します。

構文

liff.getLanguage()

引数

なし

戻り値

LIFFアプリを動作させている環境のnavigator.languageで取得できる言語設定が、文字列で返されます。

リクエストの例

// No sample code available
// No sample code available
# No sample code available
// No sample code available
// No sample code available
# No sample code available
# No sample code available
// No sample code available

liff.getVersion()

LIFF SDKのバージョンを取得します。

構文

liff.getVersion()

引数

なし

戻り値

LIFF SDKのバージョンが、文字列で返されます。

リクエストの例

// No sample code available
// No sample code available
# No sample code available
// No sample code available
// No sample code available
# No sample code available
# No sample code available
// No sample code available

liff.isInClient()

LIFFアプリをLINE内ブラウザで動作させているかどうかを取得します。

構文

liff.isInClient()

引数

なし

戻り値

  • true:LINE内ブラウザで動作させている
  • false:外部ブラウザで動作させている

リクエストの例

// No sample code available
// No sample code available
# No sample code available
// No sample code available
// No sample code available
# No sample code available
# No sample code available
// No sample code available

liff.isLoggedIn()

ユーザーがログインしているかどうかを取得します。

構文

liff.isLoggedIn()

引数

なし

戻り値

  • true:ログインしている
  • false:ログインしていない

リクエストの例

// No sample code available
// No sample code available
# No sample code available
// No sample code available
// No sample code available
# No sample code available
# No sample code available
if (liff.isLoggedIn()) {
  // `liff.getProfile()`のような、アクセストークンが必要なAPIを使用できます。
}

liff.login()

ウェブアプリ向けのLINEログインの処理(ウェブログイン)を行います。

note 注意

liff.login()は、LINE内ブラウザでは利用できません。

Syntax

liff.login(
  loginConfig?: {
    redirectUri?: string
  }
)

引数

プロパティ タイプ 必須 説明
loginConfig.redirectUri String 任意 LINEログイン後にLIFFアプリで表示するURL。省略したときは、LIFFアプリを開いた直後のページ(フロントページ)に戻ります。

戻り値

なし

リクエストの例

// No sample code available
// No sample code available
# No sample code available
// No sample code available
// No sample code available
# No sample code available
# No sample code available
if (!liff.isLoggedIn()) {
  liff.login({ redirectUri: "https://localhost:3000" });
}

liff.logout()

ログアウトします。

構文

liff.logout()

引数

なし

戻り値

なし

リクエストの例

// No sample code available
// No sample code available
# No sample code available
// No sample code available
// No sample code available
# No sample code available
# No sample code available
if (liff.isLoggedIn()) {
  liff.logout();
}

liff.getAccessToken()

現在のユーザーのアクセストークンを取得します。

note 注意

ユーザーがLIFFアプリを閉じると、アクセストークンは無効化されます。

構文

liff.getAccessToken()

引数

なし

戻り値

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

リクエストの例

// No sample code available
// No sample code available
# No sample code available
// No sample code available
// No sample code available
# No sample code available
# No sample code available
const accessToken = liff.getAccessToken();
if (accessToken) {
  fetch("https://api...", {
    headers: {
      "Content-Type": "application/json",
      Authorization: `Bearer ${accessToken}`
    }
    //...
  });
}

liff.getProfile()

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

構文

liff.getProfile()

引数

なし

リクエストの例

// No sample code available
// No sample code available
# No sample code available
// No sample code available
// No sample code available
# No sample code available
# No sample code available
liff.getProfile()
.then(profile => {
  const name = profile.displayName
})
.catch((err) => {
  console.log('error', err);
});

戻り値

ユーザーのプロフィール情報を含む Promise オブジェクトを返します。

プロパティ タイプ 説明
userId String ユーザーID
displayName String 表示名
pictureUrl String 画像のURL。ユーザーが設定していない場合は返されません。
statusMessage String ステータスメッセージ。ユーザーが設定していない場合は返されません。

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

戻り値の例

{
  "userId":"U4af4980629...",
  "displayName":"Brown",
  "pictureUrl":"https://example.com/abcdefghijklmn",
  "statusMessage":"Hello, LINE!"
}

liff.sendMessages()

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

note 注意

liff.sendMessages()は、外部ブラウザでは利用できません。

構文

liff.sendMessages(
  messages:  Array<Message>
)

引数

プロパティ タイプ 必須 説明
messages Objectの配列 必須 メッセージオブジェクト
最大件数:5
Messaging APIの以下のタイプのメッセージを送信できます。

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

戻り値

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

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

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

リクエストの例

// No sample code available
// No sample code available
# No sample code available
// No sample code available
// No sample code available
# No sample code available
# No sample code available
liff.sendMessages([
  {
    type:'text',
    text:'Hello, World!'
  }
])
.then(() => {
  console.log('message sent');
})
.catch((err) => {
  console.log('error', err);
});

liff.openWindow()

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

構文

liff.openWindow(params)

引数

paramsオブジェクト
プロパティ タイプ 必須 説明
url String 必須 URL。絶対パスで指定します。
external Boolean 任意 指定したURLを外部ブラウザで開くかどうかを、以下のどちらかの値で指定します。デフォルト値はfalseです。
  • true:外部ブラウザで開きます。
  • false:LINE内ブラウザで開きます。

戻り値

なし

リクエストの例

// No sample code available
// No sample code available
# No sample code available
// No sample code available
// No sample code available
# No sample code available
# No sample code available
liff.openWindow({
  url: "https://line.me",
  external: true
});

liff.scanCode()

LINEのQRコードリーダーを起動し、読み取った文字列を取得します。QRコードリーダーを起動するには、あらかじめLINE Developersコンソールで、LIFFアプリにScanQR権限を付与する必要があります。

note Android版のLINEの制限

Android版のLINEでは、URLを記録したQRコードのみ読み取れます。

なお、iOS版のLINEでは制限がありません。文字列を記録したQRコードと、URLを記録したQRコードを読み取れます。

note 注意

liff.scanCode()は、外部ブラウザでは利用できません。

構文

liff.scanCode()

引数

なし

戻り値

LINEのQRコードリーダーで読み取った文字列を含むPromiseオブジェクトが返されます。

プロパティ タイプ 説明
value String QRコードリーダーで読み取った文字列

リクエストの例

// No sample code available
// No sample code available
# No sample code available
// No sample code available
// No sample code available
# No sample code available
# No sample code available
liff.scanCode().then(result => {
  // result = { value: '' }
});

liff.closeWindow()

LIFFアプリを閉じます。

構文

liff.closeWindow()

引数

なし

戻り値

なし

リクエストの例

// No sample code available
// No sample code available
# No sample code available
// No sample code available
// No sample code available
# No sample code available
# No sample code available
liff.closeWindow();

liff.initPlugins()

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

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

構文

liff.initPlugins(pluginList: Array<String>): Promise<void>

引数

プロパティ タイプ 必須 説明
pluginNames Stringの配列 必須 プラグインの名前。以下のいずれかの値を指定します。
  • bluetooth

戻り値

プラグインの有効化が成功した場合は、戻り値はありません。

プラグインの有効化に失敗したときは、エラー情報を含むPromiseオブジェクトを返します。

リクエストの例

// No sample code available
// No sample code available
# No sample code available
// No sample code available
// No sample code available
# No sample code available
# No sample code available
liff.initPlugins(['bluetooth']).then(() => {
    liffCheckAvailablityAndDo(() => liffRequestDevice());
}).catch(error => {
    console.log(error);
});

liff.bluetooth.getAvailability()

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

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

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

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

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

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

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

構文

liff.bluetooth.getAvailability(): Promise<Boolean>

引数

なし

戻り値

Promiseオブジェクトが返されます。Promiseオブジェクトには、Bluetoothプラグインが利用できるかどうかを示すBooleanオブジェクトが含まれています。

リクエストの例

// No sample code available
// No sample code available
# No sample code available
// No sample code available
// No sample code available
# No sample code available
# No sample code available
liff.bluetooth.getAvailability().then(available => {
    alert('available?' + available);
});

liff.bluetooth.requestDevice()

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

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

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

構文

liff.bluetooth.requestDevice(options?: RequestDeviceOptions): Promise<BluetoothDevice>;

引数

プロパティ タイプ 必須 説明
options Object 任意 フィルターを表すRequestDeviceOptionsオブジェクト。省略したときは、すべてのデバイスからのアドバタイズメントパケットを受け入れます。
データオブジェクト
RequestDeviceOptionsオブジェクト
プロパティ タイプ 必須 説明
filters Objectの配列 必須 LINEBluetoothRequestDeviceFilterオブジェクトの配列
LINEBluetoothRequestDeviceFilterオブジェクト
プロパティ タイプ 必須 説明
deviceId String 必須 アドバタイズメントパケットを受け入れるデバイスのデバイスID

戻り値

Promiseオブジェクトが返されます。Promiseオブジェクトには、デバイスの情報を示すBluetoothDeviceオブジェクトが含まれています。

データオブジェクト
BluetoothDeviceオブジェクト
プロパティ タイプ 必須 説明
id String 必須 デバイスID
name String 任意 デバイス名
gatt Object 任意 BluetoothRemoteGATTServerオブジェクト
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 必須 BluetoothDeviceオブジェクト
connected Boolean 必須 接続している場合はtrue。接続していない場合はfalse
メソッド 戻り値 説明
connect Promise <BluetoothRemoteGATTService> デバイスと接続します。
disconnect void デバイスのGATTサーバーから切断します。
getPrimaryService( serviceUUID: string ) Promise <BluetoothRemoteGATTService> GATTサーバーのプライマリサービスを取得します。serviceUUIDには、128ビットのUUIDを指定します。
注:このメソッドはUUIDを検証しません。UUIDの検証は、characteristicの読み込み、書き込み、通知の開始、通知の停止を実行する際に行われます。
BluetoothRemoteGATTServiceオブジェクト

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

プロパティ タイプ 必須 説明
device Object 必須 BluetoothDeviceオブジェクト
uuid String 必須 GATT Service UUID
メソッド 戻り値 説明
getCharacteristic( characteristicUUID: string ) Promise <BluetoothRemoteGATTCharacteristic> characteristicを取得します。characteristicUUIDには、128ビットのUUIDを指定します。
注:このメソッドはUUIDを検証しません。UUIDの検証は、characteristicの読み込み、書き込み、通知の開始、通知の停止を実行する際に行われます。

リクエストの例

// No sample code available
// No sample code available
# No sample code available
// No sample code available
// No sample code available
# No sample code available
# No sample code available
// アドバタイズメントパケットを受信するデバイスをフィルターしない場合
liff.bluetooth.requestDevice().then(device => {
    const listener = (e) => {
      device.removeEventListener('advertisementreceived', listener);
    };
    device.addEventListener('advertisementreceived', listener);

    device.watchAdvertisements();
}).catch(e => {
    console.log(e.code + ':' + e.message);
});

// アドバタイズメントパケットを受信するデバイスをフィルターする場合
liff.bluetooth.requestDevice({
        filters: [
            {
                deviceId: 't99137fe055dd4980b40f6ac526da7b0b' // ID of desired bluetooth device (BluetoothDevice.id)
            }
        ]
    }).then(device => {
    const listener = (e) => {
      device.removeEventListener('advertisementreceived', listener);
    };
    device.addEventListener('advertisementreceived', listener);

    device.watchAdvertisements();
}).catch(e => {
    console.log(e.code + ':' + e.message);
});
BluetoothRemoteGATTCharacteristicオブジェクト

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

プロパティ タイプ 必須 説明
service Object 任意 BluetoothRemoteGATTServiceオブジェクト
uuid String 必須 UUID
value Object 任意 DataViewオブジェクト
メソッド 戻り値 説明
readValue Promise <DataView> characteristicの値を読み取ります。
writeValue( value: BufferSource ) Promise <void> characteristicに値を書き込みます。
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 必須 BluetoothDeviceオブジェクト
name String 任意 デバイス名
rssi Number 任意 RSSI
manufacturerData Object 任意 Map<Number, DataView>オブジェクト。会社識別コード(Company Identifier Code)をDataViewオブジェクトにマップしたデータです。

リクエストの例

// No sample code available
// No sample code available
# No sample code available
// No sample code available
// No sample code available
# No sample code available
# No sample code available
// LIFFアプリからcharacteristicの値を読み込み、書き込みする例
device.gatt
    .connect()
    .then(async () => {
        const service = await device.gatt.getPrimaryService(
            '01234567-0123-0123-0123-012345678901'
        );
        const characteristic = await service.getCharacteristic(
            '01234567-0123-0123-0123-012345678902'
        );
        const value = await characteristic.readValue();

        // suppose we know it is a string, we can decode it
        // here we use TextDecoder for simplicity, you should add a polyfill for compatibility
        const stringValue = new TextDecoder().decode(value);

        // to write string 'liff' into the characteristic
        // here we use TextEncoder for simplicity, you should add a polyfill for compatibility
        await characteristic.writeValue(new TextEncoder().encode('liff'));
    })
    .catch(e => {
        console.log(e.code + ':' + e.message);
    });

// デバイスからcharacteristicの値の変更を通知させる例
device.gatt.connect().then(async () => {
    const service = await device.gatt.getPrimaryService('01234567-0123-0123-0123-012345678901');
    const characteristic = await service.getCharacteristic('01234567-0123-0123-0123-012345678903');
    characteristic.addEventListener('characteristicvaluechanged', (e) => {
        // suppose we know it is a 16-bit integer value
        console.log('value changed to:' + e.target.value.getInt16();
    });

    await characteristic.startNotifications();
}).catch(e => {
    console.log(e.code + ':' + e.message);
});
gattserverdisconnectedイベント

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

characteristicvaluechangedイベント

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

liff.bluetooth.referringDevice

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

リクエストの例

// No sample code available
// No sample code available
# No sample code available
// No sample code available
// No sample code available
# No sample code available
# No sample code available
// gattserverdisconnectedイベントのイベントリスナーを登録する例
liff.bluetooth
    .requestDevice()
    .then(device => {
        device.addEventListener('gattserverdisconnected', () => {
            console.log('device gatt is disconnected');
        });

        window.gatt.connect();
    })
    .catch(e => {
        console.log(e.code + ':' + e.message);
    });

{{ $t("form.question.helpful") }}

{{ $t("form.question.detail") }}

{{ $t("form.question.improve") }}

{{ $t("form.info.start") }}{{ $t("form.info.link") }}{{ $t("form.info.end") }}


{{ $t("form.result.success") }}
{{ $t("form.result.error") }}
{{ $t("form.result.errorLink") }}