# ニュース: LIFF v2.3.0をリリースしました

LIFF v2.3.0をリリースしました

LIFF v2.3.0をリリースしました。 LIFF v2.3.0における変更点は以下のとおりです。

# LIFFのエンドポイントURLでパスおよびクエリパラメータを利用できるようになりました

以前お知らせしたとおり、LINE Developersコンソールの[エンドポイントURL]に入力したパス(/path)およびクエリパラメータ(?key=value)を、LIFFアプリで利用できるようになりました。

設定を変更するまでは既存のLIFFアプリへの影響はありません

既存のLIFFアプリで新仕様を利用する場合は、LINE Developersコンソールで設定を変更する必要があります。設定を変更するまでは、仕様変更の影響を受けません。

LIFF URLの追加情報の処理方法

新仕様を利用するには、LIFFアプリの[LIFF URLの追加情報の処理方法]を「連結」に設定します。
LIFFアプリが新仕様に対応していない場合は、設定を変更しないでください。「置換(後方互換性モード)」に設定されている場合は、仕様変更の影響を受けません。

詳しくは、『LIFFドキュメント』の「LIFFアプリを開く」を参照してください。

liff.permanentLink.createUrl()メソッドを実行したとき、現在のページのURLが[エンドポイントURL]に指定したURLで始まらない場合に、例外が発生します。

try {
    const myLink = liff.permanentLink.createUrl()
}
catch (err) {
    console.log(err.code + ':' + err.message);
}

特に[LIFF URLの追加情報の処理方法]が「置換(後方互換性モード)」のときは、[エンドポイントURL]に指定したパスやクエリパラメータ(/2020campaign/?key=value)が、2次リダイレクト先に含まれないことがあります。 その場合、liff.permanentLink.createUrl()メソッドが上記の条件を満たすため、パーマネントリンクを取得できません。

詳しくは、『LIFF v2 APIリファレンス』の「liff.permanentLink.createUrl()」を参照してください。

# liff.shareTargetPicker()の送信結果を取得できるようになりました

2020年4月21日にお知らせしたとおり、liff.shareTargetPicker()の送信結果を取得できるようになりました。

仕様変更前は、ターゲットピッカーを表示できたかどうかをLIFFアプリが確認できましたが、その後、メッセージを送信できたかどうかは確認できませんでした。

仕様変更後は、メッセージを送信できたかどうかを確認できるため、ユーザーの状況に合わせて、LIFFアプリの挙動を変更するように実装できます。

注意
  • この仕様変更により、liff.shareTargetPicker()の戻り値に変更があります。
  • ユーザーがLINE 10.3.0~LINE 10.10.0を使用している場合は、この仕様変更の影響を受けません。

# 仕様変更に対応するサンプルコード

以下のように、ユーザーが使用しているLINEバージョンによって戻り値を処理することをお勧めします。

if (liff.isApiAvailable('shareTargetPicker')) {
  liff.shareTargetPicker([
    {
      'type': 'text',
      'text': 'Hello, World!'
    }
  ])
    .then(function (res) {
      if (res) {
        // succeeded in sending a message through TargetPicker
        console.log(`[${res.status}] Message sent!`)
      } else {
        const [majorVer, minorVer] = (liff.getLineVersion() || "").split('.');
        if (parseInt(majorVer) == 10 && parseInt(minorVer) < 11) {
          // LINE 10.3.0 - 10.10.0
          // Old LINE will access here regardless of user's action
          console.log('TargetPicker was opened at least. Whether succeeded to send message is unclear')
        } else {
          // LINE 10.11.0 -
          // sending message canceled
          console.log('TargetPicker was closed!')
        }
      }
    }).catch(function (error) {
      // something went wrong before sending a message
      console.log('something wrong happen')
    })
}

詳しくは、『LIFF v2 APIリファレンス』の「liff.shareTargetPicker()」を参照してください。

# liff.sendMessages()で返されるエラーコードを追加しました

liff.sendMessages()に不正なパラメータを渡した場合、LiffErrorのエラーコードで400が返されていました。仕様変更後は、400の代わりにINVALID_ARGUMENTが返されます。

なお、エラーコードによって処理を分岐していない場合は、仕様変更の影響を受けません。

仕様変更前:

liff.sendMessages([
  {
    type: 'text',
    text: 'Hello, World!'
  }
])
  .then(() => {
    console.log('message sent');
  })
  .catch((err) => {
    // Returns "400" if invalid arguments are passed
    if (err.code === "400") {
      console.log("message format error!");
    }
  });

仕様変更後:

liff.sendMessages([
  {
    type: 'text',
    text: 'Hello, World!'
  }
])
  .then(() => {
    console.log('message sent');
  })
  .catch((err) => {
    // Returns "INVALID_ARGUMENT" if invalid arguments are passed
    if (err.code === "INVALID_ARGUMENT") {
      console.log("message format error!");
    }
  });

詳しくは、『LIFF v2 APIリファレンス』の「エラー内容」を参照してください。