LINE活用の基礎

LIFFのシェアをキャンセルしたのに成功表示?共有結果の正しい扱い方

小川 靖人文・小川 靖人元LINE社員・LIFE合同会社 代表
この記事の執筆者:元LINE株式会社でLINE公式アカウント活用支援チームの立ち上げを推進し、LINE Green Badge試験問題の作成にも関与。バディカダイレクト元COOとしてLINE中心の販売基盤を構築し、AI接客チャットボット「中野愛作」を開発。詳しいプロフィール →
#LIFF#シェアターゲットピッカー#LINE#画面設計
この記事は「LINE公式アカウント完全ガイド」の一部です。全体像はこちらから →

この記事の結論

LIFFのshareTargetPickerはキャンセルでもPromiseがresolveされます。送信成功・取りやめ・エラーの分け方と、取得できない送信先情報、共有前後の案内を解説します。

最終更新:2026年10月9日

LIFFのシェアターゲットピッカーでは、ユーザーが送らずに画面を閉じても、Promiseはresolveされます。resolveだけで「共有しました」と表示すると、キャンセルを成功と取り違えます。戻り値のstatusがsuccessか、値がないか、処理がrejectされたかを分けて表示してください。

紹介リンクやイベント案内をLINEで共有できる画面を作る事業者と、実装担当者向けに、共有前後の判断を整理します。企業が公式アカウントから配信するMessaging APIの送信処理とは異なり、ここでは利用者が相手を選ぶliff.shareTargetPicker()を扱います。

共有画面を閉じたあとに、3つの結果を区別する

LINE DevelopersのAPIリファレンスが示す戻り値に合わせて、案内を分けます。

処理の結果確認できること画面に出す案内の例
resolveされ、status: "success"の値があるメッセージ送信の成功共有しました
resolveされ、値がない送信前に利用者がキャンセルした共有せずに戻りました
rejectされるピッカーの表示前に問題が起きた共有画面を開けませんでした

案内の文言は、実装時に検討する例です。「共有しました」は、相手が読んだ、申し込んだ、紹介が成立したという意味にはしません。キャンセルした人へエラー表示を出す必要もありません。送りたくない、相手を決められないといった判断も、自然に受け止められる画面にします。

LIFFのシェア結果を分ける判断図。送信先の選択画面から戻ったら、statusがsuccessなら送信成功、値がなければキャンセル、rejectなら表示前のエラー。送信成功でも相手の既読や申込みは未確認であり、送信先や人数を取得できる前提で設計しない。

図:共有ボタンの実装と、画面の成功表示を点検するための判断表です。3つの結果を同じ「完了」にまとめないでください。

図解画像を開く(保存用)

成功、キャンセル、エラーをコードでも分ける

次は結果の扱いを説明する最小例です。showResultはアプリ側で用意する画面表示の関数で、LIFFの標準機能ではありません。送信するURLも、実装時に正しい案内先へ置き換えます。

try {
  const result = await liff.shareTargetPicker([
    {
      type: "text",
      text: "イベントの案内です。 https://example.com/event",
    },
  ]);

  if (result?.status === "success") {
    showResult("共有しました");
  } else {
    showResult("共有せずに戻りました");
  }
} catch (error) {
  showResult("共有画面を開けませんでした。案内をこの画面で確認できます。");
}

この例は、初期化と利用条件の確認を終えた後の処理です。共有ボタンを押してから結果が返るまで再操作を受け付けないなど、重ねて共有画面を開かない設計も必要になります。公式リファレンスはコールバック内のalert()が一部端末で正しく動作しない注意を示しているため、結果は通常の画面内表示で返す方法を検討してください。

開けないときは、利用条件から確認する

公式には、利用者がログインしていることと、LINE Developersコンソールでシェアターゲットピッカーが有効であることが使用条件です。LIFFの開発ガイドには、チャネルごとの同意と有効化の手順があります。担当者が内容を確認し、権限のある人が設定してください。

LIFFを初期化してからliff.isApiAvailable()の引数に"shareTargetPicker"を指定し、利用可能か確認します。使えない場合は、イベントの内容をこの画面で読めるようにするなど、共有をしなくても目的を果たせる入口を残します。利用できない理由を、相手の操作ミスに決めつけないことが大切です。

スマートフォンの外部ブラウザーでは、LINEへのログイン済みでも、共有時にメールアドレスのログイン画面が出る場合があります。公式はSSOのセッションが必要で、自動ログインではそのセッションが発行されないと説明しています。通常のログイン状態だけで共有画面の表示を保証しないようにします。ログインを繰り返す問題全体は、LIFFのログインループの確認も参照してください。

送信先や人数を知っている前提にしない

ピッカーでは、グループ・友だち・トークから相手を選べますが、オープンチャットは対象外です。LINE公式アカウントは「友だち」欄には出ず、一定期間内にやり取りした「トーク」欄の対象になる場合があります。選べる場所を説明する際も、すべての友だちが必ず表示されるとは案内しません。

共有先の相手や送信人数をアプリが取得できる仕組みとして扱わないでください。公式は送信人数の取得・提供を行わないと明記し、成功の戻り値にも宛先一覧はありません。「誰に送ったかを確認したので紹介特典を付ける」という設計は、成功表示だけでは成立しません。

また、isMultiple: falseは選択画面を1人の友だちに絞る設定で、共有全体が一度きりになる保証ではありません。呼び出し直しや、受け取ったメッセージの再共有も考える必要があります。特典がある場合は、共有の操作と、別に確認する申込み・利用の条件を分けます。

公開前は、送らなかった人の画面も試す

テスト送信は、承認したテスト相手だけで行います。まず画面を閉じる操作を試し、成功表示や特典付与が走らないかを確認してください。その後、許可された送信先での成功、利用できない環境、外部ブラウザーのログインを順に確かめます。

共有を途中でやめても、読んでいた内容へ戻れるか。開けなかった場合も、案内を別の画面へ探しに行かず確認できるか。この2点を先に決めると、紹介を増やすための機能が、お客様を困らせる操作になりにくくなります。

※仕様の確認日:2026年10月9日。この記事のコードは説明用で、実際のLINEへの送信テストや、自社サービスへの機能追加を行ったという記録ではありません。

この記事に関連するサービス

関連記事