(РЕД. 11 сентября 2012 г.)
Мое приложение предоставляет онлайн-компонент, за который пользователи платят ежегодно.Не имеет смысла предоставлять это как нерасходуемый тип, поскольку он действительно работает только как расходный материал (однако это действительно неповторяющаяся подписка в iOS).Я хотел бы предложить это в приложении, и я думаю, что, наконец, у меня есть решение ...
Я использовал один из своих билетов Apple DTS, чтобы запросить утверждение, сделанное в документе StoreKitGuide.В нем говорится ...
"OS X поддерживает как метод проверки сервера, описанный в этой главе, так и метод локальной проверки ..."
Я получил ответ отApple говорит ...
"Шаги для проверки ваших покупок в приложениях для приложений Mac те же, что и для приложений iOS. Разница в том, что вы будете назначать квитанцию приложения в кодировке Base 64(а не содержимое свойстваactionReceipt) в поле квитанции. Получите полную квитанцию Mac App Store для вашего приложения, затем закодируйте ее с использованием кодировки base64. Создайте объект JSON с одним ключом с именеммит-данные и назначьте свойзакодированная квитанция к нему. Выполните действия, описанные в разделе «Проверка квитанции с помощью раздела App Store» в Руководстве по программированию покупок в приложении.
Примечание. В квитанции о покупке приложения включены в квитанцию соответствующего приложения Mac.проверьте квитанцию, связанную с вашим приложением, чтобы проверить действительность покупок в приложениие поступления, которые он содержит.Это также позволяет вам включить соответствующие функции в вашем приложении. "
Так что после некоторых неудачных попыток мне удалось заставить это работать с предупреждением о том, что данные чеков, возвращаемые серверами Apple, несодержит «хэш GUID» и, следовательно, не привязывает данные квитанции к какому-либо конкретному оборудованию.
Это можно легко проверить на вашем Mac, выполнив следующие действия:
Найдите файл квитанции приложения Mac (он находится в комплекте вашего приложения после того, как вы запустили приложение и ввели (тестовый) Apple ID и пароль.
В командной строке base64 -i receipt
будет base64 кодировать квитанцию без разрывов строк (это важно)
Снова в командной строке curl -d '{ "receipt-data": "<your b64 string here>" }' https://sandbox.itunes.apple.com/verifyReceipt
Возвращает данные JSON в формате
{"status":0,
"environment":"Sandbox",
"receipt":{"adam_id":"0",
"bundle_id":"uk.co.geode.easybooks",
"application_version":"2.2.7",
"download_id":"0",
"in_app":[ {"quantity":"1",
"product_id":"uk.co.geode.easybooks.syncing",
"transaction_id":"1000000034508678",
"purchase_date":"2012-09-05 12:00:17 Etc/GMT",
"original_transaction_id":"1000000034508678",
"original_purchase_date":"2012-01-24 10:16:17 Etc/GMT"} ]}}
Я еще не подтвердил это, но, по-видимому (по словам инженера Apple), любые расходные материалы в приложении будут добавлены в квитанцию.когда первый рurchased, но удаляется после любых дальнейших покупок или операций восстановления.Интересно, может быть, стоит сделать так, чтобы код, работающий в приложении, делал копию файла квитанции после каждой покупки на тот случай, если наши собственные серверы не работают в то время, когда приложение пытается проверить квитанцию.В противном случае пользователи могут попытаться восстановить покупки, не понимая, что это приведет к удалению чеков расходных материалов.
Надеюсь, это поможет.
(СЛЕДУЮЩИЕ КОММЕНТАРИИ)
У меня тоже самоевопрос.У меня есть приложение для iOS в магазине, в котором есть набор расходных и не расходуемых продуктов, которые можно приобрести в приложении.Расходный продукт - это услуга, которую выполняет мой веб-сервер.В методе делегата StoreKit paymentQueue: updatedTransactions: я использую свойство actionReceipt , которое является объектом NSData.Я кодирую это в base64 и отправляю на сервер.На сервере я передаю квитанцию на серверы Apple для проверки.
Но для Mac OS в транзакции SKPaymentTransaction нет свойства транзакции, поэтому мы не можем проверять квитанции таким же образом.
Мы можем делать непотребляемые продукты, которые могут вам помочь.Когда в Mac OS производится покупка в приложении, квитанция обновляется в комплекте приложений.Затем можно проанализировать файл квитанции, ища каждую квитанцию в приложении, которая хранится в файле квитанции в основном комплекте.Подробнее об этом см. http://developer.apple.com/library/mac/#releasenotes/General/ValidateAppStoreReceipt/_index.html
Это прекрасно работает для меня, когда я использую нерасходуемый продукт, но у меня есть один расходный материал, и это не обновлено в файле квитанции приложения. Без свойстваactionReceipt я не вижу возможности для моего сервера проверить подлинность квитанции. Если у кого-то есть опыт, сообщите нам!
** Добавлено 5 октября 2011 **
Любой пользователь с учетной записью разработчика Apple может также прочитать об этом на форуме разработчиков Apple:
https://devforums.apple.com/message/548411#548411