33
www.itsci.mju.ac.th/sayan BACKEND AS A SERVICE (BaaS) : FIREBASE SAYAN UNANKARD 8

BACKEND AS A SERVICE - Information Technology Firebase.pdf · • ภายในเครื่องมือถือAndroid เรียกว่า local database ... iOS, Java,

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: BACKEND AS A SERVICE - Information Technology Firebase.pdf · • ภายในเครื่องมือถือAndroid เรียกว่า local database ... iOS, Java,

www . i t s c i .m ju . ac . t h / sayan

BACKEND AS A SERVICE (BaaS) : FIREBASE

SAYAN UNANKARD

8

Page 2: BACKEND AS A SERVICE - Information Technology Firebase.pdf · • ภายในเครื่องมือถือAndroid เรียกว่า local database ... iOS, Java,

ข้อมูลอยู่ที่ไหนบน ANDROID?

ระบบฐานข้อมูลสามารถถูกจัดเก็บได้หลายที่ ขึ้นอยู่กับขนาดของฐานข้อมูล• ภายในเครื่องมือถือ Android เรียกว่า local database

• บน remote web server เครื่องเดียว

• กระจายอยู่บน remote web server หลายๆ ตัว หรือ บน cloud

2

Page 3: BACKEND AS A SERVICE - Information Technology Firebase.pdf · • ภายในเครื่องมือถือAndroid เรียกว่า local database ... iOS, Java,

การใช้งาน REMOTE DATABASE

โดยทั่วไป Android จะใช้ระบบฐานข้อมูลที่ถูกฝังมากับระบบปฏิบัติการเรียกว่า SQLite แต่เนื่องจากบาง App จ าเป็นต้องแชร์ข้อมูลร่วมกับกับผู้อื่น ๆ ดังนั้นการจัดเก็บฐานข้อมูลไว้ที่ตัวเครื่องมือถือจึงไม่สามารถท าได้

การสร้าง Remote database คือการสร้างฐานข้อมูลไว้บนเว็บเซิร์ฟเวอร์

3

Page 4: BACKEND AS A SERVICE - Information Technology Firebase.pdf · • ภายในเครื่องมือถือAndroid เรียกว่า local database ... iOS, Java,

การใช้งาน REMOTE DATABASE

Remote database ถูกติดตั้งบน WEB SERVER ซึ่งโดยทั่วไปเรียกว่า App’s back-end

การเริ่มใช้งานฐานข้อมูลที่เป็นส่วนของ web Server นั้นจ าเป็นต้องก าหนดสิทธิ์การเข้าใช้งานในระบบฐานข้อมูลตัวนั้น ๆ เช่น MySQL, Oracle หรือ MS SQL Server

• สร้าง username และ password ส าหรับเข้าใช้งานฐานข้อมูล

4

Select * From Student

Data rows

Page 5: BACKEND AS A SERVICE - Information Technology Firebase.pdf · • ภายในเครื่องมือถือAndroid เรียกว่า local database ... iOS, Java,

JDBC

การติดต่อฐานข้อมูลสามารถท าได้โดยใช้ JDBC – Java Database Connectivity

5

Page 6: BACKEND AS A SERVICE - Information Technology Firebase.pdf · • ภายในเครื่องมือถือAndroid เรียกว่า local database ... iOS, Java,

PROBLEM WITH REMOTE DATABASE

นอกจากปัญหาในการจัดการฐานข้อมูลเองแล้ว ยังมีส่วนอื่น ๆ ที่เป็นปัญหาในการใช้ Remote DB • Cost : ราคาการติดตั้งและการบ ารุงรักษาค่อนข้างสูง

• Administration : จ าเป็นต้องติดต้ัง ดูแลรักษา ทั้ง Server และ Database ด้วยตนเอง

• Security & Privacy : จ าเป็นต้องจัดการเรื่องของการก าหนดสิทธิ์การใช้งานและความปลอดภัยต่าง ๆ ของ Server เอง

• Robustness : ความเสถียร์ของฐานข้อมูล จ าเป็นต้องมีการจัดการ backup ข้อมูล การกู้คืนกรณีที่ระบบฐานข้อมูลมีปัญหา

