Реалізація 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 аккаунтами. Вартість розраховується індивідуально.