Multiplatform Mobile App Development (MMA301)
Vietnamese title: Phát triển ứng dụng di động đa nền tảng
Credits: 3
Prerequisites: FER202

Description:
This course helps learners master the knowledge of React Native. Learners can quickly develop mobile applications running on iOS and Android platforms. Contents to be implemented include:
- Overview of React Native and its benefits.
- Setting up the development environment.
- Understanding components and navigation.
- Hands-on experience with iOS simulator and Android emulators
- Techniques for styling applications.
- State management strategies using hooks and Redux.
- Managing user input and touch events.
- Using FlatList and SectionList for data presentation.
- Mobile Notifications: Learn to integrate personalized notifications to enhance user engagement.
- Databases: Explore using SQLite, Firebase for data management.
- Debugging techniques and tools.
- Publishing applications using Expo.
- Integrate mobile app with Gemini AI

Learning outcomes:
Understand what React Native is and how it can be used
Be able to integrated Gemini AI and Apply GenAI in solving problem
Be able to integrated Firebase services (FCM, Realtime database,...)
Understand how to push notification in React Native apps
Understand how to publish an application
Understand how React Native works
Be able to build the React-native Application
Be able to understand the Components used for Mobile development
Understand how to style for React Native apps
Be able to manage state using hooks and Redux
Be able to using list in react-native for data presentation
Be able to use Debugging and Developer's Tools
Understand how to Modeling and Storing data

Student tasks:
- Students must attend at least 80% of contact slots in order to be accepted to the final examination.
- Student is responsible to do all exercises given by instructor in class or at home and submit on time
- Promptly access to the https://flm.fpt.edu.vn/ for up-to-date course information

