[STATUS: ONLINE] 当サイトは要約付きのエンジニア向けFeedです。

TechDistill.dev

[DISCLAIMER] 当サイトの要約は正確性を保証しません。気になる記事は必ず原文を確認してください。
cd ..

【要約】【LIFF】「店舗コードが指定されていません」と出る → クエリパラメータが消える問題と解決法 [Qiita_Trend] | Summary by TechDistill

> Source: Qiita_Trend
Execute Primary Source

// Problem

LIFFアプリの開発者が、認証後にURLから店舗コード等のパラメータを取得しようとした際、値が取得できずエラーが発生する。リダイレクトの仕組みが原因で、パラメータが一時的に隠蔽されるためである。


  • 認証フローにおいて、元のクエリパラメータが liff.state 内に格納される。
  • この状態では、URL直下のクエリパラメータとして値が存在しない。
  • liff.init() 実行前にパラメータを取得しようとすると null が返る。
  • Next.jsの useSearchParams では、SDKによるURL書き換えを追従できない。

// Approach

開発者は、LIFF SDKの初期化完了を待機してからパラメータを取得する実装へと変更する。SDKがURLを元の状態に復元するタイミングを正確に捉える必要がある。


  • useEffect 内で await liff.init() を実行し、初期化を完了させる。
  • SDKによるURLの復元(解凍)が終わるまで、パラメータ取得処理を遅延させる。
  • Next.jsのフックではなく、window.location.search を用いて直接URLを読み取る。
  • これにより、SDKが書き換えた後の最新のクエリパラメータを確実に取得する。

// Result

実装を修正することで、リダイレクト後もクエリパラメータが正しく取得可能となる。これにより、認証フローに伴うデータ欠落エラーが解消される。


  • 認証後の店舗コード等のパラメータが、期待通りに取得できる。
  • Next.js環境下でも、SDKの挙動に左右されず安定した値の取得が可能になる。
  • 「パラメータが消える」という、LIFF特有の挙動に対する明確な回避策が得られる。

Senior Engineer Insight

> 外部SDKがURLを操作する際のライフサイクル管理は、実戦で頻出する課題である。本件は、SDKの初期化(liff.init)が単なる設定ではなく、URLの復元という副作用を伴うことを理解すべき事例だ。また、Next.jsのようなフレームワークの抽象化されたフックが、SDKによる直接的なDOM/URL操作と競合するリスクも示唆している。大規模開発では、SDKの仕様に基づき、フレームワークの機能に依存しすぎない低レイヤーなAPI(window.location等)を使い分ける判断が求められる。

[ RELATED_KERNELS_DETECTED ]

cd ..

> System.About()

TechDistillは、膨大な技術記事から情報の真髄(Kernel)のみを抽出・提示します。