• Scaling : การจัดการขนาดของฐานข้อมูล หากมีผู้ใช้ query ข้อมูลพร้อมกันหลาย ๆ เครื่องจะต้องจัดการป้องกันไม่ให้ความเร็วในการเข้าถึงข้อมูลลดลง

6

Page 7: BACKEND AS A SERVICE - Information Technology Firebase.pdf · • ภายในเครื่องมือถือAndroid เรียกว่า local database ... iOS, Java,

WEB SERVICES TO DB

ในปัจจุบันการเข้าถึงฐานข้อมูลที่เป็นที่นิยมจะท าผ่าน Web Layer โดยที่• Client จะร้องขอการท างานของฐานข้อมูลผ่าน URL

• Web Server จะส่งข้อมูลกลับมาให้ยัง App ผ่านรูปแบบต่าง ๆ เช่น JSON, XML

7

www.itsci.mju.ac.th/getStudent?id=1234

Data as xml/json…

Web Server

DB Server

Page 8: BACKEND AS A SERVICE - Information Technology Firebase.pdf · • ภายในเครื่องมือถือAndroid เรียกว่า local database ... iOS, Java,

BaaS – BACKEND AS A SERVICE

BaaS เป็นแฟลตฟอร์มส าหรับ Database/Service Hosting, Management และ Deployment ตัวอย่างเช่น Firebase, Google App Engine, Amazon Web Service Mobile, Oracle Mobile Cloud Service และ Azure

8

Page 9: BACKEND AS A SERVICE - Information Technology Firebase.pdf · • ภายในเครื่องมือถือAndroid เรียกว่า local database ... iOS, Java,

FIREBASE

Firebase เป็น BaaS/Remote Database Management ที่ถูกพัฒนาโดย SF-based Google subsidiary• Real-time synchronized cloud database

• เป็นตัวที่ได้รับความนิยมและประสบความส าเร็จตัวหนึ่งในปัจจุบัน

คุณสมบัติของ Firebase

• API ในการเข้าถึงข้อมูลได้จาก Android, iOS, Java, JavaScript, Obj-C, Node.js

• REST API ที่มี libraries ส าหรับค าสั่งทั่วไปของ JS frameworks

• ความสามารถในการ sync และ notifications ของข้อมูลที่มีการเปลี่ยนแปลง

• Cloud scaling สามารถรองรับการเข้าใช้งานได้พร้อม ๆ กันหลายคน

• สามารถเป็น web hosting, login/authentication

9

Page 10: BACKEND AS A SERVICE - Information Technology Firebase.pdf · • ภายในเครื่องมือถือAndroid เรียกว่า local database ... iOS, Java,

การจัดเก็บข้อมูลของ FIREBASE

มีการเก็บข้อมูลในรูปแบบของ map <key, value> • Value สามารถเป็นได้ทั้ง text, number, boolean, lists หรือ maps

• Object สามารถจัดเก็บในรูปของ map from {field name => value}

• List สามารถจัดเก็บในรูปของ map from {int index => value}

• ฐานข้อมูลมีลักษณะคล้ายกับ tree-like map structure

10

Page 11: BACKEND AS A SERVICE - Information Technology Firebase.pdf · • ภายในเครื่องมือถือAndroid เรียกว่า local database ... iOS, Java,

การติดตั้ง FIREBASE HTTPS://FIREBASE.GOOGLE.COM

11

Page 12: BACKEND AS A SERVICE - Information Technology Firebase.pdf · • ภายในเครื่องมือถือAndroid เรียกว่า local database ... iOS, Java,

การติดตั้ง FIREBASE HTTPS://FIREBASE.GOOGLE.COM

Create Realtime Database

12

Page 13: BACKEND AS A SERVICE - Information Technology Firebase.pdf · • ภายในเครื่องมือถือAndroid เรียกว่า local database ... iOS, Java,

ADD FIREBASE TO ANDROID PROJECT

เลือกที่ Project Overview -> สัญลักษณ์ Android

13

Page 14: BACKEND AS A SERVICE - Information Technology Firebase.pdf · • ภายในเครื่องมือถือAndroid เรียกว่า local database ... iOS, Java,

ADD FIREBASE TO ANDROID PROJECT

ระบุชื่อ Package ใน Android Project ลงใน Firebase จากนั้นกดปุ่ม Register App

14

Page 15: BACKEND AS A SERVICE - Information Technology Firebase.pdf · • ภายในเครื่องมือถือAndroid เรียกว่า local database ... iOS, Java,

