Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Firebase
Code

Начинаем работать с хранилищем Firebase для iOS

by
Difficulty:IntermediateLength:LongLanguages:

Russian (Pусский) translation by Ilya Nikov (you can also view the original English article)

Введение

Помимо того, что разработчики iOS могут легко хранить данные в облаке, а также аутентифицировать пользователей через их надежные SDK, Firebase также предоставляет удобное решение для хранения данных для мультимедиа. Firebase Storage позволяет разработчикам сохранять и получать аудио, изображения и видео файлы в облаке. То есть Firebase Storage предоставляет набор SDK, чтобы дать разработчикам возможность управлять своими пользовательскими ресурсами контента вместе со своим непосредственным продуктом - базой данных Firebase Realtime, которая хранит текстовое содержимое пользователя.

Тем не менее, Firebase Storage больше, чем просто контейнер для хранения мультимедийных активов. Он помогает разработчикам, предлагая автономную синхронизацию для пользователей и их устройств, очереди и возобновления изображений и видео, когда пользователь уходит и возвращается в Интернет. Это работает аналогично тому, как Firebase Realtime Database организует синхронизацию пользовательских данных с фоновым контентом.

Firebase Storage logo

Эта статья - продолжение нашего предыдущего руководства по началу работы с Firebase Authentication для iOS, где мы рассмотрели, как управлять, хранить и работать с пользователями в Firebase.

Цели этого учебника

Это руководство представит вам SDK Firebase Storage, чтобы помочь вам управлять медиа-активами вашего приложения, такими как изображения, аудио- и видеофайлы, хранить их удаленно в облаке и получать их во всем приложении. В этом уроке вы узнаете, как:

  • настроить приложение для хранилища Firebase
  • создавать и работать с ссылками на хранилище
  • загрузить медиа-ресурсы в хранилище Firebase
  • выгрузить медиа-ресурсы из хранилища Firebase

Предполагаемые знания

В этом руководстве предполагается, что у вас было некоторое знакомство с Firebase, а также опыт разработки Swift и Xcode. Также важно, чтобы вы сначала ознакомились со статьей начало работы с Firebase Authentication для iOS, так как вам нужно будет аутентифицировать своих пользователей до доступа к большинству функциональных возможностей Firebase Storage, включая пути к ресурсам.

Что такое хранилище Firebase?

Как разработчик, вы можете использовать базу данных Firebase Realtime для доступа и взаимодействия с бакетом хранилища Firebase без сервера без необходимости создавать и размещать свои собственные серверы. Firebase Storage использует локальное кэширование на устройстве для хранения ресурсов в автономном режиме и обслуживания ресурсов, когда пользователь возвращается в сеть, при этом локальные данные автоматически синхронизируются.

Разработчикам больше не приходится иметь дело со сложностями синхронизации данных и контента через стандартные сетевые библиотеки Apple iOS и иметь дело с несколькими сценариями, которые могут вызвать перебои в передаче.

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

Безопасность также имеет первостепенное значение с Firebase Storage, так же как и с остальной частью набора продуктов Firebase. Это означает, что разработчики могут ограничить доступ к элементам хранения путем аутентификации пользователей с использованием Firebase Authentication, которая построена поверх императивной модели безопасности, которая позволяет контролировать доступ к путям, файлам и метаданным на основе ролей.

Наконец, приложения, размещенные на Firebase Storage, получают выгоду от инфраструктуры Google, которая масштабируется по мере роста абонентской базы. Мы рассмотрим некоторые из этих концепций позже в учебнике, но для начала давайте займемся настройкой вашего приложения для работы с Firebase. Затем мы рассмотрим указатели на хранилище.

Настройка проекта

Если вы раньше работали с Firebase, многое из этого должно быть вам знакомо. В противном случае вам нужно будет создать учетную запись в Firebase и следовать инструкциям раздела «Настройка проекта» статьи «Начало работы с Firebase Authentication для iOS».

