Как работают App Clips
App Clip это часть полного приложения (по правилам Apple App Clips не могут превышать 10 МБ), заточенная на выполнение определенной задачи. Например, заказ еды, покупка билета, бронирование гостиницы и т.д. При этом App Clips не надо устанавливать достаточно просто запустить по ссылке.
Мини-приложения не сохраняются на домашних экранах смартфона или планшета iOS, а размещаются в Библиотеке приложений. Через 30 дней с момента последнего запуска они автоматически удаляются с устройства. Для удобства пользователей в App Clips есть возможность добавить поддержку Apple Pay и вход через Apple ID для быстрой авторизации и оплаты услуг и товаров без регистрации, ввода дополнительной информации и номера банковской карты.
Также Apple сделала множество вариантов запуска App Clips как в офлайне, так и в онлайне:
- фирменная метка App Clips
- NFC-метка
- QR-код
- URL-ссылка
- баннер
- Apple Maps
- Siri.
При этом App Clips используют такую же кодовую базу, что и основное приложение, а по своему формату больше похожи на плагин или контейнер.
Краткое руководство по добавлению App Clips в Рамблер/кассу
В этой статье мы хотим рассказать о некоторых нюансах создания App Clips для приложений Рамблер/кассы.
Для интеграции мини-приложения на данный момент у нас выработан алгоритм:
1. Необходимо добавить target AppClip в проект, при этом указав целевой проект родительским (в нашем случае target Kassa).
2. Добавить при необходимости нужные pod'ы, указав их для конкретного target в Podfile (выполнить pod install).
3. В настройках таргета App Clips нужно перейти на вкладку Signing & Capabilities и в секции Associated Domains добавить домен вида appclips:{домен ссылки, которая будет открывать App Clips}. В случае Рамблер/кассы это appclips:kassa.rambler.ru и appclips:m.kassa.rambler.ru.
4. Указать версию и билд для target с App Clips, которые идентичны версии и билду родительского таргета.
5. Обработать входящие url для App Clips и реализовать навигацию для App Clips в методе, согласно документации Apple
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void -> Bool.
6. Собрать архив с приложением (оно должно автоматически включать App Clips) и отправить его в AppStore.
7. Вы великолепны!
Ссылки и открытие экранов
После того как пользователь нажимает Открыть AppClip/Приложение на всплывающем экране с App Clips, срабатывает метод:
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool
В userActivity.webpageURL лежит URL-ссылка, которую мы зашивали в качестве ссылки для App Clips.
После этого на основе параметров из этой ссылки откроется нужный экран приложения.
Виды ссылок
В данный момент App Clips Рамблер/кассы поддерживает три сценария покупки билетов:
- открытие экрана деталей конкретного мероприятия;
- открытие экрана деталей конкретного места;
- открытие экрана конкретного сеанса для конкретного мероприятия.
Для тестирования мы взяли рабочие ссылки на ивенты, доступные на Рамблер/кассе с различными параметрами.
1. Мероприятие. В качестве вводных параметров взяли creationid, cityid, creationtype:
m.kassa.rambler.ru/msk/movie/100547?creationid=100547&cityid=2&creationtype=movie
Ссылка открывает экран деталей мероприятия, окружение идентично покупке билета в полноценном приложении, за исключением следующих вещей:
- на экране с деталями мероприятия отсутствует кнопка добавления в избранное;
- отсутствует отображение видео на деталях мероприятия.
2. Место. В качестве вводных параметров взяли placeid, cityid, creationtype:
m.kassa.rambler.ru/msk/cinema/formula-kino-cdm-54351?placeid=97417&cityid=2&creationtype=movie
Ссылка открывает экран деталей места, окружение идентично покупке билета в полноценном приложении, за исключением:
- на экране с деталями места отсутствует нижняя панель с функционалом навигации до места, добавления его в избранное и возможностью поделиться ссылкой.
3. Ссылка на конкретный сеанс. В качестве вводных параметров взяли sessionid:
m.kassa.rambler.ru/msk/concert/717293?cityid=2&sessionid=54293235
Ссылка открывает экран с конкретным сеансом (в виде таблицы или схемы зала), окружение идентично покупке билета в полноценном приложении.
Проблемы и решения
1. App Сlip запускается и падает
Проблема наблюдается при использовании сторонних pod'ов. При сборке продукта не копируются библиотеки в конечную директорию. Причина отсутствие скрипта в Build Phases.
Для решения этой проблемы необходимо добавить скрипт (назовем его [CP] Embed Pods Frameworks):
${PODS_ROOT}/Target Support Files/Pods-{здесь имя таргета с апклипсом}/Pods-{здесь имя таргета с апклипсом}-frameworks.sh
В случае Рамблер/кассы скрипт выглядит так:
${PODS_ROOT}/Target Support Files/Pods-KassaAppClip/Pods-KassaAppClip-frameworks.sh
2. Сборка с App Clips собирается, архивируется и отправляется в AppStore, но приходит reject из-за веса приложения
В основном причиной этой проблемы являются какие-то большие ресурсы и сторонние библиотеки.
Одним из решений, позволяющим уменьшить размер библиотеки в целевом архиве, является включение Bitcode (Build Settings/Build Options/Enable Bitcode).
3. В App Clips метод UIDevice.current.identifierForVendor возвращает 000000-0000-000000.....
Это связано с особенностью App Clips: Apple ограничила доступ к идентификатору из соображений безопасности. В App Clips Рамблер/кассы мы используем рандомно сгенерированную 32-значную соль.
Что в итоге?
App Clips хороший способ повышения конверсии для таких e-com-приложений, как Рамблер/касса. В плюсе остаются все:
- пользователи могут быстро купить билет, не скачивая и не устанавливая основное приложение;
- разработчикам приятно быстро реализовать возможность, которая позволит быть зафичеренными или засветиться на лендинге с презентацией новой iOS 14: