Проверка получений с App Store
Используйте доверяемый сервер для передачи с App Store. Используя Ваш собственный сервер позволяет Вам разработать свое приложение, чтобы распознать и доверять только Вашему серверу, и позволяет Вам гарантировать, что Ваш сервер соединяется с сервером App Store. Не возможно создать доверительное соединение между устройством пользователя и App Store непосредственно, потому что Вы не управляете ни одним концом того соединения.
Связь с App Store структурирована как словари JSON, как определено в RFC 4627. Двоичные данные являются закодированным base64, как определено в RFC 4648.
Считайте данные получения
Для получения данных получения используйте appStoreReceiptURL
метод NSBundle
определять местоположение получения приложения, и затем читать весь файл. Если appStoreReceiptURL
метод не доступен, можно отступить к значению транзакции transactionReceipt
свойство для обратной совместимости. Тогда отправьте эти данные в свой сервер — как со всеми взаимодействиями с Вашим сервером, подробные данные являются Вашей ответственностью.
// Load the receipt from the app bundle. |
NSURL *receiptURL = [[NSBundle mainBundle] appStoreReceiptURL]; |
NSData *receipt = [NSData dataWithContentsOfURL:receiptURL]; |
if (!receipt) { /* No local receipt -- handle the error. */ } |
/* ... Send the receipt data to your server ... */ |
Отправьте данные получения в App Store
На Вашем сервере создайте объект JSON со следующими ключами:
Представьте этот объект JSON как полезную нагрузку HTTP запрос POST. В тестовой среде использовать https://sandbox.itunes.apple.com/verifyReceipt
как URL. В производстве использовать https://buy.itunes.apple.com/verifyReceipt
как URL.
NSData *receipt; // Sent to the server by the device |
// Create the JSON object that describes the request |
NSError *error; |
NSDictionary *requestContents = @{ |
@"receipt-data": [receipt base64EncodedStringWithOptions:0] |
}; |
NSData *requestData = [NSJSONSerialization dataWithJSONObject:requestContents |
options:0 |
error:&error]; |
if (!requestData) { /* ... Handle error ... */ } |
// Create a POST request with the receipt data. |
NSURL *storeURL = [NSURL URLWithString:@"https://buy.itunes.apple.com/verifyReceipt"]; |
NSMutableURLRequest *storeRequest = [NSMutableURLRequest requestWithURL:storeURL]; |
[storeRequest setHTTPMethod:@"POST"]; |
[storeRequest setHTTPBody:requestData]; |
// Make a connection to the iTunes Store on a background queue. |
NSOperationQueue *queue = [[NSOperationQueue alloc] init]; |
[NSURLConnection sendAsynchronousRequest:storeRequest queue:queue |
completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { |
if (connectionError) { |
/* ... Handle error ... */ |
} else { |
NSError *error; |
NSDictionary *jsonResponse = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error]; |
if (!jsonResponse) { /* ... Handle error ...*/ } |
/* ... Send a response back to the device ... */ |
} |
}]; |
Проанализируйте ответ
Полезная нагрузка ответа является объектом JSON, содержащим следующие ключи и значения:
состояние
Также 0
если получение допустимо, или один из кодов ошибки, перечисленных в Таблице 2-1.
Для получений транзакции стиля iOS 6 код состояния отражает состояние получения определенной транзакции.
Для получений приложения стиля iOS 7 код состояния является отражениями состояние получения приложения в целом. Например, если Вы отправляете получение действительного приложения, содержащее подписку с истекшим сроком, ответ 0
потому что получение в целом допустимо.
получение
Представление JSON получения, отправленного за проверкой. Для получения информации о ключах, найденных в получении, посмотрите Поля Получения.
latest_receipt
Код состояния | Описание |
---|---|
21000 | App Store не мог считать объект JSON, который Вы обеспечили. |
21002 | Данные в |
21003 | Получение не могло аутентифицироваться. |
21004 | Совместно используемый секрет, который Вы обеспечили, не соответствует совместно используемый секрет на файле для Вашей учетной записи. Только возвращенный для iOS 6 разрабатывают получения транзакции для автовозобновляемых подписок. |
21005 | Сервер получения не в настоящее время доступен. |
21006 | Это получение допустимо, но истекла подписка. Когда этот код состояния возвращается к Вашему серверу, данные получения также декодируются и возвращаются как часть ответа. Только возвращенный для iOS 6 разрабатывают получения транзакции для автовозобновляемых подписок. |
21007 | Это получение от тестовой среды, но это было отправлено в продуктивную среду для проверки. Отправьте его в тестовую среду вместо этого. |
21008 | Это получение от продуктивной среды, но это было отправлено в тестовую среду для проверки. Отправьте его в продуктивную среду вместо этого. |
Значения latest_receipt
и latest_receipt_info
ключи полезны при проверке, в настоящее время активна ли автовозобновляемая подписка. Путем обеспечения любой транзакции подтверждают получение для подписки и проверки этих значений, можно получить информацию о в настоящее время активном периоде подписки. Если проверяемое получение для последнего возобновления, значения для latest_receipt
совпадает с receipt-data
(в запросе) и значение для latest_receipt_info
совпадает с receipt
.