Проверка квитанции в режиме онлайн для покупок в приложении для MAC - PullRequest
4 голосов
/ 29 сентября 2011

Для покупок в iOS для приложений мы можем использовать онлайн-API для проверки - http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/StoreKitGuide/VerifyingStoreReceipts/VerifyingStoreReceipts.html Это означает, что мы можем подтвердить покупку на собственном сервере.

Есть ли способ (API) для такой проверки покупок в приложениях для OSX?

Я нашел только этот фрагмент о проверке в приложении для Mac - http://developer.apple.com/library/mac/releasenotes/General/ValidateAppStoreReceipt/_index.html#//apple_ref/doc/uid/TP40010573-CH1-SW23, и похоже, что Apple не предоставляет API для онлайн-проверки.

Или, может быть, от Apple есть какой-то план поддержки онлайн-проверки для OSX ...

1 Ответ

7 голосов
/ 04 октября 2011

(РЕД. 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, выполнив следующие действия:

  1. Найдите файл квитанции приложения Mac (он находится в комплекте вашего приложения после того, как вы запустили приложение и ввели (тестовый) Apple ID и пароль.

  2. В командной строке base64 -i receipt будет base64 кодировать квитанцию ​​ без разрывов строк (это важно)

  3. Снова в командной строке 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...