平常使用 LINE 傳訊息的時候只能傳送文字、圖片、語音訊息,只有在使用 LINE 特定功能(轉帳、爬梯子、送禮物) 才可以用你的名義傳送圖文訊息給朋友。除非你用的是 LINE@ 官方帳號,不然是不可能把你想要傳的圖文訊息分享給朋友的~
其實有一個方法能夠破解無法用個人帳號傳送圖文訊息的都市傳說,那就是 Share Target Picker。他可以從 LIFF 中選擇訊息的分享目標並發送指定訊息,而且可以直接從外部瀏覽器選擇要分享的好友或群組分享訊息,不用在 LINE 裡面開啟。
要使用 Share Target Picker 要申請一組 LIFF ID,在第四天的文章有教學。需要注意申請的 LINE Channel 要把 shareTargetPicker 的權限打勾,不然就沒辦法使用 shareTargetPicker 的方法分享訊息:
⬆ 這個要打勾
用 shareTargetPicker 傳送訊息:
liff.shareTargetPicker(messages, options);
messages 代表傳送訊息的種類,有下列幾種:
如果要傳送純文字訊息,就要把 type 指定為 "text",如果要指定其他種類的訊息可以看 Message Objects網站找出你要傳的訊息 type。
shareTargetPicker 可以根據你想傳送的訊息種類去指定要傳送的目標,假如要傳送文字訊息可以這樣寫:
liff.shareTargetPicker([
{
type: "text",
text: "this is a test message"
}
])
.then(
alert("ShareTargetPicker was launched")
).catch(function(res) {
alert("Failed to launch ShareTargetPicker")
})
shareTargetPicker 執行後會回傳一個 Promise 物件,只要傳送失敗或是臨陣取消都會執行 catch 區塊的程式碼(你看用到了吧!不知道 Promise 是什麼的回去看第19天的文章)。
如果想測試 shareTargetPicker 的結果可以去 LIFF Playground 玩玩看。
而這個範例要傳送的圖文訊息的 type 是 flex
,因為圖文訊息的結構很複雜,所以會增加 altText 和 contents 參數,altText 是在傳圖文訊息時對方會收到的訊息文字提示;contents 是圖文訊息的內容:
liff.shareTargetPicker([
{
"type": "flex",
"altText": name + "送禮物來囉!",
"contents": {
"type": "bubble",
"size": "kilo",
"hero": {
"type": "image",
"url": "https://img.onl/olwxWE",
"size": "full",
"aspectRatio": "18:19",
"action": {
"type": "uri",
"label": "action",
"uri": "https://www.google.com.tw/?hl=zh_TW"
}});
這個內容我只寫了一小部分(因為完整的內容太長了),明天再教怎麼無痛做出要傳的訊息模板。