相关文章推荐
豁达的红烧肉  ·  XLSX.js 导出Excel demo ...·  1 年前    · 
千年单身的稀饭  ·  使用 Docker Compose ...·  2 年前    · 
直爽的乒乓球  ·  android 零星调试笔记 - 知乎·  2 年前    · 
犯傻的小笼包  ·  短视频软件开发,Android开发,使用Ko ...·  2 年前    · 
Code  ›  昆明火车站职工忆述暴恐事件:救人 关门--时政--人民网
民生 昆明生活 昆明新闻 昆明火车站暴恐案
http://politics.people.com.cn/n/2014/0305/c70731-24531121.html
正直的松球
1 年前
LINE Developers LINE Developers
About
News
Products
Documentation
FAQ
Glossary
More
  • API references
    • LINE Front-end Framework v2
    • Server API
  • Development guidelines
  • Quickstart
  • Guide
  • LIFF plugin
  • Tools
  • Resources

LIFF v2 API reference

Common specifications

Operating environment

For more information about supported operating environments for LIFF v2, see Overview in the LIFF documentation.

Which functions you can use depends on whether the LIFF app is opened in a LIFF browser or an external browser. For example, you can't use liff.scanCode() in an external browser. For more information, see the descriptions for each client API.

LIFF apps are not compatible with OpenChat

For example, retrieving a user's profile information through a LIFF app isn't possible in most cases.

LIFF SDK errors

LIFF SDK errors are returned in LiffError objects.

When identifying errors, refer to both the error code and the error message

Since the error messages are subject to change without notice, identifying errors based on an exact match of the error message may cause your LIFF app to malfunction. To ensure that your LIFF app continues to work properly even when error messages change, identify errors by referring to both the error code and the error message.

We plan to make improvements so that errors can be uniquely identified by error codes.

Example

LiffError object

code

String

Error code

message

String

Not always included

Error message

cause

Unknown

Not always included

Error cause

Error details

Error code Description
400 Problem with the request. Check the request parameters and JSON format.
401 Check that the authorization header is correct.
403 Not authorized to use the API. Confirm that your account or plan is authorized to use the API.
429 Make sure that you are within the rate limit for requests.
500 Temporary error on the API server.
INIT_FAILED Failed to init LIFF SDK.
INVALID_ARGUMENT An invalid argument was specified.
UNAUTHORIZED
  • The user did not authorize.
  • Call the server api without access token.
  • Call the share target picker before logging in.
FORBIDDEN
  • You don't have the required permission.
  • You attempted to use a feature in an environment that's not supported.
INVALID_CONFIG An invalid setting.
  • Specify the liffId to initialize LIFF apps using liff.init() .
  • The URL of the page that executes the liff.permanentLink.createUrl() method doesn't start with the URL specified in the Endpoint URL .
INVALID_ID_TOKEN Failed to verify the ID token.
EXCEPTION_IN_SUBWINDOW Problem with subwindow.
  • For example, if the target picker (group or friend selection screen) is displayed and has been idle for more than 10 minutes, for example.
UNKNOWN Unknown error.

LIFF SDK properties

liff.id

The property that holds the LIFF app ID ( String type) passed to liff.init() .

The value of liff.id is null until you run liff.init() .

Example

liff.ready

A property holding the Promise object that resolves when you run liff.init() for the first time after starting the LIFF app.

If you use liff.ready , you can execute any process after the completion of liff.init() .

This property can be used before the LIFF app is initialized

You can use liff.ready even before the initialization of the LIFF app by liff.init() has finished.

Example

Note

If liff.init() fails, liff.ready will not be rejected. Also, it doesn't return a LiffError object.

Initialization

liff.init()

Initializes a LIFF app.

You can only call other LIFF SDK methods after executing the liff.init() method. LIFF apps must be initialized each time a page is opened. Even if the transition is within the same LIFF app, you should execute the liff.init() method when you open a new page.

If you use LIFF features without properly initializing the LIFF app, we don't guarantee that the features will work.

The LIFF SDK obtains the access token and ID token of the user from the LINE Platform when you execute the liff.init() method.

  • To use the access token obtained by the LIFF SDK, call liff.getAccessToken() .
  • To use the ID token payload obtained by the LIFF SDK, call liff.getDecodedIDToken() .

Important points to consider when initializing the LIFF app

The following are important points to consider when initializing your LIFF app. Read and understand these points before you start developing your LIFF app.

  • Execute liff.init() at the endpoint URL or at a lower level
  • Execute liff.init() once for the primary redirect URL and once for the secondary redirect URL
  • Process URL changes after liff.init() completes
  • Use caution when handling the primary redirect URL
Execute liff.init() at the endpoint URL or at a lower level

The liff.init() method will only work on URLs that are exactly the same as the endpoint URL, or on URLs that are at a lower level than the endpoint URL. If the LIFF app transitions to a URL other than these, the liff.init() method isn't guaranteed to work.

The following example shows whether the behavior is guaranteed for the URL that executes the liff.init() method when the endpoint URL is https://example.com/path1/ . Some LIFF app features, such as the multi-tab view , may not work properly on URLs where the behavior isn't guaranteed.

URL to execute liff.init() Guaranteed to work
https://example.com/ ❌
https://example.com/path1/ ✅
https://example.com/path1/language/ ✅
https://example.com/path2/ ❌
When executing the liff.init() method, the warning message "liff.init() was called with a current URL that is not related to the endpoint URL." appears in a console

