У меня есть две автоматически обновляемые подписки, ежемесячная и годовая (iOS).Я могу сделать покупку, когда использую нового свежего пользователя в песочнице.Хотя я должен ввести свой пароль три раза.Вот поток:
- Нажмите на подписку
- Введите пароль
- Предложено ввести пароль еще раз
- получить "не удается подключиться к iTunes Store"ошибка
- попробуйте еще раз и введите пароль
- покупка успешно завершена.
Идем дальше, поэтому, как только это удается, я теперь подписан, и мой пользовательский интерфейс обновляется черезслушатель в appDelegate, который публикует уведомление, на которое я подписан.Но когда я пытаюсь сменить подписку с ежемесячной на ежегодную или наоборот, всегда выдается ошибка «Не удается подключиться к iTunes Store».Нет обновлений пользовательского интерфейса.Вот процесс:
- Нажмите на другую подписку
- Предложено ввести пароль iTunes
- Получите диалоговое окно «Подтвердить покупку», в котором говорится, что я изменяю свою подписку
- Нажмите «Продолжить»
- Получите оповещение об успехе «Все готово».
- Отключите оповещение
- Получите сообщение об ошибке «Не удается подключиться к iTunes Store»
- Мой слушатель не вызывался, пользовательский интерфейс не обновлялся и т. Д.
Но затем, если я отклоню ошибку и снова нажму на подписку, я получу предупреждение, в котором говорится:Я уже подписался на этот план, хотя ошибка была выдана, и мой слушатель не принял изменения.
Я использую Firebase.Я следовал инструкциям по быстрому старту и специфическим для Firebase документам.Все мои журналы отладки, кажется, в порядке, нет не 200 статусов, нет недействительных идентификаторов продукта.Вот некоторые фрагменты кода:
AppDelegate:
Purchases.debugLogsEnabled = true
Purchases.configure(withAPIKey: Constants.revenueCatKey)
Purchases.shared.delegate = self
FirebaseApp.configure()
authHandle = Auth.auth().addStateDidChangeListener() { (auth, user) in
if let uid = user?.uid {
Purchases.shared.identify(uid, { (info, error) in
if let e = error {
print("sign in error: \(e.localizedDescription)")
} else {
print("User \(uid) signed in")
}
})
}
...
}
}
extension AppDelegate: PurchasesDelegate {
func purchases(_ purchases: Purchases, didReceiveUpdated purchaserInfo: PurchaserInfo) {
if self.currentUser != nil {
if purchaserInfo.activeSubscriptions.contains(Constants.audiomeshSubscriptions.monthly) {
guard let myRef = DataService.instance.REF_PRIVATE else { return }
myRef.updateData(["plan" : "paidMonthly"]) { err in
if let err = err {
print("error updating user-private with new subscription: \(err)")
} else {
NotificationCenter.default.post(name: Notification.Name(rawValue: "purchaserInfoUpdated"), object: nil)
}
}
}
else if purchaserInfo.activeSubscriptions.contains(Constants.audiomeshSubscriptions.yearly) {
//do the same for yearly subscription
}
else {
//handle non-paying users here
}
}
}
}
UpgradeController (пользовательский интерфейс покупки):
@objc func purchaseButtonSelected(sender: AudiomeshButton) {
let buttonTag = sender.tag
guard let option = options?[buttonTag] else { return }
let product:SKProduct = option.product
Purchases.shared.makePurchase(product, { (transaction, purchaserInfo, error) in
if let error = error {
print("error making purchase: \(error)")
} else {
print("Purchase Successful")
}
})
}