Отсутствующие транзакции в квитанции Sandbox StoreKit - PullRequest
1 голос
/ 15 октября 2019

В приложении, над которым я сейчас работаю, есть набор непотребляемых товаров и подписки, которые могут быть продлены автоматически. Похоже, что через один или два дня купленные не расходуемые продукты удаляются из квитанции песочницы. После восстановления продукты предоставляются обратными вызовами обозревателя StoreKit, но они все еще отсутствуют в квитанции.

Я пробовал как локальную проверку, так и анализ через OpenSSL, а также удаленную проверку через серверы Apple, и результаты совпадают:продукты всегда отсутствуют. Обратите внимание, что это никогда не происходит с подписками, и истекшие и действительные всегда присутствуют в квитанции. Еще одна забавная деталь: продукты не пропадают сразу, они постепенно исчезают после заказа на покупку, так как тестовый пользователь «песочницы» «очищается».

Поскольку Apple Docs сообщает здесь что «Расходные материалы, элементы автообновления подписки и элементы невозобновления подписки остаются в квитанции на неопределенный срок», я ожидаю, что они будут там.

Кто-нибудь знает, является ли это ожидаемым поведением в песочнице? Есть ли какой-нибудь официальный ресурс Apple, заявляющий, что все будет хорошо, когда приложение будет запущено?

РЕДАКТИРОВАТЬ: Нашел точно такую ​​же проблему, опубликованную кем-то на форумах разработчиков здесь .

1 Ответ

0 голосов
/ 15 октября 2019

Massimo! Вы уверены, что ваши продукты не являются расходными материалами? Поскольку расходные материалы исчезают из квитанции.

Вот пример того, как проверка квитанции может быть выполнена через серверы Apple:

func validateReceipt(){
    guard let receiptUrl = Bundle.main.appStoreReceiptURL else {
            return
    }

    #if DEBUG
        let urlString = "https://sandbox.itunes.apple.com/verifyReceipt"
    #else 
        let urlString = "https://buy.itunes.apple.com/verifyReceipt"
    #endif
    let receiptData = try? Data(contentsOf: receiptUrl).base64EncodedString()
    let requestData = ["receipt-data" : receiptData ?? "", "password" : "YOUR_SHARED_SECRET", "exclude-old-transactions" : false] as [String : Any]
    var request = URLRequest(url: URL(string: urlString)!)
    request.httpMethod = "POST"
    request.setValue("Application/json", forHTTPHeaderField: "Content-Type")
    let httpBody = try? JSONSerialization.data(withJSONObject: requestData, options: [])
    request.httpBody = httpBody
    URLSession.shared.dataTask(with: request)  { (data, response, error) in
      // view your transactions here
    }.resume()        
}

Мы являемся платформой, которая управляет подписками, включая проверку квитанций,и у нас есть большой опыт в этой области - но у нас никогда не было проблемы, о которой вы говорите.

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

...