SlideShare a Scribd company logo
Kobkrit Viriyayudhakorn, Ph.D.
kobkrit@gmail.com
http://www.kobkrit.com
Making Chat Room App
Important Links
• Source Codes 

https://github.com/kobkrit/learn-react-native
• Course Materials

http://www.kobkrit.com/category/programming/react-
native/
• Score Announcement

http://bit.ly/its484quizscore
• Facebook Group

https://web.facebook.com/groups/ReactNativeThai/

React Native’s Component
Lifecycle
constructor(props)
render() -> React Element
That we have known so far…
It is not completed. Here is the completed one…
Advanced React Native Component

Mounting Lifecycle
constructor(props)
componentWillMount()
render() -> React Element
componentDidMount()
React Native Component

Mounting Lifecycle
• constructor(object props)
• The component class is instantiated.
• The parameters to the constructor are the element's
initial props, as specified by the parent element.
• You can optionally specify an initial state for the
element by assigning an object to this.state.
• At this point, no native UI has been rendered yet for
this element.
React Native Component

Mounting Lifecycle
• componentWillMount()
• This method is invoked only once, before rendering
occurs for the first time.
• At this point, there is still no native UI rendered for this
element.
• render() -> React Element
• The render method must return a React Element to
render (or null, to render nothing).
React Native Component

Mounting Lifecycle
• componentDidMount()
• This method is invoked only once, after rendering
occurs for the first time.
• At this point, the native UI for this element has finished
rendering, and may be accessed through this.refs for
direct manipulation.
• If you need to make async API calls or execute
delayed code with setTimeout, that should generally
be done in this method.


Updating Lifecycle
componentWillReceiveProps(nextProps)
shouldComponentUpdate(nextProps,
nextState)
render() -> React Element
componentDidUpdate(prevProp, prevState)
componentWillUpdate(nextProps,
nextState)
React Native Component

Updating Lifecycle
• componentWillReceiveProps(object nextProps)
• The parent of this component has passed a new set of
props.
• This component will re-render.
• You may optionally call this.setState() to update this
component's internal state before the render method
is called.
React Native Component

Updating Lifecycle
• shouldComponentUpdate(object nextProps, object
nextState) -> boolean
• Based on the next set of props and state, a
component may decide to re-render or not to re-
render.
• The base class's implementation of this method
always returns true (the component should re-render).
• For optimization, override this method and check if
either props or state have been modified, e.g. run an
equality test of each key/value in these objects.
• Returning false will prevent the render method from
being called.
React Native Component

Updating Lifecycle
• componentWillUpdate(object nextProps, object
nextState)
• This method is invoked, after the decision has been
made to re-render.
• You may not call this.setState() here, since an update
is already in progress.
• render() -> React Element
• This method is called, assuming
shouldComponentUpdate returned true.
• The render method must return a React Element to
render (or null, to render nothing).
React Native Component

Updating Lifecycle
• componentDidUpdate(object prevProps, object
prevState)
• This method is invoked after re-rendering occurs. At
this point, the native UI for this component has been
updated to reflect the React Element returned from
the render() method.
Mounting (Opening the App)
l12_firebase/bmi.js
Changing Height to 5
l12_firebase/bmi.js
Changing Weight to 5
l12_firebase/bmi.js
Why???
Because…
l12_firebase/bmi.js
• Firebase is a mobile platform that helps you quickly
develop high-quality apps, grow your user base,
and earn more money.
• The tools and infrastructure you need to build
better apps and grow successful businesses
• Firebase is made up of complementary features
that you can mix-and-match to fit your needs.
• It was acquired by Google since 2014.
Key Features
• Authentication (User Sign-In, User Registration, Login
by Google, Login by Facebook)
• Realtime Database (Store and sync app data in
realtime)
• Cloud Messaging (Send Notification to User’s Mobile)
• Crash Reporting (Sending crash report to us)
• Analytics (Knowing how much people using our app
right now)
Firebase span over 2 weeks
• Lecture 12
• Real-Time Database Part I
• Lecture 13
• Real-Time Database Part II
• Authentication
• Cloud Messaging / Notification
Getting Start With Firebase
1. Create Firebase Project in the Firebase console.

https://console.firebase.google.com/ (We need a
Google account for this).
2. Retrieve apiKey, authDomain, databaseURL, and
storageBucket from Firebase console.
3. Create a new react-native project.
4. Install Firebase from npm.
5. Add it into a react-native project.
Create a Project @ Firebase
• Enter https://console.firebase.google.com/
• Login with your Google account
• Press “Create New Project” button

1. Adding Project Name (Any name is fine)
2. Select Country to Thailand
3. Press Create Project button
• Click at “Add Firebase to your web app” 

(The pink one)
• Press Copy button to copy the apiKey, authDomain,
databaseURL, storageBucket, and messagingSenderId
and paste into the code.
Create New Project and
Install Firebase
• We will install Firebase version 3.6.0
• Open Terminal and change to a working directory
• $|> react-native init l12_firebase
• $|> cd l12_firebase
• $|> npm install firebase --save
• $|> atom index.ios.js
1.js
Realtime Database
• Store and sync data with our NoSQL cloud
database. Data is synced across all clients in
realtime, and remains available when your app
goes offline.
Key Differences with Realm
• Realm allows you implement your own database
server. Firebase can’t. You need to use Google
Cloud server (which is not free if it is a high traffic).
• Realms DB is the reactive programming concept
(Lazy loading). Firebase’s Realtime DB isn’t.
• Realms DB needs to specify database schema,
while Firebase isn’t. Firebase will save what ever it
got.
Realtime Database Structure
• All Firebase Realtime Database data is stored as
JSON objects, e.g.,
Basic Writing Operation
• Get a database reference
• Writing something
Save the {text: ‘Hello Text!’} as key ‘notes/1’ 

