Если вы только начинаете изучать разработку мобильных приложений с React Native или ищете способ ускорить процесс создания, то Expo станет вашим идеальным союзником. Это фреймворк, который позволяет вам фокусироваться на написании кода, забыв о настройке сложного окружения.

Навигация по статье

Часть 1. Введение в Expo

В первой части нашего руководства мы разберём:

  • Что такое Expo и почему его выбирают разработчики?
  • Ключевые особенности Expo.
  • Установка и первый запуск приложения.

Что такое Expo?

Expo — это платформа для разработки мобильных приложений с использованием React Native. Она предоставляет инструменты, библиотеки и серверы, которые упрощают процесс разработки, тестирования и публикации.

С Expo вы можете:

  • Создавать кроссплатформенные приложения для iOS и Android с одним кодом.
  • Запускать приложение на своём телефоне без сборки APK или IPA.
  • Использовать мощные встроенные API (например, работу с камерой, уведомлениями, геолокацией).

Почему выбирают Expo?

  • Быстрота и простота: Expo экономит ваше время. Вам не нужно устанавливать Android Studio, Xcode или настраивать эмуляторы. Достаточно одной команды, чтобы запустить проект.
  • Инструменты «из коробки»: Expo предоставляет готовый набор модулей, таких как: expo-camera для работы с камерой, expo-notifications для push-уведомлений, expo-location для определения геолокации.
  • Автономная сборка: Вы можете собрать готовые APK или IPA файлы прямо из Expo. Это особенно полезно для новичков, которым сложно разобраться с нативными инструментами.
  • Обновления без магазина: Expo поддерживает OTA-обновления (Over-the-Air). Это значит, что вы можете обновлять приложение без необходимости отправлять новую версию в App Store или Google Play.

Когда использовать Expo?

Expo идеален для:

  • Быстрого прототипирования.
  • Небольших и средних приложений, которые не требуют кастомных нативных модулей.
  • Новичков, которые хотят сосредоточиться на изучении React Native.

Однако, если вам нужно:

  • Подключать сторонние нативные библиотеки (например, для работы с Bluetooth или сложной графикой).
  • Глубокая кастомизация нативного кода.

Тогда лучше использовать Bare Workflow, где вы получаете полный доступ к нативной части.

Основные инструменты Expo

  • Expo CLI: Это инструмент командной строки для создания, запуска и сборки приложений.
  • Expo Go: Приложение для тестирования вашего кода на реальном устройстве. Вы просто сканируете QR-код и видите изменения в реальном времени.
  • Expo Dev Tools: Веб-интерфейс для управления проектом. Здесь вы можете увидеть журналы ошибок, подключить своё устройство или настроить параметры приложения.

Установка и первый запуск приложения

Давайте перейдём от теории к практике!

Шаг 1: Установка Expo CLI

Убедитесь, что на вашем компьютере установлен Node.js (если нет, скачайте с официального сайта).

Установите Expo CLI глобально:

npm install -g expo-cli

Шаг 2: Создание нового проекта

Выполните команду:

expo init MyFirstExpoApp

Вас попросят выбрать шаблон:

  • blank: Пустое приложение, только React Native.
  • blank (TypeScript): То же, но с поддержкой TypeScript.
  • tabs: Шаблон с несколькими экранами и навигацией.

Для начала выберите blank.

Перейдите в созданную папку:

cd MyFirstExpoApp

Шаг 3: Запуск приложения

Запустите сервер разработки:

npm start

Откроется Expo Dev Tools в браузере. Здесь вы увидите QR-код, который можно отсканировать с помощью приложения Expo Go (скачайте из App Store или Google Play).

Шаг 4: Изменение кода

Откройте файл App.js в любом текстовом редакторе (например, VS Code). Измените содержимое:

import React from 'react';
import { Text, View, StyleSheet } from 'react-native';

export default function App() {
  return (
    <View style={styles.container}>
      <Text style={styles.text}>Привет, Expo!</Text>
    </View>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
    backgroundColor: '#f5f5f5',
  },
  text: {
    fontSize: 24,
    fontWeight: 'bold',
    color: '#333',
  },
});

Сохраните файл, и приложение автоматически обновится. Вы увидите текст «Привет, Expo!» на экране телефона.

Что дальше?

Теперь у вас есть базовые знания о том, как начать с Expo. В следующей части мы углубимся в работу с модулями Expo, такими как камера, уведомления и геолокация. Мы также рассмотрим, как собрать готовый APK/IPA файл для публикации.

Expo — это идеальный старт для любого React Native разработчика. С ним вы сможете быстрее освоить основы и создавать крутые приложения. 🚀

Часть 2. Работа с модулями Expo

Теперь, когда мы познакомились с Expo и создали свой первый проект, давайте углубимся в использование его мощных инструментов. В этой части мы разберём:

  • Как подключать и использовать модули Expo.
  • Основные модули: камера, геолокация и уведомления.
  • Практическое создание функционала с использованием этих модулей.