Вы можете загрузить полный исходный код для этого проекта, указав в терминале следующее:

Для Storage нам нужно добавить Firebase/Storage в наш Podfile, как показано ниже:

Сохраните, а затем введите в своем терминале следующее:

В AppDelegate application:didFinishLaunchingWithOptions: методе существует следующая строка:

Убедитесь, что вы также настроили свой проект через Firebase Console правильно, как описано в разделе «Настроить проект» в разделе «Начало работы с Firebase Authentication для iOS».

Как только ваша среда будет готова, мы можем перейти к рассмотрению ссылок на хранилище, и начнем с того, как создать ссылочный указатель.

Создание и работа со ссылками на хранилище

Используя Firebase Storage, вы можете взаимодействовать с собственной облачной корзиной, которая представляет собой файловую систему ваших сохраненных изображений и видео. Вы используете так называемую ссылку на хранилище для определенного пути или файла в пути, в файловой системе, которую вы затем предоставляете вашему приложению, чтобы вы могли взаимодействовать с ним, передавая данные.

Наличие указателя на путь или файл в пути позволяет загружать, скачивать, обновлять или удалять этот путь. Чтобы создать ссылку, вы просто создаете экземпляр Storage.storage(), как показано ниже:

Теперь у вас есть ссылка на корень вашей иерархии файловой системы, и вы можете настроить структуру своей корзины, как вы хотите, например, создав структуру папок.

Чтобы получить доступ к файлам и путям в вашей корзине, вызовите метод child() следующим образом:

Ссылки являются сокращением для полного пути Firebase к вашему файлу с помощью вашей корзины вместо того, чтобы вводить весь URL-адрес пути Firebase. Помимо метода child(), вы также можете перемещаться по своей иерархии с помощью методов root() и parent(), и вы можете связать эти методы, как вы увидите ниже:

Как вы можете видеть, мы получим те же результаты для userProfilesRef, что и в предыдущем блоке кода. Самое замечательное в ссылках - это то, что они очень легкие, поэтому вы можете иметь столько ссылок в своем приложении, сколько захотите, при этом не влияя на производительность вашего приложения.

Теперь, когда вы понимаете основные аспекты работы с ссылками на Firebase Storage, давайте перейдем к загрузке и скачиванию файлов из вашей корзины.

Загрузка данных в хранилище Firebase

Самый простой способ загрузить файл - передать в NSData представление его содержимого в памяти:

Вы можете управлять своими загрузками в процессе, контролируя то, когда начинать, приостанавливать, возобновлять и отменять ваши загрузки. Вы также можете прослушивать последующие события, которые запускаются, а именно:

  • pause
  • resume
  • cancel

Ссылаясь на ранее загруженную uploadUserProfileTask, вы можете управлять своими загрузками, используя следующие методы:

Вы также можете отслеживать прогресс загрузки, просто установив наблюдателя в объект экземпляра задачи:

Посмотрим, каким образом можно скачать видео и изображения из корзины хранилища.

Скачивание данных из хранилища Firebase

Чтобы иметь возможность скачивать и представлять свои изображения, вы начинаете работу с загрузкой и объявляете ссылочный указатель на указанный вами путь. Затем начните скачивание с использованием функции dataWithMaxSize:completion: :

Если вы используете FirebaseUI, вы можете просто им управлять загрузкой, и тогда кэширование и отображение изображений для вас будет еще более простым:

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

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

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

Вооружившись видинием того, как работать со ссылками и как загружать и скачивать ресурсы из вашей корзины, теперь вы можете взглянуть на то, как реализовать Firebase Storage для нашего примерного проекта: FirebaseDo.

Пример проекта FirebaseDo

К настоящему моменту вы должны клонировать приложение FirebaseDo, поэтому двигайтесь дальше, создайте и запустите проект. Вы увидите, что все, что он делает, - это аутентифицирует пользователей, используя либо телефон, либо электронную почту:

