LIFFのシェアをキャンセルしたのに成功表示?共有結果の正しい扱い方
この記事の結論
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される | ピッカーの表示前に問題が起きた | 共有画面を開けませんでした |
案内の文言は、実装時に検討する例です。「共有しました」は、相手が読んだ、申し込んだ、紹介が成立したという意味にはしません。キャンセルした人へエラー表示を出す必要もありません。送りたくない、相手を決められないといった判断も、自然に受け止められる画面にします。

図:共有ボタンの実装と、画面の成功表示を点検するための判断表です。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への送信テストや、自社サービスへの機能追加を行ったという記録ではありません。