LIFFで繰り返しログイン画面が表示されるバグに出会った時にやったこと


沼って数日間吹っ飛ばしたのでメモ。未来の誰かの時間を削減できると嬉しい。

事象

個人情報が含まれるので動画は投稿できないが、次のようなLINEのログイン画面が半無限に表示されるというバグ。("ログイン"を押してもすぐに再度 access.line.me にリダイレクトされる)("半"無限というのは何回もリトライするとタイミング次第でうまく行く時があるから)

再現条件

なんらか liff.init の時のURLとエンドポイントURL(もしくはエンドポイントURL + アクセス時に後ろについていたパス?)が違う場合に発現する模様です。(正直LIFFのSDK読み込んだわけではないので断言はできない)(難読化されたものを読みたくない & 読めない)

私の場合はランディング後のページ切り替えが速過ぎたせいで再現したみたいでした。(ちなみになぜかAndroidでしか再現しませんでした)
私が今開発しているアプリでは / にアクセスした後、ログイン状態によって /signin のようなパスに切り替えていました。

解決策

解決策のヒントはここに書いてありました。ありがたや
https://www.line-community.me/question/5e956551851f7402cd9699a2/line-app%E3%81%8B%E3%82%89liff-line-me%E3%82%92%E9%96%8B%E3%81%84%E3%81%9F%E5%BE%8C%E3%81%AB%E3%83%AA%E3%83%80%E3%82%A4%E3%83%AC%E3%82%AF%E3%83%88%E3%81%95%E3%82%8C%E3%82%8B

LIFFとして登録しているエンドポイントのURLと、
クエリパラメータが付いたURLを比較している行を発見しました。
相違している場合、locationを書き換えている模様です。
(クエリパラメータを付与している時点で100%相違します)

今回の私の事象に対しては、パスを書き換えずにコンポーネントを出し分けるようにしまして、そうすると無事再現しなくなりました。
上記が原因である場合、Androidだけでしか再現しないのが腑に落ちないのでもしかしたら別の原因かもしれないんですが、似たようなバグが出ている場合にお役に立てれば幸いです。