Как проверить 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/
Ответ 4
Сервер может проверить получение в App Store по Http Post. См. Https://developer.apple.com/library/ios/releasenotes/General/ValidateAppStoreReceipt/Chapters/ValidateRemotely.html.