into Firebase database
1.js
1.js
What happen?
• As the default, user who can write the realtime
database must be authenticated.
• Since our user is not yet authenticated, so the
permission error is occurred.
• For development, We can change this behavior by
re-configure the Database permission.
Realtime Database
Permission Rules
1
2
https://console.firebase.google.com/
Sample Realtime DB Rules
• Default (Require Authentication)









• Public / Development (Open to everyone)
Sample Realtime DB Rules
• Private User Database (Which means only owners
can access their information in database)









Sample Realtime DB Rules
• Private (No one can access the database, except
admin can access via Firebase console)
Change Realtime DB
permission to Public
• Change the rule to Public permission
• Press “Publish” button
Reload the App again
• At Simulator, Cmd + R or
R,R for reload
• Now there is no warning
sign.
• Realtime database save
successfully.
Viewing Saved database
• We can view the saved information in Firebase’s
Realtime database at Firebase console.
• https://console.firebase.google.com/project/{your-
project-name}/database/data
Chat Room App
• Simple one chat room.
• Showing number of online users.
• Showing conversations publicly.
• Send the chat message.
• Setting the username
2.js
Making Chat Room App UI
2.js
User online / offline
• Conditions
• Online, when the app is active on the screen.
• Offline, when the app is inactive or in
background on the screen.
• We need helps from a React Native’s library called
“AppState”
AppState
• Can tell us whether the app is in foreground (active) on
the screen, or in background (inactive).
• active - The app is running in the foreground
• background - The app is running in the background.
The user is either in another app or on the home screen
• inactive - This is a state that occurs when transitioning
between foreground & background, and during periods
of inactivity such as entering the Multitasking view or in
the event of an incoming call
Obtaining State
• Accessing AppState.currentState (it was kept up-
to-date by React Native)
• E.g., If app in the foreground (active) state.
• AppState.currentState == “active”
• If app in the background state.
• AppState.currentState == “background”
Listening for State changes
2.js
Key Logics for Online User
Counting
• Enter the app
• Read the current onlineUser from Firebase
• Add by 1
• Push it back to the Firebase.
• Leave the app.
• Read the current onlineUser from Firebase
• Remove by 1
• Push it back to the Firebase.
Want do some operation in
background?
• When user leave the app, the app become into the
background state.
• All JavaScript code is halted and unloaded from the
memory.
• All timers (setTimeout) are unable to execute,
because their don’t found the codes to run in the
memory.
• We need an external library for running operation in
background.
react-native-background-
timer
• Installation
• $|> npm install react-native-background-timer -- save
• $|> react-native link
• Usage
Handling # of Online User
2.js
2.js
On vs Once
• firebaseRef.on(‘value’, callback)
• Listening for data change forever.
• When the data has changed, the call back is called.
• firebaseRef.once(‘value’, callback)
• Listening for data change only one time. Once it is
changed, it called only one time and become
inactive.
Opening the App
Leaving the App
Enter the App Again..
Modifying DB value in 

Firebase console
Realtime DB Transaction
• Problem occurs!
• When two users open the app at the same time,
when will be happen?
• Both users read the amount of user as the same
value, both users update the database by
increasing by 1. Instead of adding by 2.
• Number of online user and real online user is
mismatched.
Realtime DB Transaction
3.js
Realtime DB Transaction
3.js
Realtime DB Transaction
• All transaction requests will be queued at the Firebase
server and will be processed one-by-one.
• Transaction guarantees that no other operations can
write into database during the reading and writing
operations in a transaction block.
• This behavior, we called it atomic write operations.
• Problems of mismatch number of online users when
two or more users enter the app at the same time,
solved!
Q/A

More Related Content

What's hot

[Final] ReactJS presentation
[Final] ReactJS presentation[Final] ReactJS presentation
[Final] ReactJS presentation洪 鹏发
 
React Native Workshop
React Native WorkshopReact Native Workshop
React Native Workshop
Amazon Web Services
 
Reasons to use React Query
Reasons to use React QueryReasons to use React Query
Reasons to use React Query
javaria javaid
 
React JS - A quick introduction tutorial
React JS - A quick introduction tutorialReact JS - A quick introduction tutorial
React JS - A quick introduction tutorial
Mohammed Fazuluddin
 
React js - The Core Concepts
React js - The Core ConceptsReact js - The Core Concepts
React js - The Core Concepts
Divyang Bhambhani
 
React + Redux for Web Developers
React + Redux for Web DevelopersReact + Redux for Web Developers
React + Redux for Web Developers
Jamal Sinclair O'Garro
 
Redux toolkit
Redux toolkitRedux toolkit
Redux toolkit
ofoefiergbor1
 
AEM & Single Page Applications (SPAs) 101
AEM & Single Page Applications (SPAs) 101AEM & Single Page Applications (SPAs) 101
AEM & Single Page Applications (SPAs) 101
Adobe
 
React Native
React NativeReact Native
React hooks
React hooksReact hooks
React hooks
Sadhna Rana
 
React js
React jsReact js
React js
Rajesh Kolla
 
