LIFF เกิดขึ้นมาเพื่อเติมเต็มการใช้งาน LINE Chatbot ในเรื่องของการแสดงผล ที่บางอย่าง LINE Chatbot ไม่สามารถทำได้ เช่น การสร้างฟอร์มลงทะเบียนที่ซับซ้อน หรือการแสดงสินค้าจำนวนมากๆในห้องแชท โดย LIFF มาพร้อมกับเทคโนโลยีของเว็บ หรือเรียกให้เข้าใจง่ายๆว่า เป็นการสร้างเว็บในห้องแชทนั่นเอง
ฟีเจอร์ที่มีใน LIFF SDK ตั้งแต่ v2.19.0 เป็นต้นมา ที่ให้นักพัฒนาต่อยอดความสามารถให้ LIFF SDK ทำอะไรได้เพิ่มเติมมากกว่าฟังก์ชันพื้นฐานที่ทีม LIFF เตรียมมาให้ เช่นสร้าง plugin กับฟังก์ชันที่เราต้องเขียนประจำ หรือ สร้างและแชร์ plugin ที่ใช้ร่วมกันภายในทีม
ใน Codelab นี้คุณจะได้เรียนรู้และเข้าใจการพัฒนา LIFF Plugin สำหรับการคำนวนค่าดัชนีมวลกาย หรือ BMI แล้วติดตั้งเข้าไปใน LIFF SDK เพื่อเรียกใช้งานผ่าน LIFF Object แบบง่ายๆกัน
ใน Codelab นี้เราจะพัฒนา LIFF app ด้วย StackBlitz ซึ่งเป็น Editor แบบออนไลน์ที่ไม่ต้องติดตั้งโปรแกรมใดๆ และเราสามารถแชร์ URL ของโปรเจคให้กับผู้อื่นได้ โดยโปรเจคที่แชร์ จะอนุญาตให้ผู้อื่นเข้าถึงโค้ดทั้งหมด แต่จะไม่สามารถแก้ไขโปรเจคของเราได้
เมื่อคุณ Folk โปรเจคเรียบร้อยแล้ว คุณจะได้ชื่อโปรเจคและ URL สำหรับการใช้งานของคุณ ซึ่งการแก้ไขใดๆก็ตามจากนี้ไปจะถูกบันทึกเก็บไว้ใน StackBlitz
จุดเริ่มขบวนสำหรับการพัฒนาแอปพลิเคชันต่างๆบนแพลทฟอร์มของ LINE คือคุณจะต้องสมัครเป็น LINE Developer ก่อน
Provider คือ superset ของแอปทั้งหลายที่เราจะพัฒนาขึ้นรวมถึง LIFF app ด้วย โดยการสร้างเพียงให้ระบุชื่อของ Provider ลงไป ซึ่งอาจจะตั้งเป็นชื่อตัวเอง, ชื่อบริษัท, ชื่อทีม หรือชื่อกลุ่มก็ได้
Channel คือ subset ของ Provider โดยมีอยู่ 3 รูปแบบ คือ LINE Login, Messaging API และ Clova Skill
หลังจากที่คุณมี Provider และ Channel เรียบร้อยแล้ว ขั้นตอนต่อไปก็คือการสร้าง LIFF app โดยให้เลือก channel ที่สร้างขึ้นมา แล้วไปยัง tab ที่ชื่อว่า LIFF จากนั้นกด Add
เมื่อกด Add เสร็จเรียบร้อย คุณก็จะได้ LIFF URL มาแล้ว
ไปที่ไฟล์ index.html
ใน StackBlitz แล้ว Uncomment ตัว LIFF SDK ใน
<script src="https://static.line-scdn.net/liff/edge/2/sdk.js"></script>
index.js
ให้กำหนดชื่อของ LIFF Plugin ใน constructor()
ของคลาส BMIPlugin
constructor() {
this.name = "bmi";
}
context
เพื่อดึงค่าภาษาของผู้ใช้ และ option
เพื่อดึงค่า date ที่จะส่งมาจากการ activate เพื่อนำไปใช้กับ localDate()
และ return "ค่า" ซึ่งก็คือ today ใน install()
install(context, option) {
return {
today: this.localDate(context.liff.getLanguage(), option.date)
};
}
localDate()
ซึ่งอยู่ภายในคลาส BMIPlugin
สำหรับแปลง date ให้ตรงตามภาษาของผู้ใช้localDate(lang, date) {
const locale = (lang === "en")? "en-US": "th-TH";
return date.toLocaleDateString(locale, {
year: '2-digit',
month: 'short',
day: 'numeric',
});
}
index.js
ให้เพิ่มโค้ดด้านล่างนี้เพื่อ activate ตัว LIFF Plugin// Activate LIFF Plugin
liff.use(new BMIPlugin(), { date: new Date()});
index.js
ให้เพิ่มโค้ดด้านล่างนี้เพื่อแสดง date ตามภาษาของผู้ใช้// Display locale date
h5Element.innerHTML = liff.$bmi.today;
วิธีการเปิด LIFF app ให้เราเอา LIFF URL ที่ได้จากข้อ 4 ซึ่งมีลักษณะแบบนี้ https://liff.line.me/YOUR-LIFF-ID
หลังจากที่เราได้สร้าง BMIPlugin
และลองเรียกใช้ฟังก์ชันในการแปลง date ให้ตรงตามภาษาของผู้ใช้กันไปแล้ว ขั้นตอนนี้เราจะมาสร้างฟังก์ชันสำหรับคำนวนค่า BMI ใน plugin กันต่อเลย
index.js
ให้เราเพิ่มโค้ดสำหรับการคำนวนค่า BMI นี้เข้าไปในฟังก์ชัน calculate()
ซึ่งอยู่ภายในคลาส BMIPlugin
calculate(height, weight) {
const heightInMeter = height / 100;
const bmi = (weight / (heightInMeter * heightInMeter)).toFixed(2);
let result = "none";
if (bmi < 18.5) {
result = "XS";
} else if (bmi >= 18.5 && bmi < 23) {
result = "S";
} else if (bmi >= 23 && bmi < 25) {
result = "M";
} else if (bmi >= 25 && bmi < 30) {
result = "L";
} else if (bmi >= 30) {
result = "XL";
}
return result;
}
install()
ให้เพิ่มการ return ฟังก์ชัน calculate ในชื่อตัวแปร cal
เข้าไป install(context, option) {
return {
today: this.localDate(context.liff.getLanguage(), option.date),
cal: this.calculate
};
}
index.js
ให้เพิ่มโค้ดชุดนี้ลงไปที่บรรทัดล่างสุดbtnElement.onclick = () => {
h2Element.innerHTML = liff.$bmi.cal(heightElement.value, weightElement.value);
}
หลังจากที่เราได้ลองเรียกใช้งาน LIFF Plugin ก่อนการ initial ตัว LIFF app ไปแล้ว คราวนี้เราจะมาลองเรียกใช้งาน LIFF Plugin หลังจากการ Initial กันบ้าง
index.js
ให้เราเพิ่มฟังก์ชัน main()
พร้อมเรียกใช้งาน โดยภายในฟังก์ชันจะมีคำสั่ง init ที่ให้เราระบุ LIFF ID ที่ได้จากขั้นตอนที่ 4 ลงไปconst main = async() => {
await liff.init({liffId: "YOUR-LIFF-ID"});
}
main();
main()
หลัง initial ตัว LIFF app แล้ว ให้เราเพิ่มโค้ดเพื่อตรวจสอบสถานะการ Log in โดยกรณี Log in แล้วจะให้ดึงข้อมูลผู้ใช้ออกมา แต่หากยังไม่ Log in จะเรียกคำสั่ง liff.login()
เพื่อพาผู้ใช้ไป Log in const main = async() => {
await liff.init({liffId: "YOUR-LIFF-ID"});
// Check login status
if (liff.isLoggedIn()) {
// Get user profile
const profile = await liff.getProfile();
} else {
liff.login();
}
}
index.js
ให้เพิ่มโค้ดด้านล่างนี้เข้าไปใน greeting()
ซึ่งอยู่ภายในคลาส BMIPlugin
greeting(lang, profile) {
const prefix = (lang === "en")? "Hello": "สวัสดี";
return `${prefix} ${profile.displayName}!`;
}
install()
ให้เพิ่มการ return ฟังก์ชัน greeting ในชื่อตัวแปร greet
เข้าไปinstall(context, option) {
return {
today: this.localDate(context.liff.getLanguage(), option.date),
cal: this.calculate,
greet: this.greeting
};
}
const main = async() => {
await liff.init({liffId: "YOUR-LIFF-ID"});
// Check login status
if (liff.isLoggedIn()) {
// Get user profile
const profile = await liff.getProfile();
h1Element.innerHTML = liff.$bmi.greet(liff.getLanguage(), profile);
} else {
liff.login();
}
}
ยินดีด้วยครับ ถึงตรงนี้คุณก็มี LIFF app ตัวแรกเป็นของคุณเองแล้ว!!!