วันนี้จะมาสอนวิธีการใช้ตัว LIFF (LINE Front-end Framework) กับ ReactJS โดยมี Ngrok เป็น tools เพื่อให้ localhost บนเครื่องของเราสามารถ online ได้
LIFF คือ เป็นแพลตฟอร์มสำหรับเว็บแอพที่ทำงานภายใน LINE Application
LIFF สามารถรับข้อมูลจากแพลตฟอร์ม LINE เช่น Line ID, ชื่อ, รูป แอป LIFF
มี Function ในการเรียกใช้ที่เด่น ๆ เช่น
วันนี้เราจะลองทำตัวที่ง่ายที่สุดก่อนนั้นก็คือ Getting the user’s profile โดย liff.getProfile()
ติดตั้ง Create React App คำสั่งเดียวก็ได้แล้วง่ายมาก
npm init react-app {project_name (เปลี่ยนได้ตามใจชอบ)}
npm init react-app line-liff
ต่อไปเปิดไฟล์ index.html ที่อยู่ในโฟรเดอร์ public และเพิ่ม script ลงไปไว้บน tag title เป็น SDK สำหรับการเรียกใช้งาน LIFF
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#000000" />
<meta name="description" content="Web site created using create-react-app" />
<link rel="apple-touch-icon" href="logo192.png" />
<link href="https://fonts.googleapis.com/css?family=Kanit&display=swap" rel="stylesheet">
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
<!-- line sdk -->
<script src="https://static.line-scdn.net/liff/edge/2.1/liff.js"></script>
<!-- line sdk -->
<title>line liff test</title>
</head>
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root"></div>
</body>
</html>
ไฟล์ App.js เขียนตามนี้เลยครับ
import React, { Component } from 'react';
const liff = window.liff;
class App extends Component {
constructor(props) {
super(props);
this.state = {
name: '',
userLineID: '',
pictureUrl: ''
};
}
componentDidMount = async() => {
await liff.init({ liffId: `${liffid}` }).catch(err=>{throw err});
if (liff.isLoggedIn()) {
let getProfile = await liff.getProfile();
this.setState({
name: getProfile.displayName,
userLineID: getProfile.userId,
pictureUrl: getProfile.pictureUrl,
});
}else{
liff.login();
}
}
render() {
return (
<div className="App">
<header className="App-header">
<div className="support">
<p>ชื่อ {this.state.name}</p>
<p>Line ID {this.state.userLineID}</p>
<img alt='pic' src={this.state.pictureUrl} />
</div>
</header>
</div>
);
}
}
export default App;
แต่เดี๋ยวก่อนแค่นี้เราจะดึงข้อมูลออกมาได้ไงในเมื่อเรายังไม่ได้ไปทำอะไรกับ LIFF เลย
ก่อนจะไปทำการเชื่อมต่อกับ LIFF ผมอยากให้ทุกคนทำตัวนี้ก่อนนั่นก็คือ Ngrok นั้นเอง
Ngrok คือ tools ที่ช่วยให้คนทั่วไป สามารถเข้าใช้งานเว็บหรือแอพพลิเคชั่นของเรา ผ่านเครื่องที่รันอยู่บน localhost ได้นั่นเอง
วิธีการติดตั้ง ngrok นั้นเราสามารถหาอ่านได้ตามบทความที่มีหนึ่งในพี่ของบริษัทเราได้ทำการเขียนบล็อกไว้แล้ว
การใช้งาน เนื่องจาก react นั้นตั้งเดิมจะอยู่ที่ port 3000 เราจะสั่งใช้งาน Ngrok ตามนี้
cd ~/{โฟรเดอร์ที่เราติดตั้ง ngrok}/
./ngrok http 3000
.
จะได้ตามนี้
http://61c22debe0d5.ngrok.io และ https://61c22debe0d5.ngrok.io คือ url ที่เราสามารถไปเปิดในเครื่องอื่นได้
จากนี้เราจะทำงานเชื่อมกับตัว Line LIFF ละ อย่างแรกที่ต้องทำคือให้มเข้าไปที่ลิ้งค์ https://developers.line.biz/en/
Login ด้วย Line ให้เรียบร้อยแล้วทำการสร้าง Providers
เมื่อสร้าง Providers เสร็จแล้วให้ทำการกดสร้าง Channel
ให้เลือกสร้าง Channel ที่เป็น Line Login
กรอกรายละเอียดต่าง ๆ ให้เรียบร้อย
เข้าไปที่เมนู LIFF แล้วกด Add
นำ url ของเราที่ได้จาก Ngrok ไปวางตรง Endpoint URL
นำ LIFF ID ไปใส่ไว้ใน ComponentDidMount ใน App.js
componentDidMount = async() => {
await liff.init({ liffId: `นำ LIFF ID มาใส่ตรงนี้` }).catch(err=>{throw err});
let getProfile = await liff.getProfile();
this.setState({
name: getProfile.displayName,
userLineID: getProfile.userId,
pictureUrl: getProfile.pictureUrl,
});
}
จากนั้นเราสามารถนำ url ตรง LIFF URL https://liff.line.me/{LIFF ID} ไปใช้งานได้เลย
หวังว่าผู้อ่านทุกท่านจะนำไปปรับใช้กับงานที่กำลังทำได้นะครับ
สำหรับคนที่ไม่เข้าใจสามารถไปอ่านต่อได้ที่ doc ของ Line Deverloper ได้เลย