Расширенное управление транзакциями в 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
Управление завершением транзакций
По умолчанию 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()