Реализация Family Sharing подписки в iOS-приложении

TRUETECH занимается разработкой, поддержкой и обслуживанием мобильных приложений iOS, Android, PWA. Имеем большой опыт и экспертизу для публикации мобильных приложений в популярные маркеты Google Play, App Store, Amazon, AppGallery и другие.

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

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

Услуги, которые мы предлагаем
Показано 1 из 1Все 1735 услуг
Реализация Family Sharing подписки в iOS-приложении
Средний
~3-5 дней
Часто задаваемые вопросы

Наши компетенции:

Этапы разработки

Последние работы

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    792
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    671
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1097
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    969
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    914
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    495

Реализация Family Sharing подписки в iOS-приложении

Family Sharing для подписок — функция, которую App Store поддерживает с iOS 14. Суть: один член семьи покупает подписку, остальные (до 5 человек) получают доступ автоматически. Для приложения это означает дополнительную логику проверки транзакций и прав доступа.

StoreKit 2 и проверка Family Sharing

В StoreKit 2 транзакция содержит поле ownershipType: .purchased (купил сам) или .familyShared (получил через Family Sharing). Приложение обязано проверять оба случая при верификации доступа.

for await verificationResult in Transaction.currentEntitlements {
  switch verificationResult {
  case .verified(let transaction):
    if transaction.productID == "com.app.premium" {
      switch transaction.ownershipType {
      case .purchased:
        grantAccess(source: .directPurchase)
      case .familyShared:
        grantAccess(source: .familySharing)
      @unknown default:
        break
      }
    }
  case .unverified:
    // не доверяем транзакции — логируем, не даём доступ
    break
  }
}

Чтобы подписка вообще поддерживала Family Sharing, нужно включить это в App Store Connect для конкретного продукта. Это делается один раз в настройках In-App Purchase: переключатель «Family Sharing» → «On for all members». После включения нельзя отключить для уже купленных подписок.

Где появляются проблемы

Revoke при выходе из семьи. Если пользователь покинул Family Group, транзакция типа .familyShared получает revocationDate. Transaction.currentEntitlements перестаёт её возвращать автоматически. Но если приложение кэширует статус подписки локально (в UserDefaults, Keychain) без проверки актуального состояния — пользователь продолжает пользоваться premium после revoke.

Правильный подход: слушать Transaction.updates постоянно, не только при старте:

func listenForTransactionUpdates() {
  Task {
    for await verificationResult in Transaction.updates {
      if case .verified(let transaction) = verificationResult {
        if transaction.revocationDate != nil {
          revokeAccess()
        } else {
          await transaction.finish()
          grantAccess()
        }
      }
    }
  }
}

Тестирование. В Xcode Sandbox нельзя полноценно протестировать Family Sharing без нескольких тестовых Apple ID, настроенных как семья в App Store Connect → Users and Access → Sandbox Testers. Создать тестовую семью там же через Family Sharing в Sandbox — обязательный шаг, без него проверка familyShared транзакций невозможна.

StoreKit 1 vs StoreKit 2. В старом API (SKPaymentTransaction) ownershipType недоступен напрямую. Для проверки family-shared в SK1 нужно валидировать receipt на сервере — поле in_app[].is_in_family_sharing. Миграция на StoreKit 2 значительно упрощает логику.

Что входит в работу

  • Настройка Family Sharing для продуктов в App Store Connect
  • Реализация проверки ownershipType через StoreKit 2
  • Обработка revoke при выходе из Family Group
  • Постоянный listener Transaction.updates на протяжении жизни приложения
  • Тестирование с Sandbox-семьёй
  • Документация для серверной части (если валидация на бэкенде)

Сроки

3–5 дней включая настройку App Store Connect и тестирование с Sandbox аккаунтами. Стоимость рассчитывается индивидуально.