あくまでユーザーが送信したい友達を指定してその友達にLINEプラットフォームがユーザーに代わってメッセージを送信するだけなので、誰が送信したか
はLIFFでは取得できません。何人に送信したか
は正確に取れませんがユーザーが何回送信したか
はデータベースなどで送信が成功されるたびにカウントするという妥協案になるかと思います。
また、Share Target PickerはMessaging APIではないので、公式アカウントをフォローしているかどうかを確認することはできません。ただ、フォローしてなければ友だち追加するというアプローチをかけてみるというのが現実的かと思います
前提・実現したいこと
shareTargetPicker を利用してほかのユーザーに 公式アカウントを共有するアプリケーションを作成しています。 その際、重複して共有されることを避けたいため ・誰に送信されたか ・何人に共有されたか ・送信された相手は公式アカウントをフォローしていないか を確認したいです。
発生している問題・エラーメッセージ
shareTargetPickerの戻り値では共有人数を取得することができません。 また、共有されたユーザーを検知することもできません。
該当のソースコード
<!DOCTYPE html>
<html lang="jp"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>********</title> <script charset="utf-8" src="https://static.line-scdn.net/liff/edge/2/sdk.js"></script> </head> <body> </body> <script> // LIFFの初期化を行う liff.init({ // 自分のLIFF ID(URLから『https://liff.line.me/』を除いた文字列)を入力する liffId: "*****************"
}).then(() => { // 初期化完了. 以降はLIFF SDKの各種メソッドを利用できる
if (!liff.isLoggedIn()) {
liff.login();
}
// 利用者のLINEアカウントのプロフィール名を取得
liff.getProfile().then(profile => {
// プロフィール名
const name = profile.displayName
// HTMLに挿入
// document.querySelector("#name").innerText = name
if (liff.isApiAvailable('shareTargetPicker')) {
liff.shareTargetPicker([
{
'type': 'text',
'text': '一緒に応援しよう!'
}
])
.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 {
const [majorVer, minorVer] = (liff.getLineVersion() || "").split('.');
if (parseInt(majorVer) === 10 && parseInt(minorVer) < 11) {
setMsg(t('メッセージ送信失敗'));
} else {
setMsg(t('友だち未選択'));
}
}
}
}).catch(function (error) {
// something went wrong before sending a message
console.log('something wrong happen')
})
}else {
setMsg(t('バージョン未対応'));
}
})
})
</script>
</html>
試したこと
動作確認で共有画面に遷移したことまでしか試していません。
補足情報(FW/ツールのバージョンなど)
Similar posts