React Hooks
React HooksReact Hooks
React Hooks
Joao Marins
 
React + Redux Introduction
React + Redux IntroductionReact + Redux Introduction
React + Redux Introduction
Nikolaus Graf
 
React native
React nativeReact native
[Webinar]: Working with Reactive Spring
[Webinar]: Working with Reactive Spring[Webinar]: Working with Reactive Spring
[Webinar]: Working with Reactive Spring
Knoldus Inc.
 
React.js - The Dawn of Virtual DOM
React.js - The Dawn of Virtual DOMReact.js - The Dawn of Virtual DOM
React.js - The Dawn of Virtual DOM
Jimit Shah
 
React web development
React web developmentReact web development
React web development
Rully Ramanda
 
Intro To React Native
Intro To React NativeIntro To React Native
Intro To React Native
FITC
 
React
React React
React
중운 박
 
Spring Boot and REST API
Spring Boot and REST APISpring Boot and REST API
Spring Boot and REST API
07.pallav
 

What's hot (20)

[Final] ReactJS presentation
[Final] ReactJS presentation[Final] ReactJS presentation
[Final] ReactJS presentation
 
React Native Workshop
React Native WorkshopReact Native Workshop
React Native Workshop
 
Reasons to use React Query
Reasons to use React QueryReasons to use React Query
Reasons to use React Query
 
React JS - A quick introduction tutorial
React JS - A quick introduction tutorialReact JS - A quick introduction tutorial
React JS - A quick introduction tutorial
 
React js - The Core Concepts
React js - The Core ConceptsReact js - The Core Concepts
React js - The Core Concepts
 
React + Redux for Web Developers
React + Redux for Web DevelopersReact + Redux for Web Developers
React + Redux for Web Developers
 
Redux toolkit
Redux toolkitRedux toolkit
Redux toolkit
 
AEM & Single Page Applications (SPAs) 101
AEM & Single Page Applications (SPAs) 101AEM & Single Page Applications (SPAs) 101
AEM & Single Page Applications (SPAs) 101
 
React Native
React NativeReact Native
React Native
 
React hooks
React hooksReact hooks
React hooks
 
React js
React jsReact js
React js
 
React Hooks
React HooksReact Hooks
React Hooks
 
React + Redux Introduction
React + Redux IntroductionReact + Redux Introduction
React + Redux Introduction
 
React native
React nativeReact native
React native
 
[Webinar]: Working with Reactive Spring
[Webinar]: Working with Reactive Spring[Webinar]: Working with Reactive Spring
[Webinar]: Working with Reactive Spring
 
React.js - The Dawn of Virtual DOM
React.js - The Dawn of Virtual DOMReact.js - The Dawn of Virtual DOM
React.js - The Dawn of Virtual DOM
 
React web development
React web developmentReact web development
React web development
 
Intro To React Native
Intro To React NativeIntro To React Native
Intro To React Native
 
React
React React
React
 
Spring Boot and REST API
Spring Boot and REST APISpring Boot and REST API
Spring Boot and REST API
 

Similar to React Native Firebase

React and Flux life cycle with JSX, React Router and Jest Unit Testing
React and  Flux life cycle with JSX, React Router and Jest Unit TestingReact and  Flux life cycle with JSX, React Router and Jest Unit Testing
React and Flux life cycle with JSX, React Router and Jest Unit Testing
Eswara Kumar Palakollu
 
React Native Firebase Realtime Database + Authentication
React Native Firebase Realtime Database + AuthenticationReact Native Firebase Realtime Database + Authentication
React Native Firebase Realtime Database + Authentication
Kobkrit Viriyayudhakorn
 
O365 Developer Bootcamp NJ 2018 - Material
O365 Developer Bootcamp NJ 2018 - MaterialO365 Developer Bootcamp NJ 2018 - Material
O365 Developer Bootcamp NJ 2018 - Material
Thomas Daly
 
Optimizing your use of react life cycles by shedrack akintayo
Optimizing your use of react life cycles by shedrack akintayoOptimizing your use of react life cycles by shedrack akintayo
Optimizing your use of react life cycles by shedrack akintayo
Shedrack Akintayo
 
React JS; all concepts. Contains React Features, JSX, functional & Class comp...
React JS; all concepts. Contains React Features, JSX, functional & Class comp...React JS; all concepts. Contains React Features, JSX, functional & Class comp...
React JS; all concepts. Contains React Features, JSX, functional & Class comp...
Karmanjay Verma
 
Getting Started with Selenium
Getting Started with SeleniumGetting Started with Selenium
Getting Started with Selenium
Dave Haeffner
 
Managing state in modern React web applications
Managing state in modern React web applicationsManaging state in modern React web applications
Managing state in modern React web applications
Jon Preece
 
React JS
React JSReact JS
ReactJS
ReactJSReactJS
Introduction to react native with redux
Introduction to react native with reduxIntroduction to react native with redux
Introduction to react native with redux
Mike Melusky
 
React state management with Redux and MobX
React state management with Redux and MobXReact state management with Redux and MobX
React state management with Redux and MobX
Darko Kukovec
 
React a11y-csun
React a11y-csunReact a11y-csun
React a11y-csun
Poonam Tathavadkar
 
Understanding Facebook's React.js
Understanding Facebook's React.jsUnderstanding Facebook's React.js
Understanding Facebook's React.js
Federico Torre
 
Spfx with react redux
Spfx with react reduxSpfx with react redux
Spfx with react redux
Rajesh Kumar
 
