# LIFF v2 APIリファレンス
# 共通仕様
# 動作環境
LIFF v2の動作環境については、『LIFFドキュメント』の「概要」を参照してください。
なお、LIFFアプリをLIFFブラウザで開いた場合と、外部ブラウザで開いた場合では、使用できる機能が異なります。たとえば、liff.scanCode()
は、外部ブラウザでは利用できません。詳しくは、各クライアントAPIの説明をご覧ください。
現在のところ、OpenChatではLIFFアプリの利用は正式にサポートされていません。たとえば、LIFFアプリからプロフィール情報を取得できない場合があります。
# LIFF SDKのエラー
LIFF SDKのエラーはLiffErrorオブジェクトで返されます。
エラーメッセージは予告なく変更されることがあるため、エラーをエラーメッセージの完全一致で識別すると、LIFFアプリが正常に動作しなくなる可能性があります。エラーを識別する際は、エラーメッセージが変更されてもLIFFアプリが正常に動作するよう、エラーコードとエラーメッセージの両方を参照してください。
なお、エラーコードによってエラーを一意に識別できるよう、将来的に改善する予定です。
# LiffErrorオブジェクト
code
String
エラーコード
message
String
エラーメッセージ
cause
Unknown
エラーの原因
# エラー内容
エラーコード | 説明 |
---|---|
400 | リクエストに問題があります。リクエストパラメータとJSONの形式を確認してください。 |
401 | Authorizationヘッダーを正しく送信していることを確認してください。 |
403 | APIを使用する権限がありません。ご契約中のプランやアカウントに付与されている権限を確認してください。 |
429 | リクエスト頻度をレート制限内に抑えてください。 |
500 | APIサーバーの一時的なエラーです。 |
INIT_FAILED | LIFF SDKの初期化時にエラーが発生しました。 |
INVALID_ARGUMENT | 無効な引数が指定されました。 |
UNAUTHORIZED |
|
FORBIDDEN |
|
INVALID_CONFIG | 無効な設定です。
|
INVALID_ID_TOKEN | IDトークンが正規のものであることを確認できませんでした。 |
EXCEPTION_IN_SUBWINDOW | サブウィンドウで問題が発生しました。
|
UNKNOWN | 不明なエラーです。 |
# LIFF SDKのプロパティ
# liff.id
liff.init()
に渡したLIFFアプリID(String
型)を保持するプロパティです。
liff.init()
を実行するまでは、null
です。
# liff.ready
LIFFアプリ起動後、liff.init()
の実行が初めて終了したときにresolveするPromise
オブジェクトを保持するプロパティです。
liff.ready
を利用すると、liff.init()
の終了を待って、任意の処理を実行できます。
liff.ready
は、liff.init()
によるLIFFアプリの初期化が終了する前でも実行できます。
liff.init()
実行中に何か問題が起きても、liff.ready
はrejectしません。また、LiffError
オブジェクトを返すこともありません。
# 初期化
# liff.init()
LIFFアプリを初期化します。
このメソッドを実行すると、LIFF SDKの他のメソッドを実行できるようになります。LIFFアプリは、ページを開くたびに必ず初期化する必要があります。同じLIFFアプリ内での遷移であっても、新たにページを開く場合にはliff.init()
メソッドを実行してください。
LIFFアプリが正しく初期化されていない状態でLIFFの機能を使用した場合、それらの動作は保証対象外です。
liff.init()
メソッドを実行するとき、LIFF SDKは現在のユーザーのアクセストークンやIDトークンをLINEプラットフォームから取得します。
- LIFF SDKが取得したアクセストークンを利用するには、「liff.getAccessToken()」を呼び出します。
- LIFF SDKが取得したIDトークンのペイロードを利用するには、「liff.getDecodedIDToken()」を呼び出します。
# LIFFアプリ初期化時の注意事項
LIFFアプリを初期化する際の注意事項は以下のとおりです。注意事項を確認し、理解した上でLIFFアプリの開発を行ってください。
liff.init()
をエンドポイントURL以下の階層で実行するliff.init()
を1次リダイレクト先URLと2次リダイレクト先URLで1回ずつ実行する- URLを操作する処理は
liff.init()
が完了してから実行する - 1次リダイレクト先URLの取り扱いに注意する
# liff.init()
をエンドポイントURL以下の階層で実行する
liff.init()
メソッドはエンドポイントURLと完全に一致、もしくはエンドポイントURLよりも下の階層においてのみ動作します。これら以外のURLに遷移して実行した場合、liff.init()
メソッドの動作は保証されません。
以下の例では、エンドポイントURLがhttps://example.com/path1/
の場合に、liff.init()
メソッドを実行するURLで動作が保証されるかどうかを示しています。
liff.init() を実行するURL | 動作の保証 |
---|---|
https://example.com/ | ❌ |
https://example.com/path1/ | ✅ |
https://example.com/path1/language/ | ✅ |
https://example.com/path2/ | ❌ |
# liff.init()
を1次リダイレクト先URLと2次リダイレクト先URLで1回ずつ実行する
liff.init()
メソッドは、1次リダイレクト先URLに付与されるliff.state
やaccess_token=xxx
などの情報を元に初期化処理を行います。エンドポイントURLにクエリパラメータやパスが含まれている場合、正しくLIFFアプリを初期化するために、1次リダイレクト先URLと2次リダイレクト先URLで、1回ずつliff.init()
メソッドを実行してください。リダイレクトについて詳しくは、『LIFFドキュメント』の「LIFF URLにアクセスしてからLIFFアプリが開くまでの動作について」を参照してください。
# URLを操作する処理はliff.init()
が完了してから実行する
URLを操作する処理は、liff.init()
メソッドが返すPromise
オブジェクトがresolveしてから実行してください。
// Example using window.location.replace()
liff
.init({
liffId: "1234567890-AbcdEfgh", // Use own liffId
})
.then(() => {
// Redirect to another page after the returned Promise object has been resolved
window.location.replace(location.href + "/entry/");
});
Promise
オブジェクトがresolveする前に、次のようなURLを操作する処理を実行すると、LIFFアプリを正常に開けない場合があります。
Document.location
(opens new window)プロパティやWindow.location
(opens new window)プロパティを使ってURLを変更する- History API (opens new window)の
history.pushState()
(opens new window)メソッドやhistory.replaceState()
(opens new window)メソッドを使ってURLを変更する - サーバー側でステータスコード
301
や302
を返し、別のURLにリダイレクトする
# 1次リダイレクト先URLの取り扱いに注意する
1次リダイレクト先URLに自動的に付与されるaccess_token=xxx
はユーザーのアクセストークン(機密情報)です。Google Analyticsなど外部のロギングツールに、1次リダイレクト先URLを送らないように注意してください。
なお、LIFF v2.11.0以降のバージョンでは、liff.init()
メソッドがresolveされたタイミングでURLから機密情報が除外されます。そのため、以下のようにthen()
メソッド内でページビューを送信することで、機密情報の漏洩を防ぐことができます。ロギングツールを利用する場合は、LIFFアプリをv2.11.0以降にバージョンアップすることをお勧めします。LIFF v2.11.0の更新内容について詳しくは、『LIFFドキュメント』の「リリースノート」を参照してください。
liff
.init({
liffId: "1234567890-AbcdEfgh", // Use own liffId
})
.then(() => {
ga("send", "pageview");
});
LIFF URLへのアクセス時やLIFF間遷移時などに、URLに liff.*
のようなクエリパラメータが付与されることがあります。
例:
liff.state
(LIFF URLに指定した追加情報を示す)liff.referrer
(LIFF間遷移前のURLを示す。詳しくは、「LIFF間遷移前のURLを取得する」を参照してください。)
上記は、LIFFアプリを正常に動作させるために、SDK側から付与されるクエリパラメータです。 LIFFアプリのURLに独自の処理を行う場合は、LIFFアプリの起動やLIFF間遷移などLIFFアプリの正常な動作を保証するため、liff.init
がresolveされるまでliff.*
のクエリパラメータを変更しないように設計してください。
以下のプロパティおよびメソッドは、liff.init()
メソッドを実行する前でも利用できます。
LIFFアプリを初期化する前にLIFFアプリを動作させている環境を取得したり、LIFFアプリ初期化に失敗した際にLIFFアプリを閉じたりできます。
- liff.ready
- liff.getOS()
- liff.getAppLanguage()
- liff.getLanguage()(非推奨)
- liff.getVersion()
- liff.getLineVersion()
- liff.isInClient()
- liff.closeWindow()
- liff.use()
- liff.i18n.setLang()
liff.closeWindow()
メソッドは、LIFF SDKバージョンが2.4.0以上の場合のみ、liff.init()
によるLIFFアプリの初期化が終了する前でも実行できます。
# 構文
liff.init(config, successCallback, errorCallback);
# 引数
config
Object
LIFFアプリの設定
config.liffId
String
LIFFアプリID。LIFFアプリをチャネルに追加すると取得できます。詳しくは、「LIFFアプリをチャネルに追加する」を参照してください。
ここで指定したLIFFアプリIDは、liff.id
で取得できます。
config.withLoginOnExternalBrowser
Boolean
外部ブラウザでのLIFFアプリ初期化時にliff.login()
メソッドを自動で実行するかどうかを、以下のどちらかの値で指定します。デフォルト値はfalse
です。
true
:外部ブラウザでliff.login()
メソッドを自動で実行します。false
:外部ブラウザでliff.login()
メソッドを自動で実行しません。
successCallback
Function
LIFFアプリの初期化に成功したときにデータオブジェクトを返すコールバック
successCallbackは、戻り値のPromise
オブジェクトのresolveと同じタイミングで処理されます。ただし、処理の順番は保証されません。
errorCallback
Function
LIFFアプリの初期化に失敗したときにエラーオブジェクトを返すコールバック
errorCallbackは、戻り値のPromise
オブジェクトのrejectと同じタイミングで処理されます。ただし、処理の順番は保証されません。
# 戻り値
Promise
オブジェクトが返されます。
# エラーレスポンス
Promise
がrejectされたときは、LiffError
が渡されます。
# 動作環境の取得
# liff.getOS()
ユーザーがLIFFアプリを動作させている環境を取得します。
このメソッドは、liff.init()
によるLIFFアプリの初期化が終了する前でも実行できます。
# 構文
liff.getOS();
# 引数
なし
# 戻り値
ユーザーがLIFFアプリを動作させている環境が、文字列で返されます。戻り値はユーザーエージェント文字列中のOS名に基づくため、返却される値はブラウザの種類(LIFFブラウザ、LINE内ブラウザ、外部ブラウザ)を問いません。
たとえば、ユーザーがiOSを使用している場合、使用しているブラウザがLIFFブラウザかSafariかは問わず、ios
が返却されます。
戻り値 | 説明 |
---|---|
ios | iOSもしくはiPadOS |
android | Android |
web | 上記以外 |
LIFFアプリをサポートするOSやブラウザについては、動作環境を参照してください。
# liff.getAppLanguage()
LIFFアプリが動作しているLINEアプリの言語設定を取得します。
このメソッドは、liff.init()
によるLIFFアプリの初期化が終了する前でも実行できます。
# 使用条件
LIFF SDKのバージョンが2.24.0以上
# 動作条件
liff.getAppLanguage()
メソッドが正しく動作するには、以下の条件をすべて満たす必要があります。
- LIFFアプリがLIFFブラウザ上で動作している。
- LINEアプリのバージョンが14.11.0以上である。
なお、上記の条件を満たさない場合、liff.getAppLanguage()
メソッドはliff.getLanguage()
メソッドと同じ挙動になります。
# 構文
liff.getAppLanguage();
# 引数
なし
# 戻り値
LIFFアプリが動作しているLINEアプリの言語設定がRFC 5646 (opens new window)に準拠した文字列で返されます。
# liff.getLanguage()
liff.getLanguage()
メソッドは非推奨になりました。LIFFアプリを動作させている環境の言語設定を取得するには、liff.getAppLanguage()
メソッドを使用してください。詳しくは、2024年7月23日のニュースを参照してください。
LIFFアプリを動作させている環境の言語設定を取得します。
このメソッドは、liff.init()
によるLIFFアプリの初期化が終了する前でも実行できます。
# 構文
liff.getLanguage();
# 引数
なし
# 戻り値
LIFFアプリを動作させている環境のnavigator.language
で取得できる言語設定が、文字列で返されます。
# liff.getVersion()
LIFF SDKのバージョンを取得します。
このメソッドは、liff.init()
によるLIFFアプリの初期化が終了する前でも実行できます。
# 構文
liff.getVersion();
# 引数
なし
# 戻り値
LIFF SDKのバージョンが、文字列で返されます。
# liff.getLineVersion()
ユーザーのLINEバージョンを取得します。
このメソッドは、liff.init()
によるLIFFアプリの初期化が終了する前でも実行できます。
# 構文
liff.getLineVersion();
# 引数
なし
# 戻り値
ユーザーがLIFFブラウザでLIFFアプリを開くと、ユーザーのLINEバージョンが文字列で返されます。ユーザーが外部ブラウザでLIFFアプリを開くと、 null
が返されます。
# liff.getContext()
LIFFアプリが起動された画面(1対1のトーク、グループトーク、複数人トーク、または外部ブラウザ)に関する情報を取得します。
LIFFアプリに対するトークルームの内部識別子(1対1トークID、グループID、トークルームID)の提供は廃止されました。詳しくは、2023年2月6日のニュース、「2023年2月6日をもってLIFFアプリに対するトークルームの内部識別子の提供を廃止しました」を参照してください。
# 構文
liff.getContext();
# 引数
なし
# 戻り値
各種APIを呼び出すために必要な情報を含むデータオブジェクトが返されます。
type
String
LIFFアプリが起動された画面の種類。以下のいずれかの値が含まれます。
utou
:1対1のトーク。group
:グループトーク。room
:複数人トーク。external
:外部ブラウザ。none
:LINEの1対1のトーク、グループ、複数人トーク、外部ブラウザ以外から起動した場合。例:ウォレットタブ
LIFF間遷移後のLIFFアプリでも、このプロパティが返ります。
userId
String
ユーザーID。type
プロパティが、utou
、room
、group
、none
またはexternal
の場合に含まれます。ただし、type
プロパティがexternal
の場合は、nullが返されることがあります。
liffId
String
LIFF ID。
viewType
String
LIFFアプリの画面サイズ。type
プロパティがexternal
以外の場合に、以下のいずれかの値が含まれます。
compact
tall
full
詳しくは、「LIFFアプリをチャネルに追加する」を参照してください。
endpointUrl
String
LIFFアプリのエンドポイントURL。
accessTokenHash
String
SHA256でハッシュ化したアクセストークンの前半部分。アクセストークンの検証に使用されます。
availability
Object
LIFFアプリを起動した環境で、LIFFの機能が使用可能かどうかをavailability
オブジェクトとして返します。
scope
Array of strings
LIFF SDKの一部のメソッドを利用するために必要なスコープの中で、どのスコープを持っているかを返します。
openid
:liff.getIDToken()
およびliff.getDecodedIDToken()
を使用するためのスコープemail
:liff.getIDToken()
およびliff.getDecodedIDToken()
で、メールアドレスを取得するためのスコープprofile
:liff.getProfile()
およびliff.getFriendship()
を使用するためのスコープchat_message.write
:liff.sendMessages()
を使用するためのスコープ
スコープについて詳しくは、『LIFFドキュメント』の「LIFFアプリをチャネルに追加する」を参照してください。
liff.getContext()
メソッドでは、LIFFアプリのスコープ(※)の一覧を取得します。
一方、liff.permission.getGrantedAll()
メソッドでは、LIFFアプリのスコープのうち、ユーザーが権限の付与に同意したスコープの一覧を取得します。
※ LINEログインチャネルの[LIFF]タブにある「Scope」セクションで指定したスコープ
menuColorSetting
Object
LIFFブラウザのヘッダー部分のカラー設定をmenuColorSetting
オブジェクトとして返します。
なお、ヘッダー部分のカラー設定の変更は、現在提供していません。
miniAppId
String
LINEミニアプリのCustom Path機能で設定されている文字列が返されます。Custom Path機能について詳しくは、『LINEミニアプリドキュメント』の「Custom Pathを設定する」を参照してください。
miniDomainAllowed
Boolean
LINEミニアプリをminiapp.line.me
ドメインで利用できるかどうかを返します。
permanentLinkPattern
String
LIFF URLの追加情報の処理方法。concat
が返されます。
詳しくは、『LIFFドキュメント』の「LIFFアプリを開く」を参照してください。
utouId
String
このプロパティは廃止されました。詳しくは、2023年2月6日のニュース、「2023年2月6日をもってLIFFアプリに対するトークルームの内部識別子の提供を廃止しました」を参照してください。
groupId
String
このプロパティは廃止されました。詳しくは、2023年2月6日のニュース、「2023年2月6日をもってLIFFアプリに対するトークルームの内部識別子の提供を廃止しました」を参照してください。
roomId
String
このプロパティは廃止されました。詳しくは、2023年2月6日のニュース、「2023年2月6日をもってLIFFアプリに対するトークルームの内部識別子の提供を廃止しました」を参照してください。
# availability
オブジェクト
availability
オブジェクトには、以下のプロパティが含まれます。
shareTargetPicker
Object
LIFFアプリを起動した環境で、liff.shareTargetPicker()
が使用可能かどうかをオブジェクトで表します。
※liff.shareTargetPicker()
の使用可否は、このプロパティではなく、liff.isApiAvailable('shareTargetPicker')で確認することをお勧めします。
multipleLiffTransition
Object
LIFFアプリを起動した環境で、LIFFアプリを閉じずにliff.openWindow()
で別のLIFFアプリへ遷移することが可能かどうかをオブジェクトで表します。
※LIFF間遷移可否の情報は、このプロパティではなく、liff.isApiAvailable('multipleLiffTransition')で確認することをお勧めします。
subwindowOpen
Object
LIFFアプリを起動した環境で、サブウィンドウが使用可能かどうかをオブジェクトで表します。
scanCode
Object
LIFFアプリを起動した環境で、liff.scanCode()
が使用可能かどうかをオブジェクトで表します。
scanCodeV2
Object
LIFFアプリを起動した環境で、liff.scanCodeV2()
が使用可能かどうかをオブジェクトで表します。
getAdvertisingId
Object
LIFFアプリを起動した環境で、liff.getAid()
が使用可能かどうかをオブジェクトで表します。
なお、liff.getAid()
は現在提供していません。
addToHomeScreen
String
LIFFアプリを起動した環境で、liff.addToHomeScreen()
が使用可能かどうかをオブジェクトで表します。
なお、liff.addToHomeScreen()
は現在提供していません。
bluetoothLeFunction
Object
LIFFアプリを起動した環境で、LINE ThingsのためのBluetooth® Low Energyが使用可能かどうかをオブジェクトで表します。
なお、この機能は現在提供していません。
skipChannelVerificationScreen
Object
LIFFアプリを起動した環境で、「チャネル同意の簡略化」機能を利用できるかどうかをオブジェクトで表します。詳しくは、『LINEミニアプリドキュメント』の「同意画面のプロセスをスキップする」を参照してください。
addToHomeV2
Object
LIFFアプリを起動した環境で、liff.createShortcutOnHomeScreen()
が使用可能かどうかをオブジェクトで表します。
※liff.createShortcutOnHomeScreen()
の使用可否は、このプロパティではなく、liff.isApiAvailable('createShortcutOnHomeScreen')で確認することをお勧めします。
addToHomeHideDomain
Object
ショートカットを、ユーザー端末のホーム画面に追加する画面を表示する際に、エンドポイントURLを非表示にできるかどうかをオブジェクトで表します。
なお、この機能は現在提供していません。
addToHomeLineScheme
Object
LINE URLスキームを指定したショートカットが作成可能かどうかをオブジェクトで表します。
なお、この機能は現在提供していません。
# availability
オブジェクトの共通プロパティ
permission
Boolean
LIFFアプリを起動した環境で、availability
オブジェクトのプロパティ名で指定された機能が、使用可能かどうかを表します。
true
:機能は使用可能。false
:機能は使用不可。
minVer
String
該当する機能がサポートされているLINEの最小バージョン
maxVer
String
該当する機能がサポートされているLINEの最大バージョン
unsupportedFromVer
String
該当する機能がサポート対象外となったLINEのバージョン
minOsVer
String
該当する機能がサポートされているOSの最小バージョン
maxOsVer
String
該当する機能がサポートされているOSの最大バージョン
unsupportedFromOsVer
String
該当する機能がサポート対象外となったOSのバージョン
# menuColorSetting
オブジェクト
menuColorSetting
オブジェクトには、以下のプロパティが含まれます。
# menuColorSetting
オブジェクトの共通プロパティ
iconColor
String
ヘッダーのアイコンの色を#RRGGBB
のような16進数カラーコードで表します。
statusBarColor
String
常にwhite
を返します。
titleTextColor
String
ヘッダーのタイトルテキストの色を#RRGGBB
のような16進数カラーコードで表します。
titleSubtextColor
String
ヘッダーのサブタイトルテキストの色を#RRGGBB
のような16進数カラーコードで表します。
titleButtonColor
String
ヘッダーのボタンの色を#RRGGBB
のような16進数カラーコードで表します。
titleBackgroundColor
String
ヘッダーの背景色を#RRGGBB
のような16進数カラーコードで表します。
progressBarColor
String
ヘッダーのプログレスバーの色を#RRGGBB
のような16進数カラーコードで表します。
progressBackgroundColor
String
ヘッダーのプログレスバーの背景色を#RRGGBB
のような16進数カラーコードで表します。
# liff.isInClient()
LIFFアプリをLIFFブラウザで動作させているかどうかを取得します。
このメソッドは、liff.init()
によるLIFFアプリの初期化が終了する前でも実行できます。
# 構文
liff.isInClient();
# 引数
なし
# 戻り値
# liff.isLoggedIn()
# 構文
liff.isLoggedIn();
# 引数
なし
# 戻り値
true
:ログインしているfalse
:ログインしていない
# liff.isApiAvailable()
指定したAPIが、LIFFアプリを起動した環境で使用可能かどうかを確認します。たとえば、APIが対応しているLINEバージョンであることや、APIを呼び出すために特別な同意が必要な場合は同意していることを確認します。
# 構文
liff.isApiAvailable(apiName);
# 引数
apiName
String
LIFFのクライアントAPIの名前。以下のAPI名を指定できます。
multipleLiffTransition
は、LIFFアプリを閉じずに別のLIFFアプリを開くこと(LIFF間遷移)が可能かどうか、という状態を表すプロパティで、APIの名前ではありません。詳しくは、『LIFFドキュメント』の「LIFFアプリから別のLIFFアプリを開いた場合の動作について(LIFF間遷移)」を参照してください。
# 戻り値
指定したAPIが、現在の環境で使用可能かどうかが返されます。使用可能の場合はtrue
が返されます。使用不可能の場合はfalse
が返されます。false
が返される例は以下のとおりです。
- APIが対応していないLINEバージョンでLIFFアプリを起動した場合
- 外部ブラウザで利用できないAPIにもかかわらず、外部ブラウザでLIFFアプリを起動した場合
- 使用するために特別な同意が必要なAPIにもかかわらず、同意していない場合
- 使用するためにログインが必要なAPIにもかかわらず、ログインしていない場合
- 使用するためにアクセストークンが必要なAPIにもかかわらず、アクセストークンの有効期限が切れている場合
# 認証
# liff.login()
外部ブラウザおよびLINE内ブラウザ上で、ログイン処理を行います。
LIFFブラウザの場合、liff.init()
実行時に自動でログイン処理が実行されるため、liff.login()
は利用できません。
LIFFブラウザ内でLINEログインによる認可リクエストを行った際の動作は保証されません。また、LIFFアプリを外部ブラウザやLINE内ブラウザで開く場合には、必ず本メソッドでログイン処理を行い、LINEログインによる認可リクエストは行わないでください。
# 構文
liff.login(loginConfig);
# 引数
loginConfig
Object
ログインの設定
loginConfig.redirectUri
String
ログイン後にLIFFアプリで表示するURL。デフォルト値は[エンドポイントURL]に設定したURLです。[エンドポイントURL]の設定方法について詳しくは、『LIFFドキュメント』の「LIFFアプリをチャネルに追加する」を参照してください。
redirectUri
に指定したURLが[エンドポイントURL]に設定したURLで始まらない場合、ログイン処理に失敗し、エラー画面が表示されます。
たとえば、[エンドポイントURL]がhttps://example.com/path1/path2?query1=value1
の場合、ログイン処理の成否は以下のとおりです。なお、クエリパラメータやURLフラグメントはログイン処理の成否に影響しません。
redirectUri | ログイン処理 |
---|---|
| ✅ 成功 |
| ❌ 失敗 |
# 戻り値
なし
# liff.logout()
# 構文
liff.logout();
# 引数
なし
# 戻り値
なし
# liff.getAccessToken()
LIFF SDKが取得した「現在のユーザーのアクセストークン」を取得します。
LIFFアプリからサーバーにユーザー情報を送信するときに、このAPIで取得したアクセストークンを利用できます。サーバーでユーザー情報を使用する方法について詳しくは、『LIFFドキュメント』の「LIFFアプリおよびサーバーでユーザー情報を使用する」を参照してください。
アクセストークンの有効期間は、発行後12時間です。なお、ユーザーがLIFFアプリを閉じると、有効期限が切れていなくてもアクセストークンは無効化されます。
LIFFブラウザでLIFFアプリを起動した場合は、
liff.init()
を呼び出したときに、LIFF SDKがアクセストークンを取得します。外部ブラウザでLIFFアプリを起動した場合は、以下の手順を行ったのちに、LIFF SDKがアクセストークンを取得します。
- LIFFアプリで、
liff.login()
を呼び出す。 - ユーザーがログインする。
- LIFFアプリで、再度
liff.init()
を呼び出す。
- LIFFアプリで、
# 構文
liff.getAccessToken();
# 引数
なし
# 戻り値
現在のユーザーのアクセストークンを文字列で返します。
# liff.getIDToken()
LIFF SDKが取得した「現在のユーザーのIDトークン」を取得します。IDトークンは、ユーザー情報を含むJSONウェブトークン(JWT)です。
LIFFアプリからサーバーにユーザー情報を送信するときに、このAPIで取得したIDトークンを利用できます。サーバーでユーザー情報を使用する方法について詳しくは、『LIFFドキュメント』の「LIFFアプリおよびサーバーでユーザー情報を使用する」を参照してください。
LIFFアプリをチャネルに追加するときに、openid
スコープを選択してください。スコープを選択しなかった場合やユーザーが認可しなかった場合は、IDトークンを取得できません。スコープの選択は、LIFFアプリ追加後もLINE DevelopersコンソールのLIFFタブで変更できます。
LIFFブラウザでLIFFアプリを起動した場合は、
liff.init()
を呼び出したときに、LIFF SDKがIDトークンを取得します。外部ブラウザでLIFFアプリを起動した場合は、以下の手順を行ったのちに、LIFF SDKがIDトークンを取得します。
- LIFFアプリで、
liff.login()
を呼び出す。 - ユーザーがログインする。
- LIFFアプリで、再度
liff.init()
を呼び出す。
- LIFFアプリで、
LIFFアプリをチャネルに追加するときに、email
スコープを選択し、ユーザーが認可すると、メールアドレスも取得できます。スコープの選択は、LIFFアプリ追加後もLINE DevelopersコンソールのLIFFタブで変更できます。
# 構文
liff.getIDToken();
# 引数
なし
# 戻り値
IDトークンが返されます。
# liff.getDecodedIDToken()
LIFF SDKが取得したIDトークンの「ペイロード」を取得します。ペイロードには、ユーザーの表示名、プロフィール画像のURL、メールアドレスなどの情報が含まれます。
LIFFアプリでユーザーの表示名などを利用する場合に、このメソッドを利用してください。
なお取得できる情報はメインプロフィールのみです。ユーザーのサブプロフィールは取得できません。
このメソッドで取得したユーザー情報をサーバーに送信しないでください。サーバーでユーザー情報を使用する方法について詳しくは、『LIFFドキュメント』の「LIFFアプリおよびサーバーでユーザー情報を使用する」を参照してください。
LIFFアプリをチャネルに追加するときに、openid
スコープを選択してください。スコープを選択しなかった場合やユーザーが認可しなかった場合は、IDトークンを取得できません。スコープの選択は、LIFFアプリ追加後もLINE DevelopersコンソールのLIFFタブで変更できます。
LIFFブラウザでLIFFアプリを起動した場合は、
liff.init()
を呼び出したときに、LIFF SDKがIDトークンを取得します。外部ブラウザでLIFFアプリを起動した場合は、以下の手順を行ったのちに、LIFF SDKがIDトークンを取得します。
- LIFFアプリで、
liff.login()
を呼び出す。 - ユーザーがログインする。
- LIFFアプリで、再度
liff.init()
を呼び出す。
- LIFFアプリで、
LIFFアプリをチャネルに追加するときに、email
スコープを選択し、ユーザーが認可すると、メールアドレスも取得できます。スコープの選択は、LIFFアプリ追加後もLINE DevelopersコンソールのLIFFタブで変更できます。
# 構文
liff.getDecodedIDToken();
# 引数
なし
# 戻り値
IDトークンのペイロードが返されます。
IDトークンのペイロードについて詳しくは、「IDトークンからプロフィール情報を取得する」の「ペイロード」を参照してください。
# liff.permission.getGrantedAll()
ユーザーが権限の付与に同意したスコープの一覧を取得します。
このメソッドで取得できるスコープは次のとおりです。
liff.getContext()
メソッドでは、LIFFアプリのスコープ(※)の一覧を取得します。
一方、liff.permission.getGrantedAll()
メソッドでは、LIFFアプリのスコープのうち、ユーザーが権限の付与に同意したスコープの一覧を取得します。
※ LINEログインチャネルの[LIFF]タブにある「Scope」セクションで指定したスコープ
# 構文
liff.permission.getGrantedAll();
# 引数
なし
# 戻り値
Promise
がresolveされると、ユーザーが権限の付与に同意したスコープの配列が渡されます。
# エラーレスポンス
Promise
がrejectされたときは、LiffError
が渡されます。
# liff.permission.query()
# 構文
liff.permission.query(permission);
# 引数
permission
String
確認対象の権限。以下のいずれかのスコープを指定します。
# 戻り値
Promise
オブジェクトが返されます。
Promise
がresolveされると、以下のプロパティを持つオブジェクトが渡されます。
state
String
以下のいずれかの値が含まれます。
granted
: 権限付与にユーザーが同意済み。prompt
: 権限付与にユーザーが未同意。unavailable
: 指定したスコープをチャネルが持たないため、利用不可。
# liff.permission.requestAll()
LINEミニアプリが要求する権限の「アクセス許可要求画面」を表示します。
liff.permission.requestAll()
はLINEミニアプリでのみ動作します。
このメソッドを実行するには、あらかじめLINE Developersコンソールで、[チャネル同意の簡略化]をオンにする必要があります。チャネル同意の簡略化の設定方法について詳しくは、『LINEミニアプリドキュメント』の「「チャネル同意の簡略化」の設定方法」を参照してください。
権限付与にユーザーがすべて同意済みの場合、liff.permission.requestAll()
を実行すると、Promise
がrejectされ、LiffError
が渡されます。そのため、liff.permission.query()
を使って、ユーザーが未同意の権限があるかどうかを確認してください。未同意の権限がある場合にのみ、liff.permission.requestAll()
を実行するようにしてください。
# 構文
liff.permission.requestAll();
# 引数
なし
# 戻り値
Promise
オブジェクトが返されます。
# エラーレスポンス
[チャネル同意の簡略化]がオンになっていない場合や、権限付与にユーザーがすべて同意済みの場合は、Promise
がrejectされ、LiffError
が渡されます。
# プロフィール
# liff.getProfile()
現在のユーザーのプロフィール情報を取得します。
なお取得できる情報はメインプロフィールのみです。ユーザーのサブプロフィールは取得できません。
このメソッドで取得したユーザー情報をサーバーに送信しないでください。サーバーでユーザー情報を使用する方法について詳しくは、『LIFFドキュメント』の「LIFFアプリおよびサーバーでユーザー情報を使用する」を参照してください。
LIFFアプリをチャネルに追加するときに、profile
スコープを選択してください。スコープを選択しなかった場合やユーザーが認可しなかった場合は、プロフィール情報を取得できません。スコープの選択は、LIFFアプリ追加後もLINE DevelopersコンソールのLIFFタブで変更できます。
# 構文
liff.getProfile();
# 引数
なし
# 戻り値
# liff.getFriendship()
ユーザーとLINE公式アカウントの友だち関係を取得します。
ただし、LIFFアプリが追加されているLINEログインのチャネルに、LINE公式アカウントがリンクされている場合に、そのLINE公式アカウントとの友だち関係のみを取得できます。LINEログインのチャネルに、LINE公式アカウントをリンクする方法については、『LINEログインドキュメント』の「LINEログインしたときにLINE公式アカウントを友だち追加する(友だち追加オプション)」を参照してください。
LIFFアプリをチャネルに追加するときに、profile
スコープを選択してください。スコープを選択しなかった場合やユーザーが認可しなかった場合は、友だち関係を取得できません。スコープの選択は、LIFFアプリ追加後もLINE DevelopersコンソールのLIFFタブで変更できます。
# 構文
liff.getFriendship();
# 引数
なし
# 戻り値
# ウィンドウ
# liff.openWindow()
指定したURLをLINE内ブラウザまたは外部ブラウザで開きます。
liff.openWindow()
の外部ブラウザでの利用は、保証対象外です。
iOS版LINEかつLIFF v2.16.1以前で、url
プロパティにクエリパラメータ(?key=value
)が含まれず、かつURLフラグメント(#URL-fragment
)が含まれていると、URLフラグメントの末尾に意図しないクエリパラメータが追加されたURLが開かれます。
以下は、liff.openWindow()
実行時に開かれるURLの例です。
LIFF SDKバージョン | url プロパティ | 開かれるURL |
---|---|---|
v2.16.1 | https://example.com#URL-fragment | https://example.com#URL-fragment?is_liff_external_open_window=false |
v2.17.0 | https://example.com#URL-fragment | https://example.com#URL-fragment |
# 構文
liff.openWindow(params);
# 引数
params
Object
パラメータオブジェクト
params.url
String
URL。完全なURLで指定します。
params.external
Boolean
指定したURLを外部ブラウザで開くかどうかを、以下のどちらかの値で指定します。デフォルト値はfalse
です。
true
:外部ブラウザで開きます。false
:LINE内ブラウザで開きます。
# 戻り値
なし
# liff.closeWindow()
LIFFアプリを閉じます。
このメソッドは、LIFF SDKバージョンが2.4.0以上の場合のみ、liff.init()
によるLIFFアプリの初期化が終了する前でも実行できます。
liff.closeWindow()
の外部ブラウザでの動作は、保証対象外です。
# 構文
liff.closeWindow();
# 引数
なし
# 戻り値
なし
# メッセージ
# liff.sendMessages()
ユーザーの代わりに、LIFFアプリが開かれているトークルームにメッセージを送信します。
この機能を利用するには、以下の条件を満たす必要があります。
- 1対1のトーク、グループトーク、または複数人トークから起動したLIFFアプリのLIFFブラウザ内である
chat_message.write
スコープが有効である
条件を満たしていない場合、liff.sendMessages()
メソッドが利用できず、エラーコード403
のuser doesn't grant required permissions yet
エラーが発生します。以下は、エラーが発生する場合の例です。
- Keepメモ (opens new window)の機能を利用してLIFFアプリにアクセスした場合。
- ウェブサイトのリダイレクト処理などによりLIFFアプリを開くためのURLスキームにアクセスした場合。
- LIFF間遷移後のLIFFアプリで
chat_message.write
スコープが無効になった場合。詳しくは、『LIFFドキュメント』の「LIFF間遷移後の「chat_message.write」スコープについて」を参照してください。 - ユーザーが
chat_message.write
スコープを認可しなかった場合。
なお、LIFFアプリが起動された画面に関する情報は、liff.getContext()
メソッドで取得できます。
# 構文
liff.sendMessages(messages);
# 引数
messages
Array of objects
メッセージオブジェクト
最大件数:5
Messaging APIの以下のタイプのメッセージを送信できます。
- テキストメッセージ。ただし、
emojis
プロパティおよびquoteToken
プロパティは利用できません。 - スタンプメッセージ。ただし、
quoteToken
プロパティは利用できません。 - 画像メッセージ。
- 動画メッセージ。ただし、
trackingId
プロパティは利用できません。 - 音声メッセージ。
- 位置情報メッセージ。
- テンプレートメッセージ。ただし、設定できるアクションはURIアクションのみです。
- Flex Message。ただし、設定できるアクションはURIアクションのみです。
liff.sendMessages()
メソッドによってユーザーからテンプレートメッセージまたはFlex Messageが送信された場合、LINEプラットフォームからWebhookは送信されません。それ以外のメッセージタイプであれば、Webhookは送信されます。liff.sendMessages()
メソッドで画像、動画、および音声のメッセージが送信されると、結果として送信されるWebhookイベントのcontentProvider.type
プロパティの値はexternal
になります。詳しくは、『Messaging APIリファレンス』の「メッセージイベント」を参照してください。
# 戻り値
Promise
オブジェクトが返されます。
- メッセージの送信が成功すると、
Promise
がresolveされます。値は渡されません。 - メッセージの送信が失敗すると、
Promise
がrejectされ、LiffError
が渡されます。
# liff.shareTargetPicker()
ターゲットピッカー(グループまたは友だちを選択する画面)を表示し、ターゲットピッカーで選択した相手に、開発者が作成したメッセージを送信します。このメッセージは、ユーザーが送信したかのように、グループまたは友だちに表示されます。
- ターゲットピッカーを表示するには、LINE Developersコンソールでシェアターゲットピッカーをオンにしてください。詳しくは、『LIFFドキュメント』の「シェアターゲットピッカーを利用するには」を参照してください。
- 外部ブラウザで利用する場合は、
liff.login()
を呼び出して、ログイン処理を行ってから、liff.shareTargetPicker()
を呼び出します。
ユーザーのプライバシーを保護するため、シェアターゲットピッカーで、何人にメッセージが送信されたかの情報は取得できません。また、提供も行なっておりません。
# 構文
liff.shareTargetPicker(messages, options);
# 引数
messages
Array of objects
メッセージオブジェクト
最大件数:5
Messaging APIの以下のタイプのメッセージを送信できます。
- テキストメッセージ。ただし、
emojis
プロパティおよびquoteToken
プロパティは利用できません。 - 画像メッセージ。
- 動画メッセージ。ただし、
trackingId
プロパティは利用できません。 - 音声メッセージ。
- 位置情報メッセージ。
- テンプレートメッセージ。ただし、設定できるアクションはURIアクションのみです。
- Flex Message。ただし、設定できるアクションはURIアクションのみです。
options
Object
シェアターゲットピッカーのオプション
options.isMultiple
Boolean
ユーザーがターゲットピッカーで選択するメッセージ送信先として、複数の送信先を選択可能にするかどうかを、以下のどちらかの値で指定します。デフォルト値はtrue
です。
true
:ユーザーはグループ、友だち、トークの中から、複数の送信先を選択できます。false
:ユーザーは友だちの中から、1人のみを送信先として選択できます。
isMultiple
プロパティにfalse
を設定しても、シェアターゲットピッカーを複数回呼び出すことや、シェア後のメッセージをユーザー側で再度シェアすることで、複数のユーザーへのメッセージ送信が可能です。厳密にユーザーから1人の友だちに対して、一度しかメッセージを送信できないようにする場合には、LIFFアプリ実装時に制限をかける必要があります。
URLを含むメッセージを送信し、URLへのアクセスを制限する場合の例を紹介します。
- URLにユニークなトークンを付与し、メッセージを送信します。
- メッセージ内のURLへアクセスされた際にサーバー側でトークンを検証し、複数のユーザーからのアクセスを制限します。
# 戻り値
Promise
オブジェクトが返されます。
正しくメッセージが送信されると、
Promise
がresolveされ、以下のプロパティを持つオブジェクトが渡されます。status
String
常に
success
です。メッセージを送信する前に、ユーザーがキャンセルしてターゲットピッカーを閉じると、
Promise
がresolveされますが、オブジェクトは渡されません。ターゲットピッカーが表示される前に問題が発生した場合は、
Promise
がrejectされ、LiffError
が渡されます。LiffErrorオブジェクトについては、「LIFF SDKのエラー」を参照してください。
Promise
がresolveした場合とrejectした場合のコールバック関数内で、alert()
を実行すると一部端末で正しく動作しません。
# カメラ
# liff.scanCodeV2()
二次元コードリーダーを起動し、読み取った文字列を取得します。二次元コードリーダーを起動するには、あらかじめLINE Developersコンソールで、 [Scan QR] をオンにする必要があります。
liff.scanCodeV2()
は以下の環境で動作します。
- iOS:iOS14.3以降
- Android:すべてのバージョン
- 外部ブラウザ:WebRTC API (opens new window) をサポートするウェブブラウザ
OS | バージョン | LIFFブラウザ | 外部ブラウザ |
---|---|---|---|
iOS | 11〜14.2 | ❌ | ✅ ※1 |
14.3以降 | ✅ ※2 | ✅ ※1 | |
Android | すべてのバージョン | ✅ ※2 | ✅ ※1 |
PC | すべてのバージョン | ❌ | ✅ ※1 |
※1 WebRTC API (opens new window)をサポートするウェブブラウザのみ利用できます。
※2 LIFFブラウザの画面サイズがFull
の場合のみ利用できます。詳しくは、『LIFFドキュメント』の「LIFFブラウザの画面サイズ」を参照してください。
LIFFアプリをチャネルに追加するときに、[Scan QR]をオンにしてください。[Scan QR]の設定は、LIFFアプリ追加後もLINE DevelopersコンソールのLIFFタブで変更できます。
liff.scanCodeV2()
は、内部でjsQR (opens new window)という外部ライブラリを使用しています。そのため、liff.scanCodeV2()
メソッド実行時に起動する二次元コードリーダーは、jsQR (opens new window)の動作仕様に依存します。なお、使用ライブラリは予告なく更新、変更される可能性があります。
# 構文
liff.scanCodeV2();
# 引数
なし
# 戻り値
Promise
オブジェクトが返されます。
二次元コードリーダーで文字列が読み取れると、Promise
がresolveされ、読み取った文字列を含むオブジェクトが渡されます。
value
String
二次元コードリーダーで読み取った文字列
# エラーレスポンス
Promise
がreject
されたときは、LiffError
が渡されます。
# liff.scanCode()
従来のliff.scanCode()
メソッドは非推奨になります。二次元コードリーダーを実装する場合は、liff.scanCodeV2()
メソッドを使用することをお勧めします。
LINEの二次元コードリーダーを起動し、読み取った文字列を取得します。二次元コードリーダーを起動するには、あらかじめLINE Developersコンソールで、 [Scan QR] をオンにする必要があります。
liff.scanCode()
は以下の環境で動作します。
OS | バージョン | LIFFブラウザ | 外部ブラウザ |
---|---|---|---|
iOS | すべてのバージョン | ❌ | ❌ |
Android | すべてのバージョン | ✅ | ❌ |
PC | すべてのバージョン | ❌ | ❌ |
技術的な問題があり、iOS版LINEでは、liff.scanCode
はundefined
になります。サンプルコードのように、関数の存在を確認してから、使用してください。iOS版LINEや外部ブラウザでも二次元コードリーダーをお使いになりたい場合は、「liff.scanCodeV2()
」を参照してください。
- LIFFアプリをチャネルに追加するときに、[Scan QR]をオンにしてください。[Scan QR]の設定は、LIFFアプリ追加後もLINE DevelopersコンソールのLIFFタブで変更できます。
liff.scanCode()
は、外部ブラウザでは利用できません。
# 構文
liff.scanCode();
# 引数
なし
# 戻り値
Promise
オブジェクトが返されます。
LINEの二次元コードリーダーで文字列が読み取れると、Promise
がresolveされ、読み取った文字列を含むオブジェクトが渡されます。
value
String
二次元コードリーダーで読み取った文字列
# パーマネントリンク
# liff.permanentLink.createUrlBy()
LIFFアプリの任意のページのパーマネントリンクを取得します。
パーマネントリンクの形式:
https://liff.line.me/{liffId}/{path}?{query}#{URL fragment}
# 構文
liff.permanentLink.createUrlBy(url);
# 引数
url
String
パーマネントリンクを取得するURL。任意のクエリパラメータやURLフラグメントを追加できます。
# 戻り値
Promise
オブジェクトが返されます。
Promise
がresolveされると、パーマネントリンクの文字列が渡されます。
# エラーレスポンス
パーマネントリンクを取得するURLが、LINE Developersコンソールの[エンドポイントURL]に指定したURLで始まらない場合、Promise
がrejectされ、LiffError
が渡されます。
たとえば、パーマネントリンクを取得するURL(例:https://example.com/
)が、[エンドポイントURL](例:https://example.com/path1?q1=v1
)より上の階層の場合、Promise
がrejectされます。
# liff.permanentLink.createUrl()
技術的な問題があり、liff.permanentLink.createUrl()
は、次回メジャーバージョン以降に非推奨になる可能性があります。現在のページのパーマネントリンクを取得するには、liff.permanentLink.createUrlBy()
を使用することをお勧めします。
現在のページのパーマネントリンクを取得します。
パーマネントリンクの形式:
https://liff.line.me/{liffId}/{path}?{query}#{URL fragment}
# 構文
liff.permanentLink.createUrl();
# 引数
なし
# 戻り値
現在のページのパーマネントリンクが、文字列で返されます。
現在のページのURLがLINE Developersコンソールの[エンドポイントURL]に指定したURLで始まらない場合、LiffError
例外が発生します。
# liff.permanentLink.setExtraQueryParam()
技術的な問題があり、liff.permanentLink.setExtraQueryParam()
は、次回メジャーバージョン以降に非推奨になる可能性があります。現在のページのパーマネントリンクに、任意のクエリパラメータを追加するには、liff.permanentLink.createUrlBy()
を使用することをお勧めします。
現在のページのパーマネントリンクに、任意のクエリパラメータを追加できます。
liff.permanentLink.setExtraQueryParam()
を実行するたびに、前回追加したクエリパラメータは破棄されます。
- 追加したクエリパラメータを削除するには、
liff.permanentLink.setExtraQueryParam("")
を実行します。 - 追加したクエリパラメータは、ユーザーが別のページに移動すると破棄されます。
# 構文
liff.permanentLink.setExtraQueryParam(extraString);
# 引数
extraString
String
追加するクエリパラメータ
# 戻り値
なし
# LIFFプラグイン
# liff.use()
# 構文
liff.use(module, option);
# 引数
module
Object
プラガブルSDKのLIFF APIのモジュールやLIFFプラグイン。
LIFF APIのモジュールを渡す場合、インスタンス化する必要があります。詳しくは、『LIFFドキュメント』の「プラガブルSDKの使用方法」を参照してください。
LIFFプラグインを渡す場合、LIFFプラグインがクラスのときは、インスタンス化する必要があります。詳しくは、『LIFFドキュメント』の「LIFFプラグインを使用する」を参照してください。
# 戻り値
liff
オブジェクトが返されます。
# 多言語化
# liff.i18n.setLang()
# 構文
liff.i18n.setLang(language);
# 引数
language
String
RFC 5646(BCP 47) (opens new window)で定義されている言語タグ。指定した言語タグの翻訳がない場合は、en
がフォールバックとして使用されます。
# 戻り値
Promise
オブジェクトが返されます。
# エラーレスポンス
Promise
がrejectされたときは、LiffError
が渡されます。
# その他
# liff.createShortcutOnHomeScreen()
この機能は、認証済ミニアプリでのみ利用できます。未認証ミニアプリの場合、開発用の内部チャネルではテストできますが、公開用の内部チャネルでは利用できません。
LINEミニアプリへのショートカットを、ユーザー端末のホーム画面に追加する画面を表示します。
詳しくは、『LINEミニアプリドキュメント』の「ユーザー端末のホーム画面にLINEミニアプリへのショートカットを追加する」を参照してください。
liff.createShortcutOnHomeScreen()
メソッドは、ユーザー体験を損なわないよう、LINEミニアプリ上でのユーザー操作(例:タップ)に対する応答として実行してください。
# 使用条件
liff.createShortcutOnHomeScreen()
メソッドを使用するには、以下の条件をすべて満たす必要があります。
- LINEミニアプリである。
- LINEミニアプリのLIFF SDKのバージョンがv2.23.0以上である。
- ユーザー端末のLINEアプリのバージョンが13.20.0以上である。
# 動作条件
ユーザー端末のOSがiOSの場合、liff.createShortcutOnHomeScreen()
メソッドが動作する条件は以下のとおりです。動作しない環境においてこのメソッドを実行すると、エラーページが表示されます。
デフォルトのブラウザ | iOSのバージョン | 動作するかどうか |
---|---|---|
Safari | すべてのバージョン | 動作する |
Chrome | 16.4以降 | 動作する |
Safari、Chrome以外のブラウザ | 16.4以降 | 動作は保証されない |
Safari以外のブラウザ | 16.4未満 | 動作しない |
たとえば、iOS 16.4未満において、Chromeでliff.createShortcutOnHomeScreen()
メソッドを実行した場合は、以下のエラーページが表示されます。
# 構文
liff.createShortcutOnHomeScreen(params);
# 引数
params
Object
パラメータオブジェクト
# 戻り値
Promise
オブジェクトが返されます。
ショートカット追加画面が表示されると、Promise
がresolveされます。値は渡されません。
なお、ユーザーが端末のホーム画面にLINEミニアプリへのショートカットを実際に追加したかどうかは確認できません。
# エラーレスポンス
Promise
がreject
されたときは、LiffError
が渡されます。