ADD FIREBASE TO ANDROID PROJECT

Download ไฟล์ google-services.json ไปไว้ใน Android Project

15

Page 16: BACKEND AS A SERVICE - Information Technology Firebase.pdf · • ภายในเครื่องมือถือAndroid เรียกว่า local database ... iOS, Java,

ADD FIREBASE TO ANDROID PROJECT

Add Firebase SDK ใน Android Project (Project build.gradle)

16

Page 17: BACKEND AS A SERVICE - Information Technology Firebase.pdf · • ภายในเครื่องมือถือAndroid เรียกว่า local database ... iOS, Java,

ADD FIREBASE TO ANDROID PROJECT

Add Firebase SDK ใน Android Project (Module App: build.gradle)

17

Page 18: BACKEND AS A SERVICE - Information Technology Firebase.pdf · • ภายในเครื่องมือถือAndroid เรียกว่า local database ... iOS, Java,

ADD FIREBASE TO ANDROID PROJECT

เมื่อ sync gradle เรียบร้อยแล้ว กดปุ่ม Continue to console

18

Page 19: BACKEND AS A SERVICE - Information Technology Firebase.pdf · • ภายในเครื่องมือถือAndroid เรียกว่า local database ... iOS, Java,

การติดตั้ง FIREBASE

ลงชื่อเข้าใช้งานในเว็บส าหรับ free account ที่ https://www.firebase.comติดต้ัง Firebase ลงใน android studio project’s build.gradle (Module: app)

ก าหนด Permission ใน AndroidManifest.xml

19

dependencies {

implementation 'com.google.firebase:firebase-database:19.2.0'

}

android {

packagingOptions{

exclude 'META-INF/LICENSE'

exclude 'META-INF/LICENSE-FIREBASE.txt'

exclude 'META-INF/NOTICE'

}

}

<uses-permission android:name="android.permission.INTERNET" />

Page 20: BACKEND AS A SERVICE - Information Technology Firebase.pdf · • ภายในเครื่องมือถือAndroid เรียกว่า local database ... iOS, Java,

การเขียนข้อมูลลงใน FIREBASE

ก าหนดการเริ่มต้นใช้งานของ Firebase เพียงครั้งเดียวใน Activity ที่ถูกเรียกใช้เป็นครั้งแรก ในmethod onCreate()

การเขียนข้อมูลลงไปใช้ค าสั่ง fb.child(“key”).setValue(value);

โดยที่ key จะเป็นตัวแทนในการเรียกใช้ข้อมูล (object name)

ส่วน values เป็นได้หลายชนิด เช่น Boolean, Long, Double, List, Map<String, Object>

20

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

FirebaseApp.initializeApp(this);

}

Page 21: BACKEND AS A SERVICE - Information Technology Firebase.pdf · • ภายในเครื่องมือถือAndroid เรียกว่า local database ... iOS, Java,

ตัวอย่างการสร้าง FIREBASE

21

public void sampleCreateFirebase(){

FirebaseDatabase database =

FirebaseDatabase.getInstance("https://your_url.firebaseio.com/");

DatabaseReference myRef = database.getReference("student");

DatabaseReference stu1 = myRef.child("123");

stu1.child("id").setValue("123");

stu1.child("name").setValue("Sayan");

stu1.child("email").setValue("[email protected]");

}

Page 22: BACKEND AS A SERVICE - Information Technology Firebase.pdf · • ภายในเครื่องมือถือAndroid เรียกว่า local database ... iOS, Java,

AUTO GENERATED KEY

ในบางกรณีที่ต้องการให้ Firebase สร้าง Auto ID ส าหรับข้อมูลแต่ละแถวได้ โดยใช้ค าสั่ง push()

ซึ่งช่วยในการที่มีผู้ใช้ต้องการบันทึกข้อมูลพร้อม ๆ กันหลายคน โดยไม่ต้องสนใจเรื่องของ key ที่ต้องสร้างให้

23

DatabaseReference stu1 = myRef.push();

stu1.child("id").setValue("234");

stu1.child("name").setValue("Somchai");

stu1.child("email").setValue("[email protected]");

Log.e("err", stu1.toString());

Page 23: BACKEND AS A SERVICE - Information Technology Firebase.pdf · • ภายในเครื่องมือถือAndroid เรียกว่า local database ... iOS, Java,

