Я реализую покупки в приложении для своего приложения (для его выхода) и поддерживаю поддержку iOS6 и iOS7. Мой вопрос связан с различиями между невозобновляемыми механизмами подписки на iOS6 и iOS7, а точнее на то, как осуществляется восстановление. Чтобы разместить как iOS6, так и iOS7, я применил серверное решение для восстановления. Я по желанию разрешаю пользователю создавать имя пользователя/пароль, которые могут быть использованы на другом устройстве (или на том же устройстве, если данные потеряны) для восстановления. У меня большая часть этого в основном работает, но по мере того, как я прогрессировал с моим тестированием, я нашел кое-что любопытное.
Исходная часть моего процесса восстановления для iOS7 использует SKReceiptRefreshRequest для обновления квитанции в приложении. Когда я удалю приложение с устройства iOS7, переустановите (на данный момент нет квитанции, проверено с помощью iExplorer) и выполните восстановление, SKReceiptRefreshRequest восстанавливает 10 покупок (которые я создал во время тестирования для этого конкретного пользователя), Один из них - нерасходуемый, а девять квитанций не обновляются. Это меня смущает. В документах Apple я ожидал увидеть только нерасходные покупки в обновленной квитанции. Из https://developer.apple.com/library/ios/releasenotes/General/ValidateAppStoreReceipt/Chapters/ValidateLocally.html:
"Расходные материалы и не обновляемые подписки: входящее приложение квитанция покупателя о потребляемом продукте или невозобновление подписка добавляется в квитанцию при совершении покупки. это хранится в квитанции, пока ваше приложение не завершит эту транзакцию. После этого момента он будет удален из чека в следующий раз квитанция обновляется - например, когда пользователь совершает другую покупку или если ваше приложение явно обновляет квитанцию."
Как относящийся к не возобновляемым подпискам, от https://developer.apple.com/in-app-purchase/In-App-Purchase-Guidelines.pdf:
Используйте iCloud или собственный сервер для отслеживания покупок и разрешите пользователю восстановить приобретенные подписки на все устройства iOS, принадлежащие одному Пользователь
И следующая таблица из (https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/StoreKitGuide/Chapters/Products.html)
У кого-нибудь есть идеи?
Вопрос: Почему SKReceiptRefreshRequest оставляет покупки для невозобновления продуктов в квитанции? Является ли это ошибкой в документах Apple или что-то еще происходит?
2/23/14; Обновление: Недавно я опубликовал отчет об ошибке в Apple. Еще нет слова. Хотя, на самом деле, я не хочу, чтобы эта "ошибка" исчезла!
10/20/15; Обновление: Кажется, что Apple действительно решила эту "ошибку". Теперь, когда я делаю восстановление с помощью SKReceiptRefreshRequest
(который, по-видимому, рекомендуется Apple для восстановления, см. https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/StoreKitGuide/Chapters/Restoring.html), я теперь я не получаю невозобновляемые покупки подписки, появляющиеся в квитанции. Я получаю только расходные материалы (у моего приложения есть только не возобновляемые подписки и покупки без расходных материалов). Я собираюсь представить отчет об ошибке Apple сразу после того, как я напишу это как минимум, их документы неоднозначны по ожидаемому поведению.
До сих пор мое тестирование включало мое приложение, работающее на iOS 8.4 и iOS9 (бета-версия 9.1 на самом деле, поскольку у меня нет правильного устройства, на котором запущена производственная версия), и поэтому кажется, что это изменение на стороне сервера с Apple и, строго говоря, изменение iOS/устройства. Также обратите внимание, что все мое тестирование до сих пор находится в разработке моего приложения, а также в песочнице для покупки приложений. Я скоро проведу производственный тест.
12/3/15; Обновление;. При запросе поддержки Apple Tech Support я провел еще несколько тестов. На этот раз на iPad работает iOS9.2 beta 4 (13C75). Кажется, мы вернулись к "нормальному" сейчас с не обновляющимися подписками. То есть, когда я делаю восстановление, я снова вижу возобновление подписки в квитанции.