5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【LINE】LIFFアプリを試してみる~Webからトークにメッセージを送信する~

Last updated at Posted at 2020-03-22

概要

  • 前回までの記事でLIFFアプリを作ってLINEのトーク上で実行しユーザ情報の取得とトークへのメッセージ送信をやってみました
  • ちょうど今月(2020年3月)Share Target Pickerという機能がリリースされたので試してみます
  • Share Target Pickerを使うと送信先のトークを選択することができるようになるためLIFFアプリをブラウザで開いたときにもトークへのメッセージ送信ができるようになります

設定

スクリーンショット 2020-03-23 0.55.09.png

実装

  • 前回の記事でメッセージを送信する部分でLIFF APIのsendMessages()を使用していました
    • この状態でLIFFアプリをブラウザから開いてメッセージ送信しようとするとエラーが発生して送れません
src/hooks/useLiff.js
// 抜粋
  const sendMessage = async ({ text }) => {
    setLoading(true);
    try {
      // メッセージを送信
      liff.sendMessages([{ type: 'text', text }]);
      console.log(`success send message: ${text}`);
    } catch (error) {
      console.log({ error });
      setError(error);
    } finally {
      setLoading(false);
    }
  };
  • これをブラウザから開いている場合はShare Target Pickerを表示するようにして送信先を選べるようにします
    • isInClient()でLINE上で開いているかどうか判定することができます
    • shareTargetPicker()でShare Target Pickerを表示することができます
src/hooks/useLiff.js
// 抜粋
  const sendMessage = async ({ text }) => {
    setLoading(true);
    try {
      // LINEアプリ上で開かれているかを判定
      liff.isInClient()
        // LINEアプリ上なら今まで通り開いているトークに送信
        ? liff.sendMessages([{ type: 'text', text }])
        // ブラウザなら送信先選択画面を表示
        : liff.shareTargetPicker([{ type: 'text', text }]);
      console.log(`success send message: ${text}`);
    } catch (error) {
      console.log({ error });
      setError(error);
    } finally {
      setLoading(false);
    }
  };
  • ブラウザから利用する場合はLINEへログインさせておく必要があるのでその実装も追加しておきます
  • LIFFのinit処理をするメソッドを修正します
src/hooks/useLiff.js
  const initLiff = async ({ liffId }) => {
    setLoading(true);
    try {
      await liff.init({ liffId });
      console.log('success liff init');
      // ログインチェック処理を追加
      if (liff.isLoggedIn()) {
        console.log('logged in!');
      } else {
        console.log('not logged in');
        // LINEの提供するログイン画面へリダイレクトさせる(完了するともとのページにリダイレクトされる)
        liff.login();
      }
    } catch (error) {
      console.log({ error });
      setError(error);
    } finally {
      setLoading(false);
    }
  };
  • これでブラウザからアクセスした場合のログイン処理にも対応できるようになりました

動作確認

  • ブラウザからアクセスして動作確認してみます
  • メッセージの送信ボタンを押すとどのトークに送信するか選択する画面が表示されます
  • LINEにアクセスして確認するとちゃんと送信することができています

share-target-picker-low.gif

まとめ

  • Share Target Pickerを使うとブラウザからLIFFアプリにアクセスした場合でもメッセージ送信などLINEとの連携ができるようになりました
  • この機能を使えばLIFFアプリの活用のシーンが広くなりそうですね
5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?