การจัดเก็บข้อมูลด้วย CLASS

• หากต้องการจัดเก็บคลาสลงใน Firebase จ าเป็นต้องสร้างคลาสที่ไม่มีพารามิเตอร์ในส่วนของ constructor

• ทุก ๆ attributes จ าต้องมี method getAttributeName()

24

public class Student {

private String stuid;

private String stuname;

private String email;

public Student() {

}

}

Student stu3 = new Student("345", "Somchai", "[email protected]");

DatabaseReference stu1 = myRef.child(stu3.getId());

stu1.setValue(stu3);

Page 24: BACKEND AS A SERVICE - Information Technology Firebase.pdf · • ภายในเครื่องมือถือAndroid เรียกว่า local database ... iOS, Java,

QUERY FIREBASE

ใน Firebase ไม่สามารถใช้ค าสั่ง SQL ได้เหมือนกับ Relational Database ทั่วไป ดังนั้นใน Firebase ได้เตรียมค าสั่งในการ query ข้อมูลโดยใช้ Query object, Ordering, Range และอื่น ๆ

25

FirebaseDatabase database =

FirebaseDatabase.getInstance("https://your_url.firebaseio.com/");

DatabaseReference myRef = database.getReference("student");

// Select * from Student where id = '234';

Query query1 = myRef.orderByKey().equalTo("234");

// Select * from Student where id >= 234;

Query query2 = myRef.orderByKey().startAt("234");

// Select * from Student where name like ‘B%’;

Query query3 = myRef.orderByChild("name").startAt("B").endAt("Bz");

Page 25: BACKEND AS A SERVICE - Information Technology Firebase.pdf · • ภายในเครื่องมือถือAndroid เรียกว่า local database ... iOS, Java,

การอ่านค่าจาก DATASNAPSHOT

DataSnapshot เป็น คลาสส าหรับจัดเก็บข้อมูลที่ได้จากการ query โดยในตัวอย่างที่ให้มานี้เป็นการ query ข้อมูลที่มี id ตั้งแต่ 234 เป็นต้นไป

26

FirebaseDatabase database =

FirebaseDatabase.getInstance("https://your_url.firebaseio.com/");

DatabaseReference myRef = database.getReference("student");

Query query1 = myRef.orderByKey().startAt("234");

query1.addListenerForSingleValueEvent(new ValueEventListener() {

@Override

public void onDataChange(DataSnapshot dataSnapshot) {

for (DataSnapshot ds : dataSnapshot.getChildren()){

Log.d("test", ds.getKey() + " => " + ds.getValue());

}

}

@Override

public void onCancelled(@NonNull DatabaseError databaseError) {

}

});

ระบุข้อมูลที่ต้องการ

dataSnapshot

Page 26: BACKEND AS A SERVICE - Information Technology Firebase.pdf · • ภายในเครื่องมือถือAndroid เรียกว่า local database ... iOS, Java,

การอ่านค่าจาก DATASNAPSHOT

ผลลัพธ์ที่ได้จาก ds.getKey() => ds.getValue() ได้ดังนี้

27

for (DataSnapshot ds : dataSnapshot.getChildren()){

Log.d("test", ds.getKey() + " => " + ds.getValue());

}

getKey()

getValue()

345 => {name=Somchai, id=345, [email protected]}

-LXXsFenD9CQhsQI8Q-0 => {name=Somchai, id=234, [email protected]}

Page 27: BACKEND AS A SERVICE - Information Technology Firebase.pdf · • ภายในเครื่องมือถือAndroid เรียกว่า local database ... iOS, Java,

FirebaseDatabase database =

FirebaseDatabase.getInstance("https://your_url.firebaseio.com/");

DatabaseReference myRef = database.getReference("student/123");

Query query1 = myRef.orderByKey();

query1.addListenerForSingleValueEvent(new ValueEventListener() {

@Override

public void onDataChange(DataSnapshot dataSnapshot) {

for (DataSnapshot ds : dataSnapshot.getChildren()){

Log.d("test", ds.getKey() + " => " + ds.getValue());

}

}

@Override

public void onCancelled(@NonNull DatabaseError databaseError) {

}

});

ตัวอย่างการอ่านค่า