SFDC Deployments
SFDC DeploymentsSFDC Deployments
SFDC Deployments
Sujit Kumar
 
Adding a modern twist to legacy web applications
Adding a modern twist to legacy web applicationsAdding a modern twist to legacy web applications
Adding a modern twist to legacy web applications
Jeff Durta
 
Fundamental concepts of react js
Fundamental concepts of react jsFundamental concepts of react js
Fundamental concepts of react js
StephieJohn
 
Redux Tech Talk
Redux Tech TalkRedux Tech Talk
Redux Tech Talk
Chathuranga Jayanath
 
Marty, You're Just Not Thinking Fourth Dimensionally
Marty, You're Just Not Thinking Fourth DimensionallyMarty, You're Just Not Thinking Fourth Dimensionally
Marty, You're Just Not Thinking Fourth Dimensionally
Teamstudio
 
Introduction to React native
Introduction to React nativeIntroduction to React native
Introduction to React native
Dhaval Barot
 

Similar to React Native Firebase (20)

React and Flux life cycle with JSX, React Router and Jest Unit Testing
React and  Flux life cycle with JSX, React Router and Jest Unit TestingReact and  Flux life cycle with JSX, React Router and Jest Unit Testing
React and Flux life cycle with JSX, React Router and Jest Unit Testing
 
React Native Firebase Realtime Database + Authentication
React Native Firebase Realtime Database + AuthenticationReact Native Firebase Realtime Database + Authentication
React Native Firebase Realtime Database + Authentication
 
O365 Developer Bootcamp NJ 2018 - Material
O365 Developer Bootcamp NJ 2018 - MaterialO365 Developer Bootcamp NJ 2018 - Material
O365 Developer Bootcamp NJ 2018 - Material
 
Optimizing your use of react life cycles by shedrack akintayo
Optimizing your use of react life cycles by shedrack akintayoOptimizing your use of react life cycles by shedrack akintayo
Optimizing your use of react life cycles by shedrack akintayo
 
React JS; all concepts. Contains React Features, JSX, functional & Class comp...
React JS; all concepts. Contains React Features, JSX, functional & Class comp...React JS; all concepts. Contains React Features, JSX, functional & Class comp...
React JS; all concepts. Contains React Features, JSX, functional & Class comp...
 
Getting Started with Selenium
Getting Started with SeleniumGetting Started with Selenium
Getting Started with Selenium
 
Managing state in modern React web applications
Managing state in modern React web applicationsManaging state in modern React web applications
Managing state in modern React web applications
 
React JS
React JSReact JS
React JS
 
ReactJS
ReactJSReactJS
ReactJS
 
Introduction to react native with redux
Introduction to react native with reduxIntroduction to react native with redux
Introduction to react native with redux
 
React state management with Redux and MobX
React state management with Redux and MobXReact state management with Redux and MobX
React state management with Redux and MobX
 
React a11y-csun
React a11y-csunReact a11y-csun
React a11y-csun
 
Understanding Facebook's React.js
Understanding Facebook's React.jsUnderstanding Facebook's React.js
Understanding Facebook's React.js
 
Spfx with react redux
Spfx with react reduxSpfx with react redux
Spfx with react redux
 
SFDC Deployments
SFDC DeploymentsSFDC Deployments
SFDC Deployments
 
Adding a modern twist to legacy web applications
Adding a modern twist to legacy web applicationsAdding a modern twist to legacy web applications
Adding a modern twist to legacy web applications
 
Fundamental concepts of react js
Fundamental concepts of react jsFundamental concepts of react js
Fundamental concepts of react js
 
Redux Tech Talk
Redux Tech TalkRedux Tech Talk
Redux Tech Talk
 
Marty, You're Just Not Thinking Fourth Dimensionally
Marty, You're Just Not Thinking Fourth DimensionallyMarty, You're Just Not Thinking Fourth Dimensionally
Marty, You're Just Not Thinking Fourth Dimensionally
 
Introduction to React native
Introduction to React nativeIntroduction to React native
Introduction to React native
 

More from Kobkrit Viriyayudhakorn

Thai E-Voting System
Thai E-Voting System Thai E-Voting System
Thai E-Voting System
Kobkrit Viriyayudhakorn
 
Thai National ID Card OCR
Thai National ID Card OCRThai National ID Card OCR
Thai National ID Card OCR
Kobkrit Viriyayudhakorn
 
Chochae Robot - Thai voice communication extension pack for Service Robot
Chochae Robot - Thai voice communication extension pack for Service RobotChochae Robot - Thai voice communication extension pack for Service Robot
Chochae Robot - Thai voice communication extension pack for Service Robot
Kobkrit Viriyayudhakorn
 
