Как проверить ios In-App Purchase на вашем сервере

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

Мне нужно создать все управление пользователями, и я хотел бы знать, для всех зарегистрированных пользователей, что они уже купили на своих устройствах iOS, чтобы они бесплатно получали веб-приложение или что-то в этом роде. Итак, есть ли способ проверить ящик Apple Store, если этот пользователь уже купил какой-то продукт?

РЕДАКТИРОВАТЬ:

Сценарий выглядит следующим образом:

Пользователь A купить приложение B на мобильном устройстве. После этого я хотел бы проверить на своем сервере (на моей веб-странице...), если пользователь A купил приложение B или (похоже), какое приложение было куплено пользователем A.

Я не хочу отправлять сообщение с мобильного устройства на мой сервер, что пользователь A Purchase app B, потому что пользователи могут воспроизводить этот вызов на сервере, даже если они не покупают приложение B.

Я бы проверял на стороне сервера whit app Store, если пользователь A приобрел приложение B.

Ответы

Ответ 1

Получить квитанцию приложения (из файла в [[NSBundle mainBundle] appStoreReceiptURL]) и отправить его на ваш сервер. Тогда либо...

  • Разберите квитанцию и проверьте ее подпись на сертификате Apple, как описано здесь (на вашем сервере, а не в приложении). Или,

  • Отправьте квитанцию (опять же, со своего сервера) в хранилище приложений для проверки, как описано здесь.

Ответ 2

Я просто выпустил простое веб-приложение Python/Django (In-App Purchase Receipt Verifier), которое автоматически обрабатывает раздражающую часть этого процесса (т.е. Проверку получения на вашем сервере при сохранении криптографической целостности). Сам код относительно прост, но я полагал, что другие оценят, что вам не нужно делать эту работу.

Чтобы использовать его, просто убедитесь, что у вас есть готовый к использованию общий секретный ключ для вашего приложения, затем перейдите сюда и нажмите "Развернуть на Heroku". Ваше приложение будет запущено в течение минуты.

Я также включил пример кода для использования этого веб-приложения для проверки ваших квитанций в вашем приложении. Использование Swift 4:

guard let receiptURL = Bundle.main.appStoreReceiptURL,
    let data = try? Data(contentsOf: receiptURL) else {
      return
}

let encodedData = data.base64EncodedData(options: [])
let url = URL(string: "https://your-app.herokuapp.com/verify")!

var request = URLRequest(url: url)
request.httpBody = encodedData
request.httpMethod = "POST"

let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
    guard let data = data,
        let object = try? JSONSerialization.jsonObject(with: data, options: []),
        let json = object as? [String: Any] else {
            return
    }

    // Your application logic here.
}
task.resume()

Примечание. В StackOverflow существуют другие решения, предлагающие полностью выполнить проверку внутри самого приложения, но я бы очень рекомендовал это сделать. Из документации Apple в Руководстве по проверке чеков:

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

Дальнейшие улучшения, вероятно, можно было бы сделать, чтобы добавить какую-то криптографическую подпись в заголовок ответа, чтобы ваше приложение могло проверить, является ли ответ безопасным, но я, вероятно, добавлю это в будущую версию. Готово :)

Ответ 3

Для этого вы можете использовать следующие вещи: 1. Сделайте записи пользователей на вашем сервере вместе с статусом покупки. 2. Также вы можете использовать реквизиты платежа, предоставляемые яблоком, с помощью комплекта магазина.

Также, если вы используете не потребляемый продукт, вам просто нужна кнопка восстановления для этого. Для этого перейдите в документ Apple. https://developer.apple.com/in-app-purchase/