Расширенное управление транзакциями в iOS SDK

Расширенное управление транзакциями поддерживается в Adapty iOS SDK начиная с версии 3.12.

Расширенное управление транзакциями в Adapty даёт вам больше контроля над тем, как транзакции обрабатываются, верифицируются и завершаются.

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

ВозможностьНазначение
appAccountTokenСвязывает транзакции Apple с вашим внутренним идентификатором пользователя
jwsTransactionПредоставляет подписанный Apple пейлоад транзакции для валидации
Ручное завершениеПозволяет завершать транзакции только после подтверждения успеха от вашего бэкенда

В совокупности эти инструменты позволяют выстроить надёжные кастомные процессы валидации, пока Adapty продолжает синхронизировать транзакции со своим бэкендом.

Большинству приложений это не нужно. По умолчанию Adapty автоматически валидирует и завершает транзакции StoreKit.
Используйте этот гайд только если вы проводите собственную валидацию на бэкенде или хотите полностью управлять жизненным циклом покупок.

Назначение appAccountToken

appAccountToken — это UUID, который позволяет связать транзакции App Store с внутренней идентичностью пользователя в вашей системе.
StoreKit привязывает этот токен к каждой транзакции, чтобы ваш бэкенд мог сопоставить данные App Store с вашими пользователями.

Используйте стабильный UUID, генерируемый для каждого пользователя, и повторно применяйте его для одного аккаунта на разных устройствах. Это гарантирует корректную привязку покупок и уведомлений App Store.

Токен можно задать двумя способами — при активации SDK или при идентификации пользователя.

Вы всегда должны передавать appAccountToken вместе с customerUserId. Если передать только токен, он не будет включён в транзакцию.

Доступ к JWS-представлению

При совершении покупки результат содержит транзакцию Apple в формате JWS Compact Serialization. Это значение можно передать на ваш бэкенд для независимой валидации или логирования.

let result = try await Adapty.makePurchase(product: paywallProduct)
let jwsRepresentation = result.jwsTransaction

Управление завершением транзакций

transaction-management.png

По умолчанию Adapty автоматически завершает транзакции StoreKit после валидации. Если нужно отложить завершение до получения подтверждения от вашего бэкенда, установите режим ручного завершения транзакций.

В этом режиме:

  • Adapty по-прежнему валидирует покупки и синхронизирует их со своим бэкендом.
  • Транзакции остаются незавершёнными, пока вы явно не вызовете finish().
var configBuilder = AdaptyConfiguration
    .builder(withAPIKey: "YOUR_API_KEY")
    .with(transactionFinishBehavior: .manual)

try await Adapty.activate(with: configBuilder.build())   

При использовании ручного завершения транзакций необходимо реализовать метод делегата onUnfinishedTransaction для обработки незавершённых транзакций:

extension YourApp: AdaptyDelegate {
    func onUnfinishedTransaction(_ transaction: AdaptyUnfinishedTransaction) async {
        // Perform your custom validation logic here
        
        // When ready, finish the transaction
        await transaction.finish()
    }
}

Чтобы получить все текущие незавершённые транзакции, используйте метод getUnfinishedTransactions():

let unfinishedTransactions = try await Adapty.getUnfinishedTransactions()