【LINE API】LIFFのAPIリファレンスからの実用例をピックアップ

## はじめに

### この記事の内容

この記事では、LINEのフロントエンドフレームワークであるLIFFについて、
公式ドキュメントのAPIリファレンスに基づいた実用例を紹介します。


### 参考文献
https://developers.line.biz/ja/reference/liff/

## 外部ブラウザでのLINEログイン対策: [liff.isLoggedIn()](https://developers.line.biz/ja/reference/liff/#is-logged-in) + [liff.login()](https://developers.line.biz/ja/reference/liff/#login)

以下のコードは、
ユーザーがLINEにログインしていないかつ非開発環境である場合、ログインを促す処理を行います。

LIFFブラウザでアプリを開くと、liff.init時に自動的にログインが実行されるので、通常はliff.login()は不要です。

ただし、外部ブラウザでLIFFアプリを開くと、
この処理がないとLINE IDトークンが取得できずAPIとの接続が断たれてしまう問題があったので、下記のように対策しました。

```ts:main.ts
async function init() {
  const LIFF_ID = import.meta.env.VITE_APP_LIFF_ID
  await liff.init({ liffId: LIFF_ID })

  if (!liff.isLoggedIn() && import.meta.env.MODE !== 'development') {
      liff.login()
     }

  createApp(App).use(router).mount('#app')
}

init()
```



## 友達に紹介ボタンの作成: [liff.shareTargetPicker()](https://developers.line.biz/ja/reference/liff/#share-target-picker) + [liff.isApiAvailable()](https://developers.line.biz/ja/reference/liff/#is-api-available) 


次に、友達に紹介ボタンを作成するコードを紹介します。
まずはLINE_FRIEND_URLという定数にシェアしたいLINEアカウントのURLを指定します。

このURLはLINE Official Account Managerから取得できます。

次に、shareFriendsという関数を定義しています。

この関数では、liff.isApiAvailable('shareTargetPicker') を使用してshareTargetPicker APIが利用可能かどうかを判定します。利用可能な場合、liff.shareTargetPickerを呼び出し、テキストメッセージを共有します。
テキストメッセージにシェアしたいLINEアカウントのURLを入れることによって、友達に紹介ボタンの機能を実装しています。







```vue:share-friends.vue
<script setup lang="ts">
import liff from '@line/liff'

const LINE_FRIEND_URL = "シェアしたいLINEアカウントの友達追加リンクのURL（LINE Official Account Managerから取得）"

const shareFriends = () => {
  if (liff.isApiAvailable('shareTargetPicker')) {
    liff
      .shareTargetPicker([
        {
          type: 'text',
          text: `サンプルLIFFアプリ を友だち追加できます\n${LINE_FRIEND_URL}
          `,
        },
      ])
      .catch(() => {
        alert("シェアターゲットピッカーの起動に失敗しました。少し時間をおいてから再度お試しください。")
      })
  } else {
    alert('申し訳ありませんが、このデバイスでは「シェアターゲットピッカー」が利用できません。他の方法で共有をお試しください。')
  }
}
</script>
<template>
  <div class="container">
    <h1>サンプルLIFFアプリ を友だちに紹介</h1>
    <div class="box">
      <h2>LINEでシェアする</h2>
      <button @click="shareFriends()" />LINEで友達にシェアする</button>
    </div>
  </div>
</template>

```

## 処理成功後に指定のLINEトークルームを開く方法

特定の処理（下記ではIDとプロフィールの紐付け）が成功した後に、指定した公式LINEアカウントのトークルームを開きたい場合、[LINE URLスキーム](https://developers.line.biz/ja/docs/messaging-api/using-line-url-scheme/#sharing-line-official-account)のURLをlocation.hrefに代入することで実現できます。

LINE公式アカウントを開くURLスキーム
```
https://line.me/R/ti/p/{Percent-encoded LINE ID}
```

```:.env
VITE_APP_MESSAGING_API_LINE_ID = %40076bwsmq
```

```vue:sample.vue
<script setup lang="ts">
import { onMounted } from 'vue'
import { useRoute } from 'vue-router'
import api from '@/api'

const route = useRoute()
const id: string = route.query.id

const MESSAGING_API_LINE_ID = import.meta.env.VITE_APP_MESSAGING_API_LINE_ID

onMounted(async () => {
  try {
    await api.profile
      .postId(id)
      .then(res => {
        //LINEのトークルームを開く
        location.href = `https://line.me/R/ti/p/${MESSAGING_API_LINE_ID}`
      })
      .catch(error => {
        console.error(error)
      })
  } catch (error) {
    alert(error)
  }
})
</script>

```

## 余談

LINE URLスキームを活用すれば、
さまざまな面白い組み合わせが考えられるなと思いました。

https://developers.line.biz/ja/docs/messaging-api/using-line-url-scheme/#page-title