Механизм внешних покупок по ссылке в StoreKit

Инструкция как добавить StoreKit External Purchase Link Entitlement в приложение в России.

Поможем в чате для iOS разработчиков

Apple разрешила направлять пользователей из РФ на оплату цифровых покупок в приложении на внешнем сайте, минуя App Store Payments. Но чтобы вы могли это делать, нужно подать заявку, получить разрешение и обновить приложения.

Внутри одного региона вы не можете одновременно принимать и внешние платежи, и классические платежи через App Store. Но можно использовать внешние платежи для РФ, а для других регионов - классические

В статье рассматривается только External Purchase Link. Но есть еще и External Purchases (без Link), где внешняя покупка осуществляется в интерфейсе приложения. Например, карту предлагается ввести на одном из экранов.

Заявка

Заявка это что-то вроде анкеты, практически все поля заполняются автоматически. Подавать заявку по этой ссылке. У вас должен быть аккаунт компании, аккаунт физичего лица не подойдет. Обязательно без Small Business Program.

Ссылка на заявку работает только для регионов, где разрешили внешние покупки
 Подаёте заявку
Подаёте заявку

В заявке Apple просит подписанное платное соглашение, но для новых аккаунтов в РФ его не подписать. Если у вас оно подписано, просто следуйте инструкции.

Если платного соглашения нет, то попробуйте подать заявку без него — Apple проверять не будет. Если же заявку не открывается, вам нужно связаться с Apple и сказать что вы хотите активировать External Purchase Link. С недавнего времени Apple вручуню отрабатывает заявки для таких аккаунтов, писал про это в канале.

Чтобы принимать оплаты через App Store Payments, можно открыть компанию в Великобритании. Мы работем под ключ — ведём документы, получаем DUNS и помогаем получить банковский счет

Дальше введите название приложения (локализация не важна), Bundle ID и описание. Здесь мы написали коротко: приложение доступно только для iOS, внутри есть бесплатный и платный функционал.

 Заполняете инфо о приложении
Заполняете инфо о приложении

Следующий шаг — указать ваш эквайринг:

 Указываете ваш эквайринг
Указываете ваш эквайринг
Проверяйте чтобы эквайринг был не под санкциями. Нашу первую заявку отклонили, потому что мы указали ЮКассу

Сейчас работают эти эквайринги:

  1. Интеза
  2. Солид Банк
  3. Москоммерцбанк
  4. Фора Банк
  5. Дело Банк

Точно не работают эти:

  1. Райффайзенбанк, не подключают новых клиентов
  2. ЮниКредит, не подключают новых клиентов
  3. ЮКасса, под санкциями
  4. Ситибанк
  5. ОТП Банк
  6. Ренессанс Банк
  7. Азиатско-Тихоокеанский банк
  8. Кредит Европа Банк
  9. ББР Банк
  10. БКС Банк

Если у вас есть дополнительная информация про банки и эквайринги, напишите мне, я обновлю список.

Теперь заполняем информация о веб-сайте, здесь нужно указать страницу оплаты (куда будете направлять пользователей) и страницу поддержки по вопросам платежей.

Ссылка может содержать только путь — не должно быть параметров и меток. URL в заявке должен совпадать с реальной ссылкой

Эти URL вы будете добавлять в Info.plist. Фактически сайт открывать будете не вы, а системное окно. Без параметров тяжелее определить какой именно пользователь оплатил. Вам нужно будет или его авторизировать перед оплатой, или после оплаты попросить ввести почту.

 Заполняете инфо о сайте
Заполняете инфо о сайте

Требования к сайту

На сайте нужно указать:

  1. Оплачивать безопасно: используется шифрование платежных систем VISA International, MasterCard Worldwide, МИР
  2. Контакты технической поддержки по обработке платежей
  3. Приложение yourapp поддерживает оплату по внешней ссылке
  4. Ваша компания несёт ответственность за возврат платежей

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

Последний шаг — заполнить информацию о компании, заполняется руководителем:

 Заполняете инфо о компании
Заполняете инфо о компании

Проверка заявки

Нашу заявку отклонили через 7 дней, потому что эквайринг ЮКасса в этот момент находился под санкциями. Мы сменили эквайринг на Райффайзен, заполнили новую заявку. Но не смогли её отправить — наша старая заявка висела в статусе рассмотрения.

В течении месяца мы писали на eurodev@apple.com, чтобы аннулировать первую заявку. Она блокировала подачу новой заявки. Так мы потеряли время.

Я отправил вторую заявку. Через 7 дней увидел в Apple Developer что мне доступен Additional Capabilities для бандла приложения.

 Новый Capability
Новый Capability

Уведомлений на почту не приходило, так что регулярно проверяйте Developer, Certifies, Identifiers & Profiles.

Внутри Additional Capabilities выбираете ExternalPurchaseLink и применяете изменения. Теперь нужно интегрировать эту capabilty в приложение.

Настраиваем приложение

В списке Capability появится новая StoreKit External Purchase Link Entitlement (RU). Добавляете к приложению:

 Добавляете StoreKit External Purchase Link Entitlement (RU) Capability
Добавляете StoreKit External Purchase Link Entitlement (RU) Capability

В Info.plist добавляем словарь. В словаре указываем ссылку на оплату на сайте, для каждой страны своя ссылка:

<key>SKExternalPurchaseLink</key>
<dict>
   <key>ru</key>
   <string>https://yourapp.com/price</string>
</dict>

Аббревиатура страны по стандарту ISO.

Сайт внешних покупок нужно открывать не как ссылку, а вызывать try await ExternalPurchaseLink.open() из StoreKit. Пользователю покажут системный дисклеймер, что “полномочия Apple всё”, и если что-то пойдёт не так, разбираться с разработчиком придётся самостоятельно.

 Системный дисклеймер перед редиректом
Системный дисклеймер перед редиректом

Проверка приложения

Когда отправляете на проверку, прикрепите видео, где видно процесс авторизации, окно со встроенными покупками и переход на сайт. Обязательно показать что URL совпадает с URL в заявке.

В гайдах говорят про скриншот, но нас попросили именно видео

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

Мы отправили билд на проверку, но получили реджект. Правила для UI к этому моменту обновили. Выяснилось, что нельзя показывать тарифы в самом приложении, только кнопку на сайт для платежа.

Оформили в точности как в примере для американского референса для аналогичной capability, повторили даже иконку в кнопке. Символа иконки нет в SFSymbols, поэтому ниже в статье есть ссылка на картинку в векторе.

 В приложении нельзя указывать тарифы
В приложении нельзя указывать тарифы

Мы обновили приложение и прошли в App Store:

На странице приложения в App Store появилась вот такая метка. Мне больше понравился бы жёлтый восклицательный знак, но что поделать.

 Превью приложения в App Store
Превью приложения в App Store

Комиссия и отчёты

Компания должна регулярно отправлять 2 отчета: сводный и подробный.

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

В подробном требуется отчитаться о каждой оплаченной подписке с указанием SKU транзакции из чека на оплату.

Для отправки отчетов предоставляется 15 дней. Мы уже отправили в Apple Distribution International отчеты за финансовый период 31.12.23 - 03.02.24. Если бы мы не отправили их, то сотрудники Apple связались бы с нами 18.02.24, о чем написали бы нам на почту.

Каждый месяц мы отправляем отчеты по форме Apple о покупках. На основе отчетов в личном кабинете появляются счета за комиссию, 27%.

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

Ссылки по теме

Поправить или дополнить статью через Pull Request