AWS Amplify React Native Example: A Step-by-Step Guide

AWS Amplify simplifies building full-stack mobile and web applications by integrating powerful cloud services with minimal configuration. React Native, a popular framework for cross-platform mobile development, pairs perfectly with AWS Amplify to enable features like authentication, storage, and APIs. This article provides a practical example of using AWS Amplify with React Native to build a fully functional app.


What Is AWS Amplify?

AWS Amplify is a set of tools and services that allows developers to:

  • Add features like authentication, APIs, storage, and hosting.
  • Automate backend management with minimal coding.
  • Integrate seamlessly with popular front-end frameworks, including React Native.

AWS Amplify React Native Example

Objective

We’ll build a React Native app that:

  1. Uses AWS Amplify for authentication.
  2. Connects to a GraphQL API to manage a "Todo" list.
  3. Stores and retrieves data securely in the cloud.

Step 1: Set Up Your Environment

Prerequisites

  1. Node.js: Install Node.js.
  2. React Native CLI: Follow the React Native setup instructions.
  3. AWS CLI: Install and configure the AWS CLI.

Create a React Native Project

npx react-native init AmplifyTodoApp
cd AmplifyTodoApp

Step 2: Install AWS Amplify

Install Amplify Libraries

npm install aws-amplify aws-amplify-react-native

Initialize Amplify

    • Choose defaults for most prompts.
    • Select React Native as the framework.
    • Select default authentication and security configuration.

Push the changes to AWS:

amplify push

Add authentication to the project:

amplify add auth

Configure Amplify in your project:

amplify init

Step 3: Configure the React Native App

Add Amplify Configuration

Update App.js to configure Amplify:

import React from 'react';
import { Amplify } from 'aws-amplify';
import awsconfig from './src/aws-exports';
import { withAuthenticator } from 'aws-amplify-react-native';

Amplify.configure(awsconfig);

const App = () => {
  return (
    <>
      <YourApp />
    </>
  );
};

export default withAuthenticator(App);
  • withAuthenticator: Wraps your app with a prebuilt authentication UI.

Step 4: Add GraphQL API

    • Choose GraphQL as the API type.

Push the API to AWS:

amplify push

Define the schema:

type Todo @model {
  id: ID!
  name: String!
  description: String
}

Add a GraphQL API to your Amplify project:

amplify add api

Step 5: Fetch and Display Todos

Install Additional Dependencies

npm install @aws-amplify/datastore

Update App.js

import React, { useState, useEffect } from 'react';
import { FlatList, TextInput, Button, Text, View } from 'react-native';
import { DataStore } from '@aws-amplify/datastore';
import { Todo } from './models';

const App = () => {
  const [todos, setTodos] = useState([]);
  const [name, setName] = useState('');
  const [description, setDescription] = useState('');

  useEffect(() => {
    fetchTodos();
  }, []);

  const fetchTodos = async () => {
    const todoList = await DataStore.query(Todo);
    setTodos(todoList);
  };

  const addTodo = async () => {
    await DataStore.save(
      new Todo({
        name,
        description,
      })
    );
    fetchTodos();
  };

  return (
    <View style={{ padding: 20 }}>
      <TextInput
        placeholder="Todo Name"
        value={name}
        onChangeText={setName}
        style={{ borderBottomWidth: 1, marginBottom: 10 }}
      />
      <TextInput
        placeholder="Todo Description"
        value={description}
        onChangeText={setDescription}
        style={{ borderBottomWidth: 1, marginBottom: 10 }}
      />
      <Button title="Add Todo" onPress={addTodo} />
      <FlatList
        data={todos}
        keyExtractor={(item) => item.id}
        renderItem={({ item }) => (
          <View style={{ marginVertical: 10 }}>
            <Text style={{ fontSize: 18 }}>{item.name}</Text>
            <Text>{item.description}</Text>
          </View>
        )}
      />
    </View>
  );
};

export default withAuthenticator(App);

Step 6: Test the App

  1. Sign in using the Amplify-provided authentication UI.
  2. Add, view, and manage todos using the app.

Start the app:

npx react-native run-android
# or
npx react-native run-ios

Best Practices for AWS Amplify with React Native

  1. Secure Access: Use Cognito for secure user authentication.
  2. Optimize Queries: Use GraphQL queries efficiently to minimize latency.
  3. Enable Offline Capabilities: Amplify supports offline data syncing with DataStore.
  4. Monitor Usage: Use AWS CloudWatch to monitor API usage and performance.

Conclusion

AWS Amplify makes it easy to integrate cloud features into your React Native apps. By following this example, you can quickly set up authentication, a GraphQL API, and data management for a fully functional "Todo" app. AWS Amplify's simplicity and scalability make it an excellent choice for building modern mobile applications.