App screen with sign in options by phone or email

Наша цель - постепенно улучшать функциональность приложения, так что, как только наши пользователи будут успешно проходить аутентификацию, они смогут загрузить фотографию профиля. Большая часть нашей работы будет в HomeViewController и его Associated Storyboard. Сначала обратимся к файлу HomeViewController.

HomeViewController

Прежде чем перейти к методам этого контроллера, нам нужно добавить в наш класс протокол UIImagePickerControllerDelegate, чтобы мы могли работать с его методами делегирования. Нам также нужно добавить экземпляр сборщика, чтобы наши пользователи могли выбирать фотографию из своей библиотеки.

Добавьте к концу метода viewDidLoad() следующее:

Мы собираемся реализовать метод refreshProfileImage(), который будет вызываться для загрузки изображения, которое мы отобразили в нашем ViewController. Сначала мы проверим, что пользователь действительно аутентифицирован до создания ссылки, которая будет извлекать изображение профиля пользователя из пути /images/user_id/profile_photo.jpg в нашей корзине. Наконец, мы обновим наше изображение с полученным изображением.

Затем мы создаем метод @IBAction для кнопки библиотеки фотографий, с которой мы вскоре подключимся из нашего сториборда:

Наконец, мы добавляем два метода делегата для нашего UIImagePickerController, чтобы обрабатывать, когда пользователь отменяет UIImagePicker, а также обрабатывает выбранное изображение:

Как только пользователь выбирает изображение, мы убираем пикер, но сохраняем ссылку на выбранное изображение. Затем мы создаем экземпляр StorageMetadata(), чтобы сообщить Firebase, что мы загрузим файл JPEG.

Как и в методе refreshProfileImage(), мы будем проверять, что пользователь аутентифицирован, а затем создадим ссылку на путь с изображениями, где мы хотим сохранить профиль нашего пользователя. Используя метод putData(), мы затем асинхронно загружаем наше изображение в указанное место в корзине, прежде чем устанавливать вью на выбранное изображение.

Прежде чем мы сможем создать и запустить наше приложение, нам нужно будет добавить соответствующие элементы управления в наш сториборд.

Сториборд

В наш основной сториборд добавьте изображение с образцом-заполнителем, которое будет представлять текущий профиль пользователя, а затем перетащите, чтобы связать представление изображения с тем, которое мы объявили как @IBOutlet в нашем классе HomeViewController. Затем добавьте панель инструментов с помощью кнопки, которую вы будете использовать в качестве @IBAction для вызова метода libraryAction(), который мы создали ранее в HomeViewController.

Ваш сториборд должен теперь напоминать следующее:

Storyboard view with placeholder profile image

При отсутствии каких-либо ошибок вы можете продолжить и снова собрать и запустить приложение, а также выполнить аутентификацию либо путем создания нового пользователя, либо с помощью набора существующих учетных данных пользователя.

Затем вам будет представлен HomeViewController, где вы выберете кнопку +, чтобы добавить изображение с вашего устройства или библиотеки фотографий симулятора. После того, как вы выбрали фотографию, она будет загружена в корзину Firebase. Вы можете удостоверится, что она успешно загружена, перейдя на вкладку «Storage» вашей Firebase Console, как показано ниже:

The Storage tab of your Firebase Console

Если вы остановите и запустите приложение в Xcode, вы также увидите изображение, которое вы последний раз загрузили, и подтвердите, что мы успешно загрузили и загрузили с помощью Firebase Storage.

Заключение

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

Firebase Storage является очевидным выбором для разработчиков iOS, которые уже находятся в экосистеме Firebase. Оно предоставляет разработчикам безопасность императивной модели безопасности, предоставляемой Firebase Authentication, а также возможности, предоставляемые базой данных Firebase Realtime.

Пока вы здесь, ознакомьтесь с некоторыми другими нашими статьями по разработке приложений для iOS!

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.