ผู้ใช้สามารถระบุค่าข้อมูลที่ต้องการได้โดยผ่านตัวแปร String ในส่วนของเมธอด fb.child(“….”) เช่น

28

ระบุ root ได้ที่นี่

email => [email protected]

stuid => 123

stuname => Sayan

getKey() getValue()

Page 28: BACKEND AS A SERVICE - Information Technology Firebase.pdf · • ภายในเครื่องมือถือAndroid เรียกว่า local database ... iOS, Java,

QUERY METHODS

29

METHOD DESCRIPTION SQL

q.orderByKey()q.orderByChild(“name”)q.orderByValue()q.orderByPriority

เรียงล าดับตาม key ของข้อมูลเรียงล าดับตาม child keyเรียงล าดับตาม value ของข้อมูลเรียงล าดับตามความส าคัญ manually

Order by

q.startAt(value)q.startAt()

เริ่มต้นที่ valueข้อมูลทั้งหมดเรียงล าดับจากน้อยไปหามาก

>=ASC

q.endAt(value)q.endAt()

สิ้นสุดที่ value ข้อมูลทั้งหมดเรียงล าดับจากมากไปหาน้อย

<=DESC

q.limitToFirst(count) ข้อมูล count แถวเริ่มต้น LIMIT count

q.limitToLast(count) ข้อมูล count แถวสุดท้าย

q.equalTo(“value”) ข้อมูลที่ตรงกับ value =

Page 29: BACKEND AS A SERVICE - Information Technology Firebase.pdf · • ภายในเครื่องมือถือAndroid เรียกว่า local database ... iOS, Java,

FirebaseDatabase database =

FirebaseDatabase.getInstance("https://your_url.firebaseio.com/");

DatabaseReference myRef = database.getReference("student");

DatabaseReference stu1 = myRef.child("345");

stu1.removeValue();

การ REMOVE ข้อมูล

ในการ Remove ข้อมูลออกจาก Firebase

30

ระบุ root ได้ที่นี่ระบุ key ที่ต้องการลบลบข้อมูล

Page 30: BACKEND AS A SERVICE - Information Technology Firebase.pdf · • ภายในเครื่องมือถือAndroid เรียกว่า local database ... iOS, Java,

การก าหนด USER ใน FIREBASE

สามารถไปที่ Firebase website จากนั้นเลือกที่ Authentication แล้วเลือก Sign-in method

31

1) เลือกที่นี่

2) เลือกที่นี่

Page 31: BACKEND AS A SERVICE - Information Technology Firebase.pdf · • ภายในเครื่องมือถือAndroid เรียกว่า local database ... iOS, Java,

การก าหนด USER ใน FIREBASE

จากนั้นเลือก Users และกดปุ่ม Add User เพื่อก าหนด Email และ Password

32

Page 32: BACKEND AS A SERVICE - Information Technology Firebase.pdf · • ภายในเครื่องมือถือAndroid เรียกว่า local database ... iOS, Java,

DATABASE RULES

ก าหนดการอ่านและเขียนข้อมูลของ Database เป็นตามสิทธิ์ที่ถูกก าหนดให้

33

Page 33: BACKEND AS A SERVICE - Information Technology Firebase.pdf · • ภายในเครื่องมือถือAndroid เรียกว่า local database ... iOS, Java,

SECURITY & AUTHENTICATION

โดยทั่วไป user สามารถเข้าถึง Firebase ได้ทั้งอ่านและเขียน• สามารถก าหนดความปลอดภัยของข้อมูลได้ โดยการก าหนด email และ password ส าหรับ

ข้อมูลผ่านทาง website ของ Firebase ได้

• จากนั้นแก้ไขโปรแกรมให้ login ก่อนเสมอถึงจะสามารถเข้าใช้งาน Firebase ได้

34

final FirebaseDatabase database =

FirebaseDatabase.getInstance("https://your_url.firebaseio.com/");

mAuth = FirebaseAuth.getInstance();

mAuth.signInWithEmailAndPassword("[email protected]", “password")

.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {

@Override

public void onComplete(@NonNull Task<AuthResult> task) {

if(task.isSuccessful()){

FirebaseUser user = mAuth.getCurrentUser();

...

}else{

Log.e("test", "login failed");

}

}

});

private FirebaseAuth mAuth;

เมื่อ login ผ่าน