Tools:
- Visual Studio Code (https://code.visualstudio.com)
- Internet
- ChatGPT (https://chatgpt.com)
- Gemini (https://gemini.google.com/app)
- V0 by Vercel (https://v0.dev)

Materials:
description: React Native: Developing Android and iOS Apps
publisher: Coursera
note: https://www.coursera.org/learn/mobile-app-notifications-databases-publishing
description: Mobile App Notifications, Databases, & Publishing
publisher: Coursera
note: https://www.coursera.org/learn/react-native-developing-android-and-ios-apps
description: https://docs.expo.dev/
publisher: Expo
note: https://docs.expo.dev/

Assessments:
category: Assignment
type: on-going
weight: 10.0
duration: Guided and reviewed in tutorial sesions;
Cont. at home
question_type: CLO1, CLO2, CLO3, CLO4, CLO5, CLO6, CLO7, CLO8, CLO9,
CLO10,CLO11,CLO12,CLO13
no_question: practical exercises
grading_guide: Assignment 1: CLO1 - CLO7
Assignment 2: CLO1 - CLO13
note: Teachers support tutorials and students do them by themselves
category: Practical Exam
type: on-going
weight: 20.0
duration: 85'
question_type: CLO1, CLO2, CLO3, CLO4, CLO5, CLO6, CLO7, CLO8, CLO9,
CLO10,CLO11,CLO12,CLO13
no_question: Preferable to be marked by scripts
grading_guide: problem(s) to solve by programming with AI integration covering CLO1 - CLO13
note: supervised by instructor
category: Progress test
type: on-going
weight: 10.0
duration: 20'-40'
question_type: CLO1, CLO2, CLO3, CLO4, CLO5, CLO6, CLO7, CLO8, CLO9,
CLO10,CLO11,CLO12,CLO13
no_question: essay or multiple choice
knowledge_and_skill: 15-30 if multiple choice
grading_guide: PT 1: CLO1 - CLO7
PT 2: CLO8 - CLO13
note: supervised by instructor
category: Project
type: on-going
weight: 20.0
duration: Guided and reviewed in tutorial sesions;
Cont. at home
question_type: CLO1, CLO2, CLO3, CLO4, CLO5, CLO6, CLO7, CLO8, CLO9,
CLO10,CLO11,CLO12,CLO13
no_question: a problem similar to
real one
grading_guide: problem(s) to solve by programming with AI integration, covering CLO1 - CLO13
note: Individual or team work, guided by instructor, submission by a given deadline
category: Final exam
type: Final exam
weight: 40.0
duration: 60'
question_type: CLO1, CLO2, CLO3, CLO4, CLO5, CLO6, CLO7, CLO8, CLO9,
CLO10,CLO11,CLO12,CLO13
no_question: multiple choice
knowledge_and_skill: 50
grading_guide: all topics;
more than 70% new questions (for the current semester);
note: supervised by proctor(s) sent by exam board

Schedule:
session: Course Introduction
learning_outcomes: I
materials: MMA301
session: Introduction to React Native
- What is React Native
- Features and Use Cases of React Native
- React Native architecture
learning_outcomes: I
session: Setting up the React Native Development Ecosystem
- Common Dependencies
- Node.js Installation
- Android Studio Setup
- Android SDK Configuration
- Environment Variables: Set up the ANDROID_HOME environment
learning_outcomes: TU
session: Setting up the React Native Development Ecosystem (Cont)
- Expo and Its Features
- Install Expo Go on your device
- Expo CLI
- Setting up the Environment using Expo Snack
learning_outcomes: TU
session: Emulator and Simulator Basics in React Native Development
- Understanding Android SDK Emulator - Android SDK Emulator
- Working with Android Emulator using Android Studio
- iOS Simulator
- Configuring iOS Simulator
learning_outcomes: TU
session: - Navigating the project structure in React Native using Expo commands
- Compare Expo CLI versus React Native CLI
learning_outcomes: I
session: Introduction to Virtual DOM in React Native
learning_outcomes: I
session: Introduction to Basic Components
- View
- Text
- Image
- Button
- Text Input
- Scroll View
- Flat List
learning_outcomes: I
session: Introduction to React Navigation Components
Implementation of Stack, Drawer, and Tab Navigation
learning_outcomes: TU
session: Introduction to Stylesheets
learning_outcomes: I
session: Styling with Layouts and Flexbox
learning_outcomes: TU
session: Using Styled-Components in React Native
learning_outcomes: TU
session: Managing State with useState and useReducer
learning_outcomes: TU
session: Using Context API for State Management
learning_outcomes: TU
session: Redux in React Native
learning_outcomes: TU
session: Handling TextInput and Forms
learning_outcomes: TU
session: Validating Forms with Formik and Yup
learning_outcomes: TU
session: Using AsyncStorage for Persistent Data
learning_outcomes: TU
session: Introduction to FlatList and SectionList
learning_outcomes: ITU
session: Implementing Pull-to-Refresh
learning_outcomes: TU
session: Implement Infinite Scrolling
learning_outcomes: TU
session: Assignment 1
learning_outcomes: U
session: Assignment 1
learning_outcomes: U
session: Assignment 1 Review
Project Introduction
learning_outcomes: TU
session: Progress Test 1
learning_outcomes: U
session: Working with React DevTools 
- Inspecting Components
- Using Context API
learning_outcomes: ITU
session: Working with React DevTools  (Cont)
- Performance Profiling
learning_outcomes: TU
session: Handling Errors and Debugging 
- Importance of Error Handling
- Common Error Types
- Error Handling Techniques:
learning_outcomes: TU
session: Handling Errors and Debugging  (Cont)
- Debugging Tools
learning_outcomes: TU
session: Creating Android APK Files
Handling Updates in React Native
learning_outcomes: TU
session: Mobile App Notifications, Databases, & Publishing Introduction
learning_outcomes: I
session: Handling Notifications in Mobile Apps
Notification Delivery Systems
learning_outcomes: TU
session: Creating Notifications in React Native
learning_outcomes: TU
session: Embedded databases introduction
- Local Storage
- SQLite
- Couchbase Lite
- LevelDB
- BerkeleyDB
Best Practices for Developers
learning_outcomes: I
session: CRUD Operations in Embedded Databases
- Operations
learning_outcomes: TU
session: CRUD Operations in Embedded Databases ( cont )
- Practical Application
learning_outcomes: TU
session: Overview of Remote Databases
learning_outcomes: I
session: Connecting Mobile Apps to Remote Databases
learning_outcomes: TU
session: Introduction to Firebase
learning_outcomes: I
session: Explore Google Firebase
learning_outcomes: TU
session: Creating Notifications in React Native with Firebase
learning_outcomes: TU
session: Gemini AI integration
- Get API key
- Project configuration
learning_outcomes: TU
session: Gemini AI integration (cont)
- AI Model selection
- Make promt and processing result
learning_outcomes: TU
session: Map integration
- Request permission
- Access location API
learning_outcomes: TU
session: Image picker integration
learning_outcomes: TU
session: Assigment 2
learning_outcomes: U
session: Assigment 2
learning_outcomes: U
session: Assigment 2 review
learning_outcomes: TU
session: Review
learning_outcomes: TU
session: Review
learning_outcomes: TU
session: Review
learning_outcomes: TU
session: Progress Test 2
learning_outcomes: U
session: Course summary
learning_outcomes: TU
session: Course summary
learning_outcomes: TU
session: Final Project Defense
learning_outcomes: TU
session: Final Project Defense
learning_outcomes: TU
session: Final Project Defense
learning_outcomes: TU
session: Final Project Defense
learning_outcomes: TU
session: Final Project Defense
learning_outcomes: TU
session: Final Project Defense
learning_outcomes: TU