ศักยภาพของ AI สู่โอกาสใหม่แห่งการแข่งขันและความสำเร็จ (Thai AI updates in yea...
ศักยภาพของ AI สู่โอกาสใหม่แห่งการแข่งขันและความสำเร็จ (Thai AI updates in yea...ศักยภาพของ AI สู่โอกาสใหม่แห่งการแข่งขันและความสำเร็จ (Thai AI updates in yea...
ศักยภาพของ AI สู่โอกาสใหม่แห่งการแข่งขันและความสำเร็จ (Thai AI updates in yea...
Kobkrit Viriyayudhakorn
 
Thai Text processing by Transfer Learning using Transformer (Bert)
Thai Text processing by Transfer Learning using Transformer (Bert)Thai Text processing by Transfer Learning using Transformer (Bert)
Thai Text processing by Transfer Learning using Transformer (Bert)
Kobkrit Viriyayudhakorn
 
How Emoticon Affects Chatbot Users
How Emoticon Affects Chatbot UsersHow Emoticon Affects Chatbot Users
How Emoticon Affects Chatbot Users
Kobkrit Viriyayudhakorn
 
หัวใจของปัญญาประดิษฐ์ (Gradient Descent ทำงานอย่างไร)
หัวใจของปัญญาประดิษฐ์ (Gradient Descent ทำงานอย่างไร)หัวใจของปัญญาประดิษฐ์ (Gradient Descent ทำงานอย่างไร)
หัวใจของปัญญาประดิษฐ์ (Gradient Descent ทำงานอย่างไร)
Kobkrit Viriyayudhakorn
 
Check Raka Chatbot Pitching Presentation
Check Raka Chatbot Pitching PresentationCheck Raka Chatbot Pitching Presentation
Check Raka Chatbot Pitching Presentation
Kobkrit Viriyayudhakorn
 
[Lecture 3] AI and Deep Learning: Logistic Regression (Coding)
[Lecture 3] AI and Deep Learning: Logistic Regression (Coding)[Lecture 3] AI and Deep Learning: Logistic Regression (Coding)
[Lecture 3] AI and Deep Learning: Logistic Regression (Coding)
Kobkrit Viriyayudhakorn
 
[Lecture 4] AI and Deep Learning: Neural Network (Theory)
[Lecture 4] AI and Deep Learning: Neural Network (Theory)[Lecture 4] AI and Deep Learning: Neural Network (Theory)
[Lecture 4] AI and Deep Learning: Neural Network (Theory)
Kobkrit Viriyayudhakorn
 
[Lecture 2] AI and Deep Learning: Logistic Regression (Theory)
[Lecture 2] AI and Deep Learning: Logistic Regression (Theory)[Lecture 2] AI and Deep Learning: Logistic Regression (Theory)
[Lecture 2] AI and Deep Learning: Logistic Regression (Theory)
Kobkrit Viriyayudhakorn
 
ITS488 Lecture 6: Music and Sound Effect & GVR Try out.
ITS488 Lecture 6: Music and Sound Effect & GVR Try out.ITS488 Lecture 6: Music and Sound Effect & GVR Try out.
ITS488 Lecture 6: Music and Sound Effect & GVR Try out.
Kobkrit Viriyayudhakorn
 
Unity Google VR Cardboard Deployment on iOS and Android
Unity Google VR Cardboard Deployment on iOS and AndroidUnity Google VR Cardboard Deployment on iOS and Android
Unity Google VR Cardboard Deployment on iOS and Android
Kobkrit Viriyayudhakorn
 
ITS488 Lecture 4: Google VR Cardboard Game Development: Basket Ball Game #2
ITS488 Lecture 4: Google VR Cardboard Game Development: Basket Ball Game #2ITS488 Lecture 4: Google VR Cardboard Game Development: Basket Ball Game #2
ITS488 Lecture 4: Google VR Cardboard Game Development: Basket Ball Game #2
Kobkrit Viriyayudhakorn
 
Lecture 4: ITS488 Digital Content Creation with Unity - Game and VR Programming
Lecture 4: ITS488 Digital Content Creation with Unity - Game and VR Programming Lecture 4: ITS488 Digital Content Creation with Unity - Game and VR Programming
Lecture 4: ITS488 Digital Content Creation with Unity - Game and VR Programming
Kobkrit Viriyayudhakorn
 
Lecture 2: C# Programming for VR application in Unity
Lecture 2: C# Programming for VR application in UnityLecture 2: C# Programming for VR application in Unity
Lecture 2: C# Programming for VR application in Unity
Kobkrit Viriyayudhakorn
 
Lecture 1 Introduction to VR Programming
Lecture 1 Introduction to VR ProgrammingLecture 1 Introduction to VR Programming
Lecture 1 Introduction to VR Programming
Kobkrit Viriyayudhakorn
 
Thai Word Embedding with Tensorflow
Thai Word Embedding with Tensorflow Thai Word Embedding with Tensorflow
Thai Word Embedding with Tensorflow
Kobkrit Viriyayudhakorn
 
Lecture 3 - ES6 Script Advanced for React-Native
Lecture 3 - ES6 Script Advanced for React-NativeLecture 3 - ES6 Script Advanced for React-Native
Lecture 3 - ES6 Script Advanced for React-Native
Kobkrit Viriyayudhakorn
 
สร้างซอฟต์แวร์อย่างไรให้โดนใจผู้คน (How to make software that people love)
สร้างซอฟต์แวร์อย่างไรให้โดนใจผู้คน (How to make software that people love)สร้างซอฟต์แวร์อย่างไรให้โดนใจผู้คน (How to make software that people love)
สร้างซอฟต์แวร์อย่างไรให้โดนใจผู้คน (How to make software that people love)
Kobkrit Viriyayudhakorn
 

More from Kobkrit Viriyayudhakorn (20)

Thai E-Voting System
Thai E-Voting System Thai E-Voting System
Thai E-Voting System
 
Thai National ID Card OCR
Thai National ID Card OCRThai National ID Card OCR
Thai National ID Card OCR
 
Chochae Robot - Thai voice communication extension pack for Service Robot
Chochae Robot - Thai voice communication extension pack for Service RobotChochae Robot - Thai voice communication extension pack for Service Robot
Chochae Robot - Thai voice communication extension pack for Service Robot
 
ศักยภาพของ AI สู่โอกาสใหม่แห่งการแข่งขันและความสำเร็จ (Thai AI updates in yea...
ศักยภาพของ AI สู่โอกาสใหม่แห่งการแข่งขันและความสำเร็จ (Thai AI updates in yea...ศักยภาพของ AI สู่โอกาสใหม่แห่งการแข่งขันและความสำเร็จ (Thai AI updates in yea...
ศักยภาพของ AI สู่โอกาสใหม่แห่งการแข่งขันและความสำเร็จ (Thai AI updates in yea...
 
Thai Text processing by Transfer Learning using Transformer (Bert)
Thai Text processing by Transfer Learning using Transformer (Bert)Thai Text processing by Transfer Learning using Transformer (Bert)
Thai Text processing by Transfer Learning using Transformer (Bert)
 
How Emoticon Affects Chatbot Users
How Emoticon Affects Chatbot UsersHow Emoticon Affects Chatbot Users
How Emoticon Affects Chatbot Users
 
หัวใจของปัญญาประดิษฐ์ (Gradient Descent ทำงานอย่างไร)
หัวใจของปัญญาประดิษฐ์ (Gradient Descent ทำงานอย่างไร)หัวใจของปัญญาประดิษฐ์ (Gradient Descent ทำงานอย่างไร)
หัวใจของปัญญาประดิษฐ์ (Gradient Descent ทำงานอย่างไร)
 
Check Raka Chatbot Pitching Presentation
Check Raka Chatbot Pitching PresentationCheck Raka Chatbot Pitching Presentation
Check Raka Chatbot Pitching Presentation
 
[Lecture 3] AI and Deep Learning: Logistic Regression (Coding)
[Lecture 3] AI and Deep Learning: Logistic Regression (Coding)[Lecture 3] AI and Deep Learning: Logistic Regression (Coding)
[Lecture 3] AI and Deep Learning: Logistic Regression (Coding)
 
[Lecture 4] AI and Deep Learning: Neural Network (Theory)
[Lecture 4] AI and Deep Learning: Neural Network (Theory)[Lecture 4] AI and Deep Learning: Neural Network (Theory)
[Lecture 4] AI and Deep Learning: Neural Network (Theory)
 
[Lecture 2] AI and Deep Learning: Logistic Regression (Theory)
[Lecture 2] AI and Deep Learning: Logistic Regression (Theory)[Lecture 2] AI and Deep Learning: Logistic Regression (Theory)
[Lecture 2] AI and Deep Learning: Logistic Regression (Theory)
 
ITS488 Lecture 6: Music and Sound Effect & GVR Try out.
ITS488 Lecture 6: Music and Sound Effect & GVR Try out.ITS488 Lecture 6: Music and Sound Effect & GVR Try out.
ITS488 Lecture 6: Music and Sound Effect & GVR Try out.
 
Unity Google VR Cardboard Deployment on iOS and Android
Unity Google VR Cardboard Deployment on iOS and AndroidUnity Google VR Cardboard Deployment on iOS and Android
Unity Google VR Cardboard Deployment on iOS and Android
 
ITS488 Lecture 4: Google VR Cardboard Game Development: Basket Ball Game #2
ITS488 Lecture 4: Google VR Cardboard Game Development: Basket Ball Game #2ITS488 Lecture 4: Google VR Cardboard Game Development: Basket Ball Game #2
ITS488 Lecture 4: Google VR Cardboard Game Development: Basket Ball Game #2
 
Lecture 4: ITS488 Digital Content Creation with Unity - Game and VR Programming
Lecture 4: ITS488 Digital Content Creation with Unity - Game and VR Programming Lecture 4: ITS488 Digital Content Creation with Unity - Game and VR Programming
Lecture 4: ITS488 Digital Content Creation with Unity - Game and VR Programming
 
Lecture 2: C# Programming for VR application in Unity
Lecture 2: C# Programming for VR application in UnityLecture 2: C# Programming for VR application in Unity
Lecture 2: C# Programming for VR application in Unity
 
Lecture 1 Introduction to VR Programming
Lecture 1 Introduction to VR ProgrammingLecture 1 Introduction to VR Programming
Lecture 1 Introduction to VR Programming
 
Thai Word Embedding with Tensorflow
Thai Word Embedding with Tensorflow Thai Word Embedding with Tensorflow
Thai Word Embedding with Tensorflow
 
Lecture 3 - ES6 Script Advanced for React-Native
Lecture 3 - ES6 Script Advanced for React-NativeLecture 3 - ES6 Script Advanced for React-Native
Lecture 3 - ES6 Script Advanced for React-Native
 
สร้างซอฟต์แวร์อย่างไรให้โดนใจผู้คน (How to make software that people love)
สร้างซอฟต์แวร์อย่างไรให้โดนใจผู้คน (How to make software that people love)สร้างซอฟต์แวร์อย่างไรให้โดนใจผู้คน (How to make software that people love)
สร้างซอฟต์แวร์อย่างไรให้โดนใจผู้คน (How to make software that people love)
 

Recently uploaded

Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
Paco van Beckhoven
 
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns
 
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Anthony Dahanne
 
RISE with SAP and Journey to the Intelligent Enterprise
RISE with SAP and Journey to the Intelligent EnterpriseRISE with SAP and Journey to the Intelligent Enterprise
RISE with SAP and Journey to the Intelligent Enterprise
Srikant77
 
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
informapgpstrackings
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
Max Andersen
 
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Globus
 
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data AnalysisProviding Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Globus
 
Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...
Globus
 
Lecture 1 Introduction to games development
Lecture 1 Introduction to games developmentLecture 1 Introduction to games development
Lecture 1 Introduction to games development
abdulrafaychaudhry
 
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdfDominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
AMB-Review
 
SOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBrokerSOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar
 
May Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdfMay Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdf
Adele Miller
 
2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx
Georgi Kodinov
 
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus
 
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Mind IT Systems
 
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptxTop Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
rickgrimesss22
 
Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604
Fermin Galan
 
Into the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdfInto the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdf
Ortus Solutions, Corp
 
Corporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMSCorporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMS
Tendenci - The Open Source AMS (Association Management Software)
 

Recently uploaded (20)

Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
 
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology Solutions
 
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
 
RISE with SAP and Journey to the Intelligent Enterprise
RISE with SAP and Journey to the Intelligent EnterpriseRISE with SAP and Journey to the Intelligent Enterprise
RISE with SAP and Journey to the Intelligent Enterprise
 
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
 
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
 
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data AnalysisProviding Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
 
Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...
 
Lecture 1 Introduction to games development
Lecture 1 Introduction to games developmentLecture 1 Introduction to games development
Lecture 1 Introduction to games development
 
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdfDominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
 
SOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBrokerSOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBroker
 
May Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdfMay Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdf
 
2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx
 
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024
 
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
 
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptxTop Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
 
Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604
 
Into the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdfInto the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdf
 
Corporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMSCorporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMS
 

React Native Firebase

  • 2. Important Links • Source Codes 
 https://github.com/kobkrit/learn-react-native • Course Materials
 http://www.kobkrit.com/category/programming/react- native/ • Score Announcement
 http://bit.ly/its484quizscore • Facebook Group
 https://web.facebook.com/groups/ReactNativeThai/

  • 3. React Native’s Component Lifecycle constructor(props) render() -> React Element That we have known so far… It is not completed. Here is the completed one…
  • 4. Advanced React Native Component
 Mounting Lifecycle constructor(props) componentWillMount() render() -> React Element componentDidMount()
  • 5. React Native Component
 Mounting Lifecycle • constructor(object props) • The component class is instantiated. • The parameters to the constructor are the element's initial props, as specified by the parent element. • You can optionally specify an initial state for the element by assigning an object to this.state. • At this point, no native UI has been rendered yet for this element.
  • 6. React Native Component
 Mounting Lifecycle • componentWillMount() • This method is invoked only once, before rendering occurs for the first time. • At this point, there is still no native UI rendered for this element. • render() -> React Element • The render method must return a React Element to render (or null, to render nothing).
  • 7. React Native Component
 Mounting Lifecycle • componentDidMount() • This method is invoked only once, after rendering occurs for the first time. • At this point, the native UI for this element has finished rendering, and may be accessed through this.refs for direct manipulation. • If you need to make async API calls or execute delayed code with setTimeout, that should generally be done in this method.
  • 8. 
 Updating Lifecycle componentWillReceiveProps(nextProps) shouldComponentUpdate(nextProps, nextState) render() -> React Element componentDidUpdate(prevProp, prevState) componentWillUpdate(nextProps, nextState)
  • 9. React Native Component
 Updating Lifecycle • componentWillReceiveProps(object nextProps) • The parent of this component has passed a new set of props. • This component will re-render. • You may optionally call this.setState() to update this component's internal state before the render method is called.
  • 10. React Native Component
 Updating Lifecycle • shouldComponentUpdate(object nextProps, object nextState) -> boolean • Based on the next set of props and state, a component may decide to re-render or not to re- render. • The base class's implementation of this method always returns true (the component should re-render). • For optimization, override this method and check if either props or state have been modified, e.g. run an equality test of each key/value in these objects. • Returning false will prevent the render method from being called.
  • 11. React Native Component
 Updating Lifecycle • componentWillUpdate(object nextProps, object nextState) • This method is invoked, after the decision has been made to re-render. • You may not call this.setState() here, since an update is already in progress. • render() -> React Element • This method is called, assuming shouldComponentUpdate returned true. • The render method must return a React Element to render (or null, to render nothing).
  • 12. React Native Component
 Updating Lifecycle • componentDidUpdate(object prevProps, object prevState) • This method is invoked after re-rendering occurs. At this point, the native UI for this component has been updated to reflect the React Element returned from the render() method.
  • 13. Mounting (Opening the App) l12_firebase/bmi.js
  • 14. Changing Height to 5 l12_firebase/bmi.js
  • 15. Changing Weight to 5 l12_firebase/bmi.js
  • 17. • Firebase is a mobile platform that helps you quickly develop high-quality apps, grow your user base, and earn more money. • The tools and infrastructure you need to build better apps and grow successful businesses • Firebase is made up of complementary features that you can mix-and-match to fit your needs. • It was acquired by Google since 2014.
  • 18.
  • 19. Key Features • Authentication (User Sign-In, User Registration, Login by Google, Login by Facebook) • Realtime Database (Store and sync app data in realtime) • Cloud Messaging (Send Notification to User’s Mobile) • Crash Reporting (Sending crash report to us) • Analytics (Knowing how much people using our app right now)
  • 20. Firebase span over 2 weeks • Lecture 12 • Real-Time Database Part I • Lecture 13 • Real-Time Database Part II • Authentication • Cloud Messaging / Notification
  • 21. Getting Start With Firebase 1. Create Firebase Project in the Firebase console.
 https://console.firebase.google.com/ (We need a Google account for this). 2. Retrieve apiKey, authDomain, databaseURL, and storageBucket from Firebase console. 3. Create a new react-native project. 4. Install Firebase from npm. 5. Add it into a react-native project.
  • 22. Create a Project @ Firebase • Enter https://console.firebase.google.com/ • Login with your Google account • Press “Create New Project” button

  • 23. 1. Adding Project Name (Any name is fine) 2. Select Country to Thailand 3. Press Create Project button
  • 24. • Click at “Add Firebase to your web app” 
 (The pink one)
  • 25. • Press Copy button to copy the apiKey, authDomain, databaseURL, storageBucket, and messagingSenderId and paste into the code.
  • 26. Create New Project and Install Firebase • We will install Firebase version 3.6.0 • Open Terminal and change to a working directory • $|> react-native init l12_firebase • $|> cd l12_firebase • $|> npm install firebase --save • $|> atom index.ios.js
  • 27. 1.js
  • 28. Realtime Database • Store and sync data with our NoSQL cloud database. Data is synced across all clients in realtime, and remains available when your app goes offline.
  • 29. Key Differences with Realm • Realm allows you implement your own database server. Firebase can’t. You need to use Google Cloud server (which is not free if it is a high traffic). • Realms DB is the reactive programming concept (Lazy loading). Firebase’s Realtime DB isn’t. • Realms DB needs to specify database schema, while Firebase isn’t. Firebase will save what ever it got.
  • 30. Realtime Database Structure • All Firebase Realtime Database data is stored as JSON objects, e.g.,
  • 31. Basic Writing Operation • Get a database reference • Writing something Save the {text: ‘Hello Text!’} as key ‘notes/1’ 
 into Firebase database
  • 32. 1.js
  • 33. 1.js
  • 34. What happen? • As the default, user who can write the realtime database must be authenticated. • Since our user is not yet authenticated, so the permission error is occurred. • For development, We can change this behavior by re-configure the Database permission.
  • 36. Sample Realtime DB Rules • Default (Require Authentication)
 
 
 
 
 • Public / Development (Open to everyone)
  • 37. Sample Realtime DB Rules • Private User Database (Which means only owners can access their information in database)
 
 
 
 

  • 38. Sample Realtime DB Rules • Private (No one can access the database, except admin can access via Firebase console)
  • 39. Change Realtime DB permission to Public • Change the rule to Public permission • Press “Publish” button
  • 40. Reload the App again • At Simulator, Cmd + R or R,R for reload • Now there is no warning sign. • Realtime database save successfully.
  • 41. Viewing Saved database • We can view the saved information in Firebase’s Realtime database at Firebase console. • https://console.firebase.google.com/project/{your- project-name}/database/data
  • 42.
  • 43. Chat Room App • Simple one chat room. • Showing number of online users. • Showing conversations publicly. • Send the chat message. • Setting the username 2.js
  • 44. Making Chat Room App UI 2.js
  • 45. User online / offline • Conditions • Online, when the app is active on the screen. • Offline, when the app is inactive or in background on the screen. • We need helps from a React Native’s library called “AppState”
  • 46. AppState • Can tell us whether the app is in foreground (active) on the screen, or in background (inactive). • active - The app is running in the foreground • background - The app is running in the background. The user is either in another app or on the home screen • inactive - This is a state that occurs when transitioning between foreground & background, and during periods of inactivity such as entering the Multitasking view or in the event of an incoming call
  • 47. Obtaining State • Accessing AppState.currentState (it was kept up- to-date by React Native) • E.g., If app in the foreground (active) state. • AppState.currentState == “active” • If app in the background state. • AppState.currentState == “background”
  • 48. Listening for State changes 2.js
  • 49. Key Logics for Online User Counting • Enter the app • Read the current onlineUser from Firebase • Add by 1 • Push it back to the Firebase. • Leave the app. • Read the current onlineUser from Firebase • Remove by 1 • Push it back to the Firebase.
  • 50. Want do some operation in background? • When user leave the app, the app become into the background state. • All JavaScript code is halted and unloaded from the memory. • All timers (setTimeout) are unable to execute, because their don’t found the codes to run in the memory. • We need an external library for running operation in background.
  • 51. react-native-background- timer • Installation • $|> npm install react-native-background-timer -- save • $|> react-native link • Usage
  • 52. Handling # of Online User 2.js
  • 53. 2.js
  • 54. On vs Once • firebaseRef.on(‘value’, callback) • Listening for data change forever. • When the data has changed, the call back is called. • firebaseRef.once(‘value’, callback) • Listening for data change only one time. Once it is changed, it called only one time and become inactive.
  • 57. Enter the App Again..
  • 58. Modifying DB value in 
 Firebase console
  • 59. Realtime DB Transaction • Problem occurs! • When two users open the app at the same time, when will be happen? • Both users read the amount of user as the same value, both users update the database by increasing by 1. Instead of adding by 2. • Number of online user and real online user is mismatched.
  • 62. Realtime DB Transaction • All transaction requests will be queued at the Firebase server and will be processed one-by-one. • Transaction guarantees that no other operations can write into database during the reading and writing operations in a transaction block. • This behavior, we called it atomic write operations. • Problems of mismatch number of online users when two or more users enter the app at the same time, solved!
  • 63. Q/A