In LIFF v2.27.2 or later, a warning message will appear when the liff.init() method is executed on a URL where the behavior isn't guaranteed.

For example, if the endpoint URL of a LIFF app is https://example.com/path1/path2/ and the URL where the liff.init() method is executed is https://example.com/path1/ , the following warning message will appear:

text
liff.init() was called with a current URL that is not related to the endpoint URL.
https://example.com/path1/ is not under https://example.com/path1/path2/

If you see the warning message above, consider changing the endpoint URL to https://example.com/ or https://example.com/path1/ . Changing to these URLs guarantees the liff.init() method works correctly.

Execute liff.init() once for the primary redirect URL and once for the secondary redirect URL

The liff.init() method performs initialization processing based on information such as liff.state and access_token=xxx given to the primary redirect URL. If your endpoint URL includes a query parameter or path, to properly initialize the LIFF app, execute the liff.init() method once for both the primary redirect URL and the secondary redirect URL. For more information, see Behaviors from accessing the LIFF URL to opening the LIFF app in the LIFF documentation.

Process URL changes after liff.init() completes

Execute processes that change URLs after the Promise object returned by the liff.init() method is resolved.

javascript
// Example using window.location.replace()
  .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/");

If you execute any of the following URL manipulations before the Promise object resolves, the LIFF app may not open properly:

  • Change the URL using the Document.location property or the Window.location property
  • Change the URL using the history.pushState() method or the history.replaceState() method of the History API
  • Return status code 301 or 302 on the server-side and redirect to another URL
Use caution when handling the primary redirect URL

The access_token=xxx automatically granted to the primary redirect URL is the user's access token (confidential information). Don't send the primary redirect URL to an external logging tool such as Google Analytics.

Note that in LIFF v2.11.0 or later, credential information is excluded from URLs when the liff.init() method is resolved. Therefore, you can prevent leaking credential information by sending the page view in the then() method as follows. If you want to use logging tools, we recommend that you upgrade your LIFF app to v2.11.0 or later. For more information about the updates in LIFF v2.11.0, see Release Notes in the LIFF documentation.