Модули Expo: зачем они нужны?

Expo предоставляет множество встроенных API, которые облегчают работу с устройством. Вам не нужно вручную подключать нативные библиотеки или разбираться в Android и iOS коде — достаточно просто подключить нужный модуль.

Вот несколько популярных модулей:

  • expo-camera — работа с камерой.
  • expo-location — доступ к геолокации.
  • expo-notifications — отправка push-уведомлений.
  • expo-media-library — доступ к файловой системе и галерее.
  • expo-sensors — работа с акселерометром, гироскопом и другими сенсорами.

Как подключать модули?

Установка модуля

Например, для работы с камерой выполните команду:

expo install expo-camera

Импорт модуля

После установки вы можете импортировать его в код:

import { Camera } from 'expo-camera';

Запрос разрешений

Многие модули требуют разрешений (например, на доступ к камере или геолокации). Expo предоставляет удобные методы для этого.

Использование

Просто добавьте компонент или вызовите функцию из модуля.

Пример: Работа с камерой

Установка модуля камеры

Установите модуль:

expo install expo-camera

Запрос разрешений и отображение камеры

Вот как это можно сделать:

import React, { useState, useEffect, useRef } from 'react';
import { View, Text, Button, StyleSheet } from 'react-native';
import { Camera } from 'expo-camera';

export default function App() {
  const [hasPermission, setHasPermission] = useState(null); // Состояние разрешений
  const [cameraType, setCameraType] = useState(Camera.Constants.Type.back); // Тип камеры
  const cameraRef = useRef(null); // Ссылка на камеру

  useEffect(() => {
    (async () => {
      const { status } = await Camera.requestCameraPermissionsAsync(); // Запрашиваем разрешение
      setHasPermission(status === 'granted');
    })();
  }, []);

  const takePicture = async () => {
    if (cameraRef.current) {
      const photo = await cameraRef.current.takePictureAsync(); // Делаем снимок
      console.log(photo.uri); // Логируем URI изображения
    }
  };

  if (hasPermission === null) {
    return <Text>Запрашиваем разрешение...</Text>;
  }
  if (hasPermission === false) {
    return <Text>Доступ к камере запрещён</Text>;
  }

  return (
    <View style={styles.container}>
      <Camera style={styles.camera} type={cameraType} ref={cameraRef} />
      <View style={styles.controls}>
        <Button
          title="Сделать фото"
          onPress={takePicture}
        />
        <Button
          title="Сменить камеру"
          onPress={() => {
            setCameraType(
              cameraType === Camera.Constants.Type.back
                ? Camera.Constants.Type.front
                : Camera.Constants.Type.back
            );
          }}
        />
      </View>
    </View>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
  },
  camera: {
    flex: 1,
  },
  controls: {
    flexDirection: 'row',
    justifyContent: 'space-around',
    marginBottom: 20,
  },
});

Пример: Работа с геолокацией

Установка модуля геолокации

Установите модуль:

expo install expo-location

Получение координат

Добавьте следующий код:

import React, { useState, useEffect } from 'react';
import { View, Text, Button, StyleSheet } from 'react-native';
import * as Location from 'expo-location';

export default function App() {
  const [location, setLocation] = useState(null);
  const [errorMsg, setErrorMsg] = useState(null);

  useEffect(() => {
    (async () => {
      const { status } = await Location.requestForegroundPermissionsAsync(); // Запрашиваем разрешение
      if (status !== 'granted') {
        setErrorMsg('Доступ к геолокации запрещён');
        return;
      }

      const loc = await Location.getCurrentPositionAsync({}); // Получаем координаты
      setLocation(loc);
    })();
  }, []);

  return (
    <View style={styles.container}>
      <Text style={styles.text}>
        {errorMsg
          ? errorMsg
          : location
          ? `Широта: ${location.coords.latitude}, Долгота: ${location.coords.longitude}`
          : 'Определяем местоположение...'}
      </Text>
    </View>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
  },
  text: {
    fontSize: 16,
  },
});

Пример: Уведомления

Установка модуля уведомлений

Установите модуль:

expo install expo-notifications

Отправка уведомлений

import React, { useEffect } from 'react';
import { Button, View, StyleSheet } from 'react-native';
import * as Notifications from 'expo-notifications';

export default function App() {
  useEffect(() => {
    Notifications.requestPermissionsAsync(); // Запрашиваем разрешение
  }, []);

  const sendNotification = async () => {
    await Notifications.scheduleNotificationAsync({
      content: {
        title: 'Привет!',
        body: 'Это тестовое уведомление.',
      },
      trigger: { seconds: 5 }, // Отправляем через 5 секунд
    });
  };

  return (
    <View style={styles.container}>
      <Button title="Отправить уведомление" onPress={sendNotification} />
    </View>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
  },
});

