わからない。
- 0
スマホの外部ブラウザでLIFFアプリにLINEログインしようとした際、LINEアプリがインストールされている端末では、LINEログインの画面がすぐに表示されて欲しい。
スマホの外部ブラウザでLIFFアプリにLINEログインしようとした際、LINEアプリがインストールされているにも関わらず、ログインの前に「LINEアプリが未インストール、もしくは、ユニバーサルリンクが正しく動作していません。メールアドレス・パスワードを入力してログインしてください。」というエラーメッセージがでる。 また、「LINEアプリでログイン」を押しても何も起こらない。 LINEアプリがインストールされている端末では、LINEログインの画面がすぐに表示されて欲しい。
const initializeForLIFF = async () => {
// 未初期化
if (!liff.id) {
await liff.init(
{
liffId: "my-liff-id",
},
async () => {
await liff.ready
const idToken = await getIdToken()
// ここからtokenを利用した処理
}
)
} else {
// 初期化済
const idToken = await getIdToken()
// ここからtokenを利用した処理
}
}
const initializeForExternal = async () => {
// 未初期化
if (!liff.id) {
await liff.init(
{
liffId: "my-liff-id",
},
async () => {
await liff.ready
// 外部ブラウザ・LINEブラウザの場合、loginが事前に必要
// https://developers.line.biz/ja/reference/liff/#get-id-token
liff.login({ redirectUri: location.href })
}
)
} else {
// 初期化済
if (liff.isLoggedIn()) {
const idToken = await getIdToken()
// ここからtokenを利用した処理
} else {
// 外部ブラウザ・LINEブラウザの場合、loginが事前に必要
// https://developers.line.biz/ja/reference/liff/#get-id-token
liff.login({ redirectUri: location.href })
}
}
}
const initialize = async () => {
try {
if (liff.isInClient()) {
// LIFFブラウザ
initializeForLIFF()
} else {
// 外部ブラウザ
initializeForExternal()
}
} catch (e) {
console.log('liff init error.')
console.log(e)
}
}
initialize()
ユーザーにLIFFアプリにログインしていただく際、ユーザーがliffブラウザで開いているかをliff.isInClient()で確かめ、liffブラウザで開いていない場合には、下記のドキュメントの「外部ブラウザでLINEログインを利用する場合」の項目にしたがい、liff.init()した後にliff.login()をするようにしました。 https://developers.line.biz/ja/docs/liff/developing-liff-apps/#liff%E3%82%A2%E3%83%95%E3%82%9A%E3%83%AA%E3%82%92%E9%96%8B%E7%99%BA%E3%81%99%E3%82%8B 上記実装後、LINEアプリをダウンロードしているiPhone、Android端末のブラウザ(ChromeおよびSafari)で、LIFFアプリにアクセスしたところ、 「LINEアプリが未インストール、もしくは、ユニバーサルリンクが正しく動作していません。メールアドレス・パスワードを入力してログインしてください。」というエラーメッセージが出て、メールアドレスとパスワードを入力しなければLINEログインの画面に進めません。 これではユーザーに取って非常に不便なため、LINEアプリをダウンロードしている端末であれば、メールアドレスとパスワードを入力せずとも、LINEログイン画面に遷移して欲しいと思っています。 これはLINE側で意図された挙動でしょうか。 でなければ、原因はなんでしょうか。
問題が発生した環境