LoginSignup
14
8

More than 3 years have passed since last update.

LIFF URLでクエリパラメータを使おうとするとliff.initが正常に動かなかった話

Posted at

概要

業務の中でLIFF URL(https://liff.line.me で始まるURL)にクエリパラメータを付与して処理を行う、というケースがありました。
そこで困ったことがあったので共有しようと思った次第です。

結論

LIFF URLにクエリパラメータを付ける場合、liff.initのあとにsetTimeoutなどのsleep処理を入れると動作する。(根本原因は不明です、、)

動作環境

LIFF: v2.4.1
クライアント: Nuxt.js(SPAモード)

LIFFでクエリパラメータを使えるようになった

LIFF v2.3.0からhttps://liff.line.me?hoge=hoge のようにLIFF URLに対してクエリパラメータを使えるようになりました。
詳しくは以下をご覧ください。
https://developers.line.biz/ja/docs/liff/opening-liff-app/

困る前のクライアントのソース

liffのSDKを使用するには「liff.init」という関数を実行する必要があります。
今回はNuxtを使用していたので、pluginsにliff.initを実行する関数を書いて実行しました。
この段階では正常に動作することが確認されました。

plugins/liffConfig.js
import liff from '@line/liff'
const liffConfig = async (_) => {

  await liff.init( { liffId:'xxxxxxxxxxxx' } )
}

export default liffConfig

困ったこと

要件の都合上、LIFF URLに対してクエリパラメータを付与してアクセスする必要があったため、LINE DevelopersコンソールでLIFF URLを作成しhttps://liff.line.me?hoge=hoge の形でアクセスしました。
するとliff.init前後の処理が無限ループされる現象が起きました。

原因を探す

liffのSDKはローカルホストでは動作しないため、chromeのデベロッパーツール等でデバッグすることが出来ません(ここが一番つらかった)。
そのため開発環境にひたすらalert関数を入れて、どこまで処理が走っているのか検証しました。

原因を発見(?)

alert関数を入れて打鍵しながらデバッグした結果、liff.init後のalertで数秒待ったのちに処理を続けると、以前と同様に動作することが確認できました。

plugins/liffConfig.js
import liff from '@line/liff'
const liffConfig = async (_) => {

  alert('initする前')
  await liff.init( { liffId:'xxxxxxxxxxxx' } )
  // 打鍵時にここで数秒待つと動いた、、、
  alert('initした後')
}

export default liffConfig

最終的に

数秒待ったのちに動作するのであれば、そのような処理を追加したら良いのでは?と思い、setTimeoutを使用してsleep処理を追加しました。
根本原因は不明ですが、動くものを目指すという意味ではとりあえず良しとしました。

plugins/liffConfig.js
import liff from '@line/liff'
const liffConfig = async (_) => {

  await liff.init( { liffId:'xxxxxxxxxxxx' } )
  await sleep(1000)
}
// setTimeoutをそのまま使うのはイケてないと思ったので、Promiseでラップしています。
const sleep = (msec) =>
  new Promise((resolve) => setTimeout(resolve, msec))

export default liffConfig

最後に

根本原因を突き止めれなかったのは悔しいですが、何とか動くものが出来て良かったのかなと思います。
少しでも同じ現象に出くわした方の助けになれれば幸いです。
こうしたほうが良いのではなどのコメントがあれば、ぜひよろしくお願いします!

14
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
8