javascript
liff
  .init({
    liffId: "1234567890-AbcdEfgh", // Use own liffId
  .then(() => {
    ga("send", "pageview");
LIFF app's query parameters

When you access a LIFF URL or perform a transition between LIFF apps, the URL may be given query parameters that begin with liff.* .

e.g.

  • liff.state (indicates additional information specified in LIFF URL)
  • liff.referrer (indicates where the referrer came from when transitioning between LIFF apps. For more information, see Get URL from before LIFF-to-LIFF transition .)

The above query parameters are given by the SDK so that LIFF apps can function properly. When you independently alter the above query parameters, proper opening of the LIFF app and a transition between LIFF apps may not be guaranteed. Implement your app so that the liff.* query parameter is altered after liff.init() is resolved.

Functions that can be executed even before the LIFF app is initialized

This property or methods are available even before the liff.init() method is executed.

You can get the environment in which the LIFF app is running before initializing the LIFF app, or close the LIFF app when the LIFF app initialization fails.

  • liff.ready
  • liff.getOS()
  • liff.getAppLanguage()
  • liff.getLanguage() (deprecated)
  • liff.getVersion()
  • liff.getLineVersion()
  • liff.isInClient()
  • liff.closeWindow()
  • liff.use()
  • liff.i18n.setLang()

To use the liff.closeWindow() method before the initialization of the LIFF app by liff.init() has finished, your LIFF SDK version must be v2.4.0 or later.

Example

Syntax

javascript
liff.init(config, successCallback, errorCallback);

Arguments

config

Object

Required

LIFF app configurations

config.liffId

String

Required

LIFF app ID. Can be obtained when you add the LIFF app to your channel. For more information, see Adding a LIFF app to your channel .
The LIFF app ID specified here can be obtained with liff.id .

config.withLoginOnExternalBrowser

Boolean

Optional

Using either of the following values, specify whether or not to automatically execute the liff.login() method when initializing a LIFF app in an external browser. The default value is false .

  • true : Automatically execute the liff.login() method in external browsers.
  • false : Don't automatically execute the liff.login() method in external browsers.

successCallback

Function

Optional

Callback to return a data object upon successful initialization of the LIFF app.

Note

successCallback is processed at the same time that the Promise object of the return value is resolved. However, there is no set order to which is processed first.

errorCallback

Function

Optional

Callback to return an error object upon failure to initialize the LIFF app.

Note

errorCallback is processed at the same time that the Promise object of the return value is rejected. However, there is no set order to which is processed first.

Return value

Returns a Promise object.

Error response

When the Promise is rejected, LiffError is passed.

Getting environment

liff.getOS()

Gets the environment in which the user is running the LIFF app.

This method can be used before the LIFF app is initialized

You can use this method even before the initialization of the LIFF app by liff.init() has finished.

Syntax

javascript
liff.getOS();

Arguments

None

Return value

The environment in which the user is running the LIFF app is returned as a string. Since the return value is based on the name of the OS in the user agent string, the return value is independent of the browser type ( LIFF browser , LINE's in-app browser , external browser ).

For example, if the user is using iOS, ios will be returned, regardless of whether the user is using LIFF browser or Safari.

Return value Description
ios iOS or iPadOS
android Android
web Other than the above

For more information about LIFF app supported operating systems and browsers, see Operating environment .

liff.getAppLanguage()

Gets the language setting of the LINE app running the LIFF app.

This method can be used before the LIFF app is initialized

You can use this method even before the initialization of the LIFF app by liff.init() has finished.

Conditions of use

LIFF SDK versions v2.24.0 or later

Operating conditions

All of the following conditions must be met for the liff.getAppLanguage() method to work correctly:

  • The LIFF application is running on the LIFF browser .
  • The LINE app version is 14.11.0 or later.

If the above conditions aren't met, the liff.getAppLanguage() method behaves the same as the liff.getLanguage() method.

Syntax

javascript
liff.getAppLanguage();

Arguments

None

Return value

The language setting of the LINE app running the LIFF app is returned as a string that follows RFC 5646 .

liff.getLanguage()

The liff.getLanguage() method is deprecated

The liff.getLanguage() method is deprecated. To get the language setting of the environment in which the LIFF app is running, use the liff.getAppLanguage() method. For more information, see the news from July 23, 2024 .

Gets the language setting of the environment in which the LIFF app is running.

This method can be used before the LIFF app is initialized

You can use this method even before the initialization of the LIFF app by liff.init() has finished.

Syntax

javascript
liff.getLanguage();

Arguments

None

Return value

String containing language settings specified in navigator.language in the LIFF app's running environment.

liff.getVersion()

Gets the version of the LIFF SDK.

This method can be used before the LIFF app is initialized

You can use this method even before the initialization of the LIFF app by liff.init() has finished.

Syntax

javascript
liff.getVersion();

Arguments

None

Return value

The version of the LIFF SDK is returned as a string.

liff.getLineVersion()

Gets the user's LINE version.

This method can be used before the LIFF app is initialized

You can use this method even before the initialization of the LIFF app by liff.init() has finished.

Syntax

javascript
liff.getLineVersion();

Arguments

None

Return value

If a user opens the LIFF app using a LIFF browser, the LINE version of the user is returned as a string. If a user opens the LIFF app using an external browser, null is returned.

liff.getContext()

Gets the screen type (1-on-1 chat, group chat, multi-person chat, or external browser) from which the LIFF app is launched.

We've discontinued providing company internal identifiers of chat rooms to LIFF apps

We've discontinued providing company internal identifiers of chat rooms (one-on-one chat ID, group ID, and room ID) to LIFF apps. For more information, see the news from February 6, 2023, We've discontinued providing company internal identifiers of chat rooms to LIFF apps as of February 6, 2023 .

Example

Syntax

javascript
liff.getContext();

Arguments

None

Return value

A data object that contains the information necessary to make various API calls.

type

String

The type of screen from where the LIFF app was launched. One of:

  • utou : 1-on-1 chat.
  • group : Group chat.
  • room : Multi-person chat.
  • external : External browser.
  • none : A screen other than a 1-on-1 chat, group chat, multi-person chat, or external browser. For example, Wallet tab.

This property is also returned for LIFF apps after transitioning between LIFF apps.

userId

String

User ID. Included when the type property is utou , room , group , none or external . However, null may be returned when type is external .

liffId

String

LIFF ID.

viewType

String

Size of the LIFF app view, only returned if the type property isn't external . One of:

  • compact
  • tall
  • full

For more information, see Adding a LIFF app to your channel .

endpointUrl

String

URL of the service endpoint.

accessTokenHash

String

First half of the hashed SHA256 value of the access token. Used to validate the access token.

availability

Object

Returns the availability object that indicates whether the LIFF features are available in the environment in which the LIFF app was launched.

scope

Array of strings

Returns which of the scopes the LIFF app has within the scope required to use some of the LIFF SDK methods:

  • openid : Scope required to use liff.getIDToken() and liff.getDecodedIDToken()
  • email : Scope required to get the user's email address using liff.getIDToken() or liff.getDecodedIDToken()
  • profile : Scope required to use liff.getProfile() or liff.getFriendship()
  • chat_message.write : Scope required to use liff.sendMessages()

For more information about scope, see Adding the LIFF app to your channel in the LIFF documentation.

Difference between liff.getContext() and liff.permission.getGrantedAll()

The liff.getContext() method gets a list of scopes for the LIFF app (*).

On the other hand, the liff.permission.getGrantedAll() method gets a list of scopes for which the user has agreed to grant permission among the scopes for the LIFF app.

* The scopes specified in the "Scope" section under the LIFF tab in a LINE Login channel

menuColorSetting

Object

Returns the color setting of the LIFF browser header as a menuColorSetting object .

Note that we currently don't provide the ability to change the header color setting.

miniAppId

String

Not always included

Returns the string set by the Custom Path feature of the LINE MINI App. For more information about the Custom Path feature, see Configuring Custom Path in the LINE MINI App documentation.

miniDomainAllowed

Boolean

Returns whether the LINE MINI App is available on the miniapp.line.me domain.

permanentLinkPattern

String

How additional information in LIFF URLs is handled. concat is returned.

For more information, see Opening a LIFF app in the LIFF documentation.

utouId

String

Discontinued

This property was discontinued. For more information, see the news from February 6, 2023, We've discontinued providing company internal identifiers of chat rooms to LIFF apps as of February 6, 2023 .

groupId

String

Discontinued

This property was discontinued. For more information, see the news from February 6, 2023, We've discontinued providing company internal identifiers of chat rooms to LIFF apps as of February 6, 2023 .

roomId

String

Discontinued

This property was discontinued. For more information, see the news from February 6, 2023, We've discontinued providing company internal identifiers of chat rooms to LIFF apps as of February 6, 2023 .

Example (LIFF browser)

Example (external browser)

availability object

The availability object contains the following properties:

shareTargetPicker

Object

Returns the object that indicates whether liff.shareTargetPicker() is available in the environment in which the LIFF app was launched.

* To get information about the availability of liff.shareTargetPicker() , we highly recommend using liff.isApiAvailable('shareTargetPicker') instead.

multipleLiffTransition

Object

Returns the object that indicates whether it's possible to transition to another LIFF app with liff.openWindow() without closing the LIFF app within the LIFF browser in the environment in which the LIFF app was launched.

* To get information about the availability of a transition between multiple LIFF apps, we highly recommend using liff.isApiAvailable('multipleLiffTransition') instead.

subwindowOpen

Object

Returns the object that indicates whether the subwindow is available in the environment in which the LIFF app was launched.

scanCode

Object

Returns the object that indicates whether liff.scanCode() is available in the environment in which the LIFF app was launched.

scanCodeV2

Object

Returns the object that indicates whether liff.scanCodeV2() is available in the environment in which the LIFF app was launched.

getAdvertisingId

Object

Returns the object that indicates whether liff.getAid() is available in the environment in which the LIFF app was launched.

Note that we currently don't provide liff.getAid() .

addToHomeScreen

String

Returns the object that indicates whether liff.addToHomeScreen() is available in the environment in which the LIFF app was launched.

Note that we currently don't provide liff.addToHomeScreen() .

bluetoothLeFunction

Object

Returns the object that indicates whether Bluetooth® Low Energy for LINE Things is available in the environment in which the LIFF app was launched.

Note that we currently don't provide this feature.

skipChannelVerificationScreen

Object

Returns the object that indicates whether the "Channel consent simplification" feature is available in the environment in which the LIFF app was launched. For more information, see Skipping the channel consent process in the LINE MINI App documentation.

addToHomeV2

Object

Returns the object that indicates whether liff.createShortcutOnHomeScreen() is available in the environment in which the LIFF app was launched.

* To get information about the availability of liff.createShortcutOnHomeScreen() , we highly recommend using liff.isApiAvailable('createShortcutOnHomeScreen') instead.

addToHomeHideDomain

Object

Returns the object that indicates whether the endpoint URL can be hidden when displaying a screen for adding a shortcut to the home screen of the user's device.

Note that we currently don't provide this feature.

addToHomeLineScheme

Object

Returns the object that indicates whether creating a shortcut specifying the LINE URL scheme is available.

Note that we currently don't provide this feature.

Example

Common properties of the availability object

permission

Boolean

Specifies whether the feature specified by the property name of the availability object is available in the environment in which the LIFF app was launched.

  • true : The feature is available.
  • false : The feature isn't available.

minVer

String

Not always included

The minimum LINE version that supports the corresponding feature.

maxVer

String

Not always included

The maximum LINE version that supports the corresponding feature.

unsupportedFromVer

String

Not always included

The LINE version for which the corresponding feature is no longer supported.

minOsVer

String

Not always included

The minimum OS version that supports the corresponding feature.

maxOsVer

String

Not always included

The maximum OS version that supports the corresponding feature.

unsupportedFromOsVer

String

Not always included

The OS version for which the corresponding feature is no longer supported.

menuColorSetting object

The menuColorSetting object contains the following properties:

adaptableColorSchemes

Array of strings

Always returns light .

lightModeColor

Object

Returns the header color setting as object when adaptableColorSchemes is light .

darkModeColor

Object

Returns the header color setting as object when adaptableColorSchemes is dark .

Note that we currently don't provide the header color setting.

Example

Common properties of the menuColorSetting object

iconColor

String

The color of the header icon. The color is represented by a hexadecimal color code in the #RRGGBB format.

statusBarColor

String

Always returns white .

titleTextColor

String

The color of the header title text. The color is represented by a hexadecimal color code in the #RRGGBB format.

titleSubtextColor

String

The color of the header subtitle text. The color is represented by a hexadecimal color code in the #RRGGBB format.

titleButtonColor

String

The color of the header button. The color is represented by a hexadecimal color code in the #RRGGBB format.

titleBackgroundColor

String

The header background color. The color is represented by a hexadecimal color code in the #RRGGBB format.

progressBarColor

String

The color of the header progress bar. The color is represented by a hexadecimal color code in the #RRGGBB format.

progressBackgroundColor

String

The background color of the header progress bar. The color is represented by a hexadecimal color code in the #RRGGBB format.

liff.isInClient()

Determines whether the LIFF app is running in a LIFF browser.

This method can be used before the LIFF app is initialized

You can use this method even before the initialization of the LIFF app by liff.init() has finished.

Syntax

javascript
liff.isInClient();

Arguments

None

Return value

  • true : Running in LIFF browser
  • false : Running in external browser or LINE's in-app browser

liff.isLoggedIn()

Checks whether the user is logged in.

Example

Syntax

javascript
liff.isLoggedIn();

Arguments

None

Return value

  • true : The user is logged in.
  • false : The user is not logged in.

liff.isApiAvailable()

Checks whether the specified API is available in the environment where you started the LIFF app. Specifically, it verifies whether the current LINE version supports the API and whether the terms and conditions for the API have been accepted.

Example

Syntax

javascript
liff.isApiAvailable(apiName);

Arguments

apiName

String

Required

The name of the LIFF client API. You can currently specify these API names:

  • shareTargetPicker
  • createShortcutOnHomeScreen
  • multipleLiffTransition
About multipleLiffTransition

multipleLiffTransition is a property which indicates whether it's possible to open another LIFF app without closing the current LIFF app (LIFF-to-LIFF transition). It is not the name of an API. For more information, see Opening a LIFF app from another LIFF app (LIFF-to-LIFF transition) in the LIFF documentation.

Return value

Returns whether the specified API is available in the current environment. If available, true is returned. If not, false is returned. Examples of false returned are as follows:

  • If the LIFF app was launched with a LINE version that doesn't support the API
  • If the LIFF app was launched in an external browser, even though the API isn't available in an external browser
  • If the terms and conditions haven't been accepted, even though you must accept them to use the API
  • If the user isn't logged in, even though the user must be logged in to use the API
  • If the access token is expired, even though the access token must be valid to use the API

Authentication

liff.login()

Performs the login process in the LINE's in-app browser or external browser .

Note

You can't use liff.login() in a LIFF browser, as it is automatically executed when liff.init() is executed.

Authorization requests within LIFF browser

The behavior of LINE Login authorization requests within the LIFF browser isn't guaranteed. Also, when opening LIFF apps from an external browser or LINE's in-app browser, make sure to use this method for the login process, not the authorization requests with LINE Login .

Example

Syntax

javascript
liff.login(loginConfig);

Arguments

loginConfig

Object

Optional

Login configurations

loginConfig.redirectUri

String

Optional

URL to open in the LIFF app after logging in. The default value is the URL set in Endpoint URL . For more information on how to set Endpoint URL , see Adding a LIFF app to your channel in the LIFF documentation.

If the URL specified in redirectUri doesn't start with the URL specified in Endpoint URL , the login process fails and an error screen is displayed.

For example, if Endpoint URL is https://example.com/path1/path2?query1=value1 , the success or failure of the login process is as follows. Query parameters and URL fragments don't affect the success or failure of the login process.

redirectUri Login process ✅ Success ❌ Failure
  • https://example.com/path1/path2?query1=value1
  • https://example.com/path1/path2?query2=value2
  • https://example.com/path1/path2#URL-fragment
  • https://example.com/path1/path2
  • https://example.com/path1/path2/
  • https://example.com/path1/path2/path3
  • Return value

    None

    liff.logout()

    Logs out.

    Example

    Syntax

    javascript
    liff.logout();
    

    Arguments

    None

    Return value

    None

    liff.getAccessToken()

    Gets the current user's access token.

    You can use the access token obtained with this API to send user data from the LIFF app to the server. For more information, see Using user data in LIFF apps and servers in the LIFF documentation.

    Validity period of the access token

    The access token is valid for 12 hours after being issued. When the user closes the LIFF app , the access token will be revoked even if it hasn't expired.

    Getting an access token
    • If the user starts the LIFF app in a LIFF browser, the LIFF SDK will get an access token when you call liff.init() .
    • If the user starts the LIFF app in an external browser, the LIFF SDK will get an access token when these steps are satisfied:
      1. You call liff.login() .
      2. The user logs in.
      3. You call liff.init() .

    Example

    Syntax

    javascript
    liff.getAccessToken();
    

    Arguments

    None

    Return value

    Returns the current user's access token as a string.

    liff.getIDToken()

    Get the ID token of the current user obtained by the LIFF SDK. An ID token is a JSON Web Token (JWT) that contains user data.

    You can use the ID token obtained with this API when sending the user data from the LIFF app to the server. For more information, see Using user data in LIFF apps and servers in the LIFF documentation.

    Select a scope

    When adding a LIFF app to your channel , select the openid scope. You can't get the ID tokens if you don't select the scope, or the users don't grant permission. The scope selections can be changed in the LIFF tab of the LINE Developers Console even after adding the LIFF app.

    Getting an ID token
    • If the user starts the LIFF app in a LIFF browser, the LIFF SDK will get an ID token when you call liff.init() .
    • If the user starts the LIFF app in an external browser, the LIFF SDK will get an ID token when these steps are satisfied:
      1. You call liff.login() .
      2. The user logs in.
      3. You call liff.init() .
    You can get the user's email address

    To get the email addresses of users, select the email scope when adding a LIFF app to your channel . You will get the email addresses once the users grant permission. The scope selections can be changed in the LIFF tab of the LINE Developers Console even after adding the LIFF app.

    Example

    Syntax

    javascript
    liff.getIDToken();
    

    Argument

    None

    Return value

    Returns an ID token.

    liff.getDecodedIDToken()

    Gets the payload of the ID token that's acquired by the LIFF SDK. The payload includes information such as user display name, profile image URL, email address, etc.

    Use this method when you want to use the display name of the user in the LIFF app.

    You can only get the main profile information. You can't get the user's subprofile .

    Don't send user info to server

    Don't send the user data obtained by this method to the server. For more information, see Using user data in LIFF apps and servers in the LIFF documentation.

    Select a scope

    When adding a LIFF app to your channel , select the openid scope. You can't get the ID tokens if you don't select the scope, or users don't grant permission. The scope selections can be changed in the LIFF tab of the LINE Developers Console even after adding the LIFF app.

    Getting an ID token
    • If the user starts the LIFF app in a LIFF browser, the LIFF SDK will get an ID token when you call liff.init() .
    • If the user starts the LIFF app in an external browser, the LIFF SDK will get an ID token when these steps are satisfied:
      1. You call liff.login() .
      2. The user logs in.
      3. You call liff.init() .
    You can get the user's email address

    To get the email addresses of users, select the email scope when adding a LIFF app to your channel . You will get the email addresses once the users grant permission. The scope selections can be changed in the LIFF tab of the LINE Developers Console even after adding the LIFF app.

    Example

    Syntax

    javascript
    liff.getDecodedIDToken();
    

    Arguments

    None

    Return value

    Gets the ID token payload.

    For more information on ID token payloads, see the Payload section of Get profile information from ID tokens in the Integrate LINE Login documentation.

    Example

    liff.permission.getGrantedAll()

    Gets a list of scopes for which the user has agreed to grant permission.

    The scopes that you can get with this method are as follows:

    • profile
    • chat_message.write
    • openid
    • email
    Difference between liff.getContext() and liff.permission.getGrantedAll()

    The liff.getContext() method gets a list of scopes for the LIFF app (*).

    On the other hand, the liff.permission.getGrantedAll() method gets a list of scopes for which the user has agreed to grant permission among the scopes for the LIFF app.

    * The scopes specified in the "Scope" section under the LIFF tab in a LINE Login channel

    Example

    Syntax

    javascript
    liff.permission.getGrantedAll();
    

    Arguments

    None

    Return value

    When the Promise is resolved, an array of scopes for which the user has agreed to grant permission is passed.

    Error response

    When the Promise is rejected, LiffError is passed.

    liff.permission.query()

    Verifies whether the user agrees to grant the specified permission.

    Example

    Syntax

    javascript
    liff.permission.query(permission);
    

    Arguments

    permission

    String

    Required

    The permission to be checked. Specify one of the following scopes:

    • profile
    • chat_message.write
    • openid
    • email

    Return value

    Promise object returned.

    When Promise is resolved, an object containing the following properties is returned.

    state

    String

    Contains one of the following values:

    • granted : User has consented to the authorization.
    • prompt : User hasn't consented to authorization.
    • unavailable : Not available because the channel does not have the specified scope.

    liff.permission.requestAll()

    Displays the "Verification screen" for the permissions requested by LINE MINI Apps.

    verification screen

    Operating environment of liff.permission.requestAll()

    liff.permission.requestAll() only operates on LINE MINI Apps .

    To execute this method, you need to turn on Channel consent simplification in advance on the LINE Developers Console . For more information on setting up the Channel consent simplification feature, see The "Channel consent simplification" feature setup of the LINE MINI App documentation.

    Make sure that the user has consented to all the permissions before executing this method

    If the user has already consented to all the permissions and you execute liff.permission.requestAll() , Promise will be rejected and LiffError will be returned. Therefore, use liff.permission.query() to check whether the user has consented to all the permissions, and execute liff.permission.requestAll() only if the user has unconsented permissions.

    Example

    Syntax

    javascript
    liff.permission.requestAll();
    

    Arguments

    None

    Return value

    Returns a Promise object.

    Error response

    If Channel consent simplification isn't turned on, and the user has already consented to all the permissions, Promise will be rejected and LiffError will be returned.

    Profile

    liff.getProfile()

    Gets the current user's profile information .

    You can only get the main profile information. You can't get the user's subprofile .

    Don't send user info to server

    Don't send the user data obtained by this method to the server. For more information, see Using user data in LIFF apps and servers in the LIFF documentation.

    Select a scope

    When adding a LIFF app to your channel , select the profile scope. You can't get user profiles if you don't select the scope, or the user doesn't grant permission. The scope selections can be changed in the LIFF tab of the LINE Developers Console even after adding the LIFF app.

    Example

    Syntax

    javascript
    liff.getProfile();
    

    Arguments

    None

    Return value

    Returns a Promise object.

    When the Promise is resolved, the object containing the user's profile information is passed.

    userId

    String

    User ID

    displayName

    String

    Display name

    pictureUrl

    String

    Image URL. This property is not returned if it has not been set by the user.

    statusMessage

    String

    Status message. This property is not returned if it has not been set by the user.

    Error response

    When the Promise is rejected, LiffError is passed.

    Example

    liff.getFriendship()

    Gets the friendship status between a user and a LINE Official Account.

    However, you can only get the friendship status between a user and a LINE Official Account that has been linked to the same LINE Login channel to which your LIFF app has been added. To learn how to link a LINE Official Account to a LINE Login channel, see Add a LINE Official Account as a friend when logged in (add friend option) in the LINE Login documentation.

    Select a scope

    When adding a LIFF app to your channel , select the profile scope. You can't get the friendship statuses if you don't select the scope, or the users don't grant permission. The scope selections can be changed in the LIFF tab of the LINE Developers Console even after adding the LIFF app.

    Example

    Syntax

    javascript
    liff.getFriendship();
    

    Arguments

    None

    Return value

    Returns a Promise object.

    When acquiring the status of friendship, the Promise is resolved and the information about friendship is passed.

    friendFlag

    Boolean

    • true : The user has added the LINE Official Account as a friend and has not blocked it.
    • Otherwise, false .
    Error response

    When the Promise is rejected, LiffError is passed.

    Example

    Window

    liff.openWindow()

    Opens the specified URL in the LINE's in-app browser or external browser.

    Operating environment of liff.openWindow()

    Use of liff.openWindow() in an external browser isn't guaranteed.

    Executing liff.openWindow() on LINE for iOS and LIFF v2.16.1 or earlier will open URLs with unintended query parameters added to the end of the URL fragment

    In LINE for iOS and LIFF v2.16.1 or earlier, if the url property doesn't contain a query parameter ( ?key=value ) but contains a URL fragment ( #URL-fragment ), a URL with an unintended query parameter added to the end of the URL fragment will be opened.

    These are example of URLs opened when executing the liff.openWindow() method

    LIFF SDK version url property URL opened
    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

    Example

    Syntax

    javascript
    liff.openWindow(params);
    

    Arguments

    params

    Object

    Required

    Parameter object

    params.url

    String

    Required

    URL. Specify a full URL.

    params.external

    Boolean

    Optional

    Whether to open the URL in an external browser. Specify one of the following values. The default value is false .

    • true : Opens the URL in an external browser.
    • false : Opens the URL in the LINE's in-app browser.

    Return value

    None

    liff.closeWindow()

    Closes the LIFF app.

    The behavior when closing the LIFF app depends on the LINE app version and the settings of the LIFF app. For more information, see Behavior when closing the LIFF app in the LIFF documentation.

    This method can be used before the LIFF app is initialized

    To use the liff.closeWindow() method before the initialization of the LIFF app by liff.init() has finished, your LIFF SDK version must be v2.4.0 or later.

    Note

    liff.closeWindow() isn't guaranteed to work in an external browser.

    Example

    Syntax

    javascript
    liff.closeWindow();
    

    Arguments

    None

    Return value

    None

    Message

    liff.sendMessages()

    Sends messages on behalf of the user to the chat room where the LIFF app is opened.

    To use this feature, the following conditions must be met:

    • Within the LIFF browser for a LIFF app launched from a one-on-one chat, group chat , or multi-person chat
    • The chat_message.write scope is enabled
    • The LIFF app hasn't been reloaded from the recently used services section

    If the conditions aren't met, the liff.sendMessages() method isn't available and user doesn't grant required permissions yet error with error code 403 will occur. The following are examples of cases that cause the error:

    • When accessing the LIFF app using the Keep Memo feature.
    • When accessing a URL scheme for opening a LIFF app through a website redirection process, etc.
    • When the chat_message.write scope is disabled after the LIFF-to-LIFF transition. For more information, see About the "chat_message.write" scope after transitioning between LIFF apps in the LIFF documentation.
    • When the user doesn't grant the chat_message.write scope.

    You can get the screen type from which the LIFF app is launched using the liff.getContext() method.

    Example

    Syntax

    javascript
    liff.sendMessages(messages);
    

    Arguments

    messages

    Array of objects

    Required

    Message objects
    Max: 5
    You can send the following types of Messaging API messages:

    • Text message . However, the emojis property and the quoteToken property aren't available.
    • Sticker message . However, the quoteToken property isn't available.
    • Image message .
    • Video message . However, the trackingId property isn't available.
    • Audio message .
    • Location message .
    • Template message . However, only a URI action can be set as an action.
    • Flex Message . However, only a URI action can be set as an action.

    When a template message or a Flex Message is sent from the user using the liff.sendMessages() method, no webhook is sent from the LINE Platform. For all other message types , a webhook is sent. When image, video, and audio messages are sent using the liff.sendMessages() method, resulting webhook events contain the contentProvider.type property whose value is external . For more information, see Message event in the Messaging API reference.

    Return value

    Returns a Promise object.

    • If the message is sent successfully, the Promise is resolved. No value is passed.
    • If you fail to send the message, the Promise is rejected and LiffError is passed.

    liff.shareTargetPicker()

    Displays the target picker (a screen for selecting a group or friend) and sends a message created by the developer to the selected target. The message appears to the group or friend as if it were sent by the user.

    Conditions for using the liff.shareTargetPicker() method

    To use the liff.shareTargetPicker() method, all of the following conditions must be met:

    • The user is logged in.
    • The share target picker is enabled in the LINE Developers Console . For more information, see Using the share target picker in the LIFF documentation.
    The email address login screen may be displayed when executing the liff.shareTargetPicker() method in a smartphone's external browser

    To display the target picker in an external browser , a Single Sign On (SSO) login session is required.

    In the login process using auto login , an SSO login session isn't issued. As a result, when the liff.shareTargetPicker() method is executed, the target picker may not be displayed, and the email address login screen may be displayed instead.

    After the user logs in by entering their email address and password, an SSO login session is issued, and the target picker will be displayed properly.

    We don't retrieve the number of people to whom a user has sent a message using the share target picker

    In order to protect user privacy, we neither collect nor provide information on how many people received a message from a user through the share target picker.

    Example

    Syntax

    javascript
    liff.shareTargetPicker(messages, options);
    

    Arguments

    messages

    Array of objects

    Required

    Message objects
    Max: 5
    You can send the following types of Messaging API messages:

    • Text message . However, the emojis property and the quoteToken property aren't available.
    • Image message .
    • Video message . However, the trackingId property isn't available.
    • Audio message .
    • Location message .
    • Template message . However, only a URI action can be set as an action.
    • Flex Message . However, only a URI action can be set as an action.

    options

    Object

    Optional

    Share target picker options

    options.isMultiple

    Boolean

    Optional

    Specifies whether or not to allow users to select multiple message recipients through the target picker, using either of these values. The default value is true .

    • true : Users can select multiple recipients from their groups, friends, and chats.
    • false : Users can select only one of their friends as the recipient.
    Setting isMultiple to false doesn't guarantee that the message will be sent to only one friend

    Even if you set the isMultiple property to false , you can still send a message to multiple users by calling the share target picker multiple times, or by re-sharing the same message to different recipients. To strictly allow a user to send a message to one friend only once, add a restriction when implementing the LIFF app.

    Here's an example of sending a message containing a URL and restricting access to the URL.

    1. Give the URL a unique token and send the message.
    2. When the URL in the message is accessed, the server side verifies the token and restricts access by multiple users.

    Return value

    Returns a Promise object.

    • If the message is sent correctly, Promise is resolved and an object with these properties will be passed. status String

    success

  • If the user cancels and closes the target picker before sending the message, Promise is resolved but the object isn't passed.
  • If a problem occurs before the target picker is displayed, Promise is rejected and LiffError is passed. For more information on the LiffError object, see LIFF SDK errors .
  • Note

    In the callback function where Promise has been resolved and rejected, the LIFF app won't work on some devices if the developer uses alert() .

    Camera

    liff.scanCodeV2()

    Launch the 2D code reader and obtain string. To activate the 2D code reader, turn on Scan QR on the LINE Developers Console .

    Operating environments of liff.scanCodeV2()

    liff.scanCodeV2() works in these environments.

    • iOS: iOS 14.3 or later
    • Android: All versions
    • External browser: Web browsers that support WebRTC API
    Version LIFF browser External browser 11-14.2 14.3 or later Android All versions All versions

    *1 You can only use web browsers that support WebRTC API .

    *2 Only available when the screen size of the LIFF browser is Full . For details, see Size of the LIFF browser in the LIFF documentation.

    Turn [Scan QR] on to launch the 2D code reader

    When Adding a LIFF app to your channel , turn on Scan QR . The Scan QR setting can be updated from the LIFF tab on the LINE Developers Console , even after adding a LIFF app to your channel.

    The operation specification of liff.scanCodeV2()

    liff.scanCodeV2() internally uses an external library called jsQR . Therefore, the 2D code reader to be launched when the liff.scanCodeV2() method is executed depends on the operation specification of jsQR . Libraries used may be updated or changed without notice.

    Example

    Syntax

    javascript
    liff.scanCodeV2();
    

    Arguments

    None

    Return value

    Returns a Promise object.

    When the string is read by the 2D code reader, Promise is resolved and the object containing the character string is passed.

    value

    String

    String scanned by the 2D code reader

    Error response

    When the Promise is rejected, LiffError is passed.

    liff.scanCode()

    liff.scanCode() method deprecated

    The traditional liff.scanCode() method has been deprecated . We recommend using the liff.scanCodeV2() method for implementing a 2D code reader.


    Starts a 2D code reader and gets the string read by the user. To start the 2D code reader, turn on ScanQR on the LINE Developers Console .

    Not available on LINE for iOS

    liff.scanCode() works in these environments.

    Version LIFF browser External browser All versions Android All versions All versions

    Due to technical issues, liff.scanCode is undefined in LINE for iOS. Use it after confirming that the function exists, as shown in the sample code. To use the 2D code reader with LINE for iOS or external browsers, see liff.scanCodeV2() .

    Turn [Scan QR] on to launch the 2D code reader
    • When Adding a LIFF app to your channel , turn on Scan QR . The Scan QR setting can be updated from the LIFF tab on the LINE Developers Console , even after adding a LIFF app to your channel.
    • You can't use liff.scanCode() in an external browser.

    Example

    Syntax

    javascript
    liff.scanCode();
    

    Arguments

    None

    Return value

    Returns a Promise object.

    When reading a string by a 2D code reader, the Promise is resolved and the object containing the string read is passed.

    value

    String

    String read by the 2D code reader

    Permanent link

    liff.permanentLink.createUrlBy()

    Get the permanent link of any page in the LIFF app.

    Permanent link format:

    text
    https://liff.line.me/{liffId}/{path}?{query}#{URL fragment}
    

    Example

    Syntax

    javascript
    liff.permanentLink.createUrlBy(url);
    

    Arguments

    url

    String

    Required

    URL to get the permanent link. You can add any query parameter or URL fragment.

    Return value

    Returns a Promise object.

    Returns the string of the permanent link when Promise is resolved.

    Error responsee

    If the URL to get the permanent link doesn't begin with the URL specified for Endpoint URL on the LINE Developers Console , Promise will be rejected and LiffError will be returned.

    For example, if the URL to get the permanent link (e.g. https://example.com/ ) is above Endpoint URL (e.g. https://example.com/path1?q1=v1 ), Promise will be rejected.

    liff.permanentLink.createUrl()

    liff.permanentLink.createUrl() may be deprecated in the next major version update

    Due to technical issues, liff.permanentLink.createUrl() may be deprecated in the next major version update. To get the permanent link of the current page, we recommend using liff.permanentLink.createUrlBy() .

    Gets the permanent link for the current page.

    Permanent link format:

    text
    https://liff.line.me/{liffId}/{path}?{query}#{URL fragment}
    
     
    推荐文章
    豁达的红烧肉  ·  XLSX.js 导出Excel demo - Mr. Hu - 博客园
    1 年前
    千年单身的稀饭  ·  使用 Docker Compose 快速构建 TiDB 集群 | PingCAP 文档中心
    2 年前
    直爽的乒乓球  ·  android 零星调试笔记 - 知乎
    2 年前
    犯傻的小笼包  ·  短视频软件开发,Android开发,使用Kotlin实现WebView - 知乎
    2 年前
    今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
    删除内容请联系邮箱 2879853325@qq.com
    Code - 代码工具平台
    © 2024 ~ 沪ICP备11025650号