Работая iOS-инженером в такой крупной компании, как Just Eat Takeaway.com, вы можете подумать, что вам всегда нужно работать над серьезными функциями или улучшениями. Хотя это может иметь место в большинстве случаев, это не означает, что вы не можете проявить творческий подход и придумать забавную функцию или пасхальное яйцо для сборки. И, конечно же, реализовать эту идею.

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

Как все начиналось 🏁 (2019)

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

Идея набрала обороты, и мы уже думали о добавлении удаленной конфигурации, чтобы она была активна только в пределах определенного диапазона дат. И инженеры Android даже думали о том, как встроить его в версию Android (используя эту библиотеку). Он достался владельцу продукта и дизайнеру. Но, к сожалению, из-за других приоритетов мы не встроили его в приложение в том году.

Как это продолжалось 🛠 (2020)

Идея снова была поднята в сентябре 2020 года. Так что она снова набрала обороты. И на этот раз он достался дизайнеру, который фактически создал дизайн и нестандартные частицы снега. Но в том же году приложение должно было измениться, и эластичный заголовок был удален, поэтому идея немного изменилась.

Таким образом, вместо эффекта снега внутри растягивающегося заголовка мы будем показывать эффект снега всякий раз, когда пользователь встряхивает свое устройство. Который будет напоминать снежный шар. Мы решили, что у нас будет диапазон дат, которые определят, будет ли эффект активен. Так, например. он будет отображаться только в том случае, если пользователь встряхнет свое устройство в период с 1 декабря по 15 января. И мы также решили, что эффект снега будет иметь фиксированное время, пока он не прекратится.

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

Поэтому после всех этих изменений и решений мы решили в том же году встроить его в приложение для iOS. В нашей команде мы работаем по принципу scrum. Поскольку фича уже прошла мимо владельца продукта и дизайнера. Нам нужен был только тикет/юзерстори. Который затем должен быть приоритетным в одном из наших спринтов. Итак, после этого я создал тикет. Наша команда уже знала об этой идее, поскольку ею поделились в канале Slack. Так что во время совещания по планированию спринта вопрос был поднят. И с нашим владельцем продукта и руководителем команды это было запланировано в спринте как нечто второстепенное, когда все будет сделано.

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

Он запущен 🎉 (2021)

Итак, в этом году мы уже все построили и осталось только включить пасхалку. Что мы и сделали с переключателем функций, который мы создали в прошлом году. Мы решили попробовать и включить его сначала в Нидерландах. Поскольку проблем не возникло, мы включили его в всех других странах. Какие страны следующие:

В общем, есть довольно много пользователей (несколько миллионов активных пользователей в месяц), которые могут обнаружить это маленькое пасхальное яйцо, если встряхнут свое iOS-устройство. Вы можете увидеть, как это выглядит на гифке ниже:

Техника ⚙️

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

  • логический
  • Двойной
  • Целое число
  • Нить
  • JSON

Итак, для хранения дат в конфигурации мы использовали тип переменной JSON, который выглядит так:

Дата начала и окончания в этом блоке JSON довольно проста. Продолжительность представляет собой количество секунд, в течение которых эффект будет отображаться после того, как пользователь встряхнет свое устройство. Эти данные отражаются в коде Swift следующим образом:

Данные извлекаются из Optimizely, который возвращает объект OptimizelyJSON. Поскольку нам это не нужно, мы просто преобразуем его в Словарь с помощью функции toMap() и используем JSONSerialization.data(withJSONObject:) для получения структуры Данные. Затем эти данные могут быть в основном проанализированы с использованием JSONDecoder с iso8601 стратегией декодирования даты.

Создание эмиттера снежных частиц

В основном мы использовали 8 разных изображений для нашего изображения снежинки. Мы помещаем эти имена изображений в перечисление CaseIterable. Это можно увидеть ниже:

Эмиттер частиц в Swift/iOS состоит из двух частей:

  • CAEmitterLayer (испускает частицы, в нашем случае снежинки)
  • CAEmitterCell (это ячейка, которую испускает эмиттер частиц)

Мы создали их подклассы с кучей значений. Так как снег в реальной жизни также довольно случайный, эти свойства также довольно случайны, что можно увидеть в примере кода ниже:

Где вы используете излучатель частиц?

Поскольку у нас есть собственный подкласс UIWindow в нашем приложении, именно здесь мы назвали эмиттер частиц. В основном это функция motionEnded, так как она наследуется от UIResponder. Многие другие базовые классы в UIKit наследуются от UIResponder, например UIView, UIViewController и UIApplication. Мы в основном переопределяем функцию в примере кода ниже, чтобы затем использовать эмиттер частиц:

Заключение

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

Если вы читаете эту статью примерно в декабре или январе, попробуйте встряхнуть свое устройство iOS с помощью приложения Takeaway. Никогда не знаешь, что найдешь ❄️