今回のプロジェクトについて
利用しているLIFFの機能
- liff.login()
- liff.sendMessages()
- liff.shareTargetPicker()
- liff.isInClient(), liff.isLoggedIn()
ファイル構成
今回は ./public
以下のファイルを触っていきます
-
./public/index.html
→ メインのファイル -
./public/liff.js
→ liff 固有の関数達 -
./public/mode.js
→ モード切り替え
01. LINE Login をみてみよう
./public/liff.js
の、liff.login() で LINE ログインをしています。setLiffClient で、liff.init
をオーバーラップすることで、引数の function の中で、 liff が使えるようにしています。
window.addEventListener('load', async () => {
const liffClient = await setLiffClient()
liffClient(() => { if(!liff.isLoggedIn())liff.login(); })
getProfile(liffClient)
});
const setLiffClient = () => {
return (func) => { liff.init({ liffId: LIFF_ID }).then(func) }
}
// * setLiffClient の使い方
// const liffClient = await setLiffClient()
// liffClient(async () => {
// const profile = await liff.getProfile()
// ...
// })
02. プロフィールにユーザー名を表示してみよう
コメントアウトされている部分のコメントを外します。
const getProfile = async (liffClient) => {
liffClient(() => {
liff.getProfile().then((profile) => {
// 02. プロフィールにユーザー名を表示してみよう
// document.getElementById('user-name').innerText = profile.displayName
document.getElementById('icon').src = profile.pictureUrl
userId = profile.userId
})
})
}
ヘッダーにユーザー名が表示されます。
03. 投票後のメッセージを変更してみよう
投票後に、 ユーザーが投票しました
とメッセージをしています。sendMessageを拡張してみましょう。
const submitVoteEvent = async () => {
...
// 投票したことをLINEメッセージで送る
const liffClient = await setLiffClient()
liffClient(async () => {
// LINE の inbrowser でない場合はメッセージが送れない
if(liff.isInClient()) {
const profile = await liff.getProfile()
await sendMessage([
{
'type': 'text',
'text': `${profile.displayName}が投票しました`
}
])
}
})
}
03-01. Messageを複数メッセージしてみましょう
現在は、 sendMessage に 1つのメッセージが表示されていますが、もう一つ追加してみましょう。
ヒント
sendMessage が配列になっています。メッセージを追加することで、複数メッセージを送信できます。
await sendMessage([
{
'type': 'text',
'text': `${profile.displayName}が投票しました`
},
{
'type': 'text',
'text': '投票ありがとうございます'
}
])
03-02. スタンプを送信してみよう
ヒント
sticker オブジェクトを追加してみましょう
await sendMessage([
{
'type': 'text',
'text': `${profile.displayName}が投票しました`
},
{
"type": "sticker",
"packageId": "11537",
"stickerId": "52002735"
}
])
04. シェアメッセージを変更してみよう
シェアボタンを押すと、 shareTargetPicker を利用して、友達に LINE Message をシェアすることが可能です。
const submitShareEvent = () => {
const liffClient = setLiffClient()
liffClient(async () => {
const question = document.getElementById('question').innerText
liff.shareTargetPicker([
// ↓ Button Message などのテンプレートメッセージは、PC版では表示されない
buttonMessage(question),
// ↓ Flex Message は、PC版でも表示される
// flexMessage(question)
])
})
}
const buttonMessage = (question) => {
return {
"type": "template",
"altText": "アンケートリクエストが送られました",
"template": {
"type": "buttons",
"imageAspectRatio": "rectangle",
"imageSize": "cover",
"imageBackgroundColor": "#FFFFFF",
"title": "アンケートリクエスト",
"text": `「${question}」のアンケートリクエストが来ています`,
"actions": [
{
"type": "uri",
"label": "投票する",
"uri": liff.permanentLink.createUrl()
},
{
"type": "uri",
"label": "ツイートする",
"uri": TWEET_URL
}
]
}
}
}
04-01. actionを変えてみよう
buttonMessage では、 uri action を送信しています。uri action 以外にも多様な action があるので、触ってみましょう!
actionについて / LINE URLスキーム
- カメラを開く https://line.me/R/nv/camera/
- GPSを送る https://line.me/R/nv/location/
- 公式アカウントのシェア https://line.me/R/ti/p/@LINE_ID
- LINE公式アカウントのプロフィール https://line.me/R/home/public/profile?id=LINE_ID
- 連携アプリ一覧 https://line.me/R/nv/connectedApps
- スタンプショップのホーム https://line.me/R/nv/stickerShop
ヒント
const buttonMessage = (question) => {
...
"actions": [
{
"type": "uri",
"label": "投票する",
"uri": liff.permanentLink.createUrl()
},
{
"type": "uri",
"label": "連携アプリ一覧をみる",
"uri": 'https://line.me/R/nv/connectedApps'
}
]
...
}
☕️ 🍰 ここまでできたらひと休憩 ☕️ 🍰
ここまでの感想をツイートしてみましょう!
FlexMessage に変更してみよう
05. template を Button からButton Message では、PC版では、「スマートフォンでのみ確認可能なメッセージです。」と表示されます。
しかし、FlexMessageを使うことで、PC版でも確認することができます。
FlexMessageを使ったほうが良いです。
buttonMessage(question)
をコメントにして、 flexMessage(question)
をコメントアウトしてみましょう。
const submitShareEvent = () => {
...
liffClient(async () => {
const profile = await liff.getProfile()
const question = document.getElementById('question').innerText
liff.shareTargetPicker([
// ↓ Button Message などのテンプレートメッセージは、PC版では表示されない
buttonMessage(question),
// ↓ Flex Message は、PC版でも表示される
// flexMessage(question)
])
})
}
Flex Messageについての記事がを貼っておくので、興味があればどんどん触ってください