見出し画像

Nuxt3 LIFFアプリ開発 SDKを導入して初期化するまで

どもも、ダメおです。

公式ドキュメントに書いてある内容がほぼなので、別で記事をまとめる必要もありませんが、載せておきます。

LIFFとは

LINE Front-end Frameworkの略で、LINEが提供しているウェブアプリプラットフォームです。LINE内のブラウザとは別で、LINEのLIFFブラウザという中で起動するらしい!
LINEアプリもLIFFの一種。

本題のLIFF SDK

LIFF SDKは読んで字のごとく、LIFFの機能を利用するための SDKです。
公式から配信されていて、npmコマンドやyarnコマンドでインストールできます。

では早速インストール

// npm の場合
npm install @line/liff

// yarn の場合
yarn add @line/liff

だけです。

初期化する

LIFF SDKを利用するには、SDKを初期化しなければいけません。

liff.init({ liffId: <developerページ内のLiffId> })

だけです。

ちなみにこの liff.init は非同期処理で、Promise なので

liff.init({ liffId: <liff id>})
  .then(res => {
    // init成功時の処理
  })
  .catch(err => {
    // init失敗時の処理
  })

// または

liff.init({ liffId: <liff id> }, successCallback, errorCallback)

てな感じで成功/失敗のコールバック受け取ることができます。

成功/失敗時でレスポンス返したければ

new Promise((resolve, reject) => {
  liff.init({ liffId: <liff id>})
    .then(res => {
      return true
    })
    .catch(err => {
      return false
    })
})

てな感じで返せます。

成功したときにページ遷移したいとか、useStateで値設定したいとかなら liff.init とthen/catch で対応できますね。

ここまではNuxt3正直関係なく、LIFF SDK共通ですが
これをNuxt3に実装するとすると composables に入れるか、plugins に作成するかってところですかね。またはLIFFブラウザ以外の起動を許可しないとか、それによってページ等変えるなら middleware に作成になるのかなー。と思います。

// composables/useLiff.ts
import liff from '@line/liff'

export const useLiff = () => {
  return liff.init({ liffId: <liff id> })
}

// or

export const useLiff = () => {
  return new Promise((resolve, reject) => {
    liff.init({ liffId: <liff id> })
      .then(res => {
        resolve({
          data: ref(true)
        })
      })
      .catch(err => {
        console.log(err)
        reject({
          data: null,
          error: createError({
            statusCode: err.code,
            statusMessage: err.message
          })
        })
      })
  })
}

OR

// plugins/initLiff.client.ts
import liff from '@line/liff'

export default defineNuxtPlugin(async nuxtApp => {
  await liff.init({ liffId:: <liff id> })
    .then(res => {

    })
    .catch(err => {

    })
})

OR

// middleware/initLiff.ts

export default defineNuxtRouteMiddleware((t, f) => {
  liff.init({ liffId: <liff id> })
    .then(res => {
      // init成功
    })
    .catch(err => {
      // init 失敗
      console.log(err)
      if (t.path != '/notLiffApp') {
        navigateTo('/notLiffBrowser')
      }
    })
})

とかですかね?
相変わらずメモ用コンテンツ。まぁでも どこかの、だれかの参考になりましたら幸いです。


この記事が気に入ったらサポートをしてみませんか?