Часть 3. Сборка приложения и публикация

Вы уже научились работать с Expo, подключать модули и использовать их для создания функционала. В этой части мы обсудим:

  • Как собрать приложение (APK/IPA).
  • Подготовку к публикации.
  • Интеграцию с внешними сервисами (например, аналитика и глубокие ссылки).
  • Советы для успешной публикации.

Сборка приложения

Expo предоставляет инструмент для сборки приложений, который избавляет вас от необходимости разбираться с Android Studio или Xcode.

Expo Application Services (EAS Build)

Expo предоставляет сервис EAS Build, который упрощает процесс создания APK и IPA файлов.

Установка EAS CLI

Для начала установите EAS CLI:

npm install -g eas-cli

Инициализация EAS в проекте

Выполните команду:

eas build:configure

Эта команда создаст файл eas.json, в котором будут указаны параметры сборки.

Сборка для Android

Для сборки APK выполните:

eas build --platform android

Expo создаст APK файл, и вы сможете скачать его через ссылку, которая появится в консоли.

Вы можете выбрать между apk (для тестирования) и aab (для публикации в Google Play). Убедитесь, что у вас есть Google Play Console для публикации приложения.

Сборка для iOS

Для сборки IPA файла выполните:

eas build --platform ios

Требования:

  • У вас должен быть аккаунт Apple Developer.
  • Сборка для iOS возможна только на macOS или через EAS Build.

После сборки файл будет доступен через консоль. Его можно загрузить в App Store через Transporter (официальное приложение Apple для публикации).

Подготовка к публикации

Перед тем как отправлять приложение в магазин, убедитесь, что оно готово.

Оптимизация кода

  • Используйте production сборку.
  • Убедитесь, что ваше приложение собрано для продакшна, где отключены DevTools и горячая перезагрузка.
  • Удалите лишние зависимости. Убедитесь, что в проекте нет неиспользуемых модулей. Это сократит размер приложения.

Настройка app.json

Файл app.json содержит метаданные вашего приложения, такие как название, значок и начальный экран.

Пример app.json:

{
  "expo": {
    "name": "My First Expo App",
    "slug": "my-first-expo-app",
    "version": "1.0.0",
    "orientation": "portrait",
    "icon": "./assets/icon.png",
    "splash": {
      "image": "./assets/splash.png",
      "resizeMode": "contain",
      "backgroundColor": "#ffffff"
    },
    "android": {
      "package": "com.example.myapp",
      "versionCode": 1
    },
    "ios": {
      "bundleIdentifier": "com.example.myapp",
      "buildNumber": "1.0.0"
    }
  }
}

Настройка значков и заставок

Иконка приложения: Создайте квадратное изображение 1024×1024 в формате PNG и укажите его в icon в app.json.

Заставка (splash screen): Создайте изображение 1080×1920 и укажите его в секции splash.

Интеграция с внешними сервисами

Аналитика (например, Amplitude)

Аналитика помогает вам понять, как пользователи взаимодействуют с приложением.

Установите Amplitude:

expo install expo-analytics-amplitude

Пример использования:

import * as Amplitude from 'expo-analytics-amplitude';

Amplitude.initializeAsync('YOUR_API_KEY');

Amplitude.logEventAsync('UserLoggedIn');

Глубокие ссылки (Deep Linking)

Глубокие ссылки позволяют открывать приложение с определёнными параметрами.

Настройте глубокие ссылки в app.json:

"expo": {
  "scheme": "myapp"
}

Теперь вы сможете открыть приложение с помощью URL:

myapp://some-path

Используйте модуль Linking для обработки ссылок:

import { Linking } from 'react-native';

useEffect(() => {
  const handleLink = (url) => {
    console.log('Ссылка открыта:', url);
  };

  Linking.addEventListener('url', ({ url }) => handleLink(url));
  return () => Linking.removeEventListener('url');
}, []);

Публикация приложения

Google Play

Загрузите файл aab в Google Play Console.

Заполните метаданные (скриншоты, описание).

Отправьте приложение на проверку.

App Store

Загрузите IPA файл через Transporter.

Добавьте приложение в App Store Connect.

Заполните метаданные и отправьте на проверку.

Советы для успешной публикации

  • Тестируйте приложение. Протестируйте его на разных устройствах и операционных системах.
  • Соблюдайте правила магазинов. Ознакомьтесь с требованиями Google Play и App Store.
  • Подготовьте качественные материалы. Используйте красивые скриншоты, видео и описание для привлечения пользователей.

Заключение

Теперь вы знаете всё необходимое для работы с Expo: от создания приложения до его публикации. Expo делает процесс разработки быстрым и удобным, позволяя сосредоточиться на главном — создании крутых приложений.

Следующий шаг за вами: внедряйте новые функции, экспериментируйте с модулями и запускайте свои приложения/

 

Комментарии

0

Без регистрации и смс