16

Итак, у меня есть приложение, которое требует подписки (через IAP) и предоставляет виджет Today. Внутри виджета (а также в приложении) я использую RMStore для проверки поступления заявки в комплекте для активной подписки. Он отлично работает в песочнице, в том числе при установке через TestFlight. Но сегодня приложение было одобрено Apple, и как только я протестировал версию «жить в магазине», в то время как основное приложение увидело покупки пользователя в приложении к приложению, Today Extension не читал квитанцию ​​о приеме, и таким образом не нашли подписки!iOS in-app-purchase + Today Виджет расширения

Оба варианта «Сегодня» и основное приложение используют один и тот же код для чтения квитанции приложения и поиска информации о подписке. Почему он будет работать в основном приложении, но не в расширении? Это известная проблема? Это как-то связано с RMStore, а не с самим StoreKit? Есть ли что-то умное/различное, что я должен делать?

Я думаю, может быть, проблема связана с проверкой квитанции - может быть, например, что-то вроде идентификатора пучка в песочнице и App Store для расширения?

Это действительно разочаровывает, так как для меня нет возможности проверить любое потенциальное решение без повторной отправки в App Store, а затем проверить его после его выпуска и вытащить из магазина, если он сломан, так как в противном случае я есть пользователи, которые платят за то, чего они фактически не получают.

+2

Возможно, вам стоит опубликовать код, который вы используете для чтения квитанции приложения. Не все могут быть знакомы с RMStore. – user1459524

+1

Я не удивлюсь, если это проблема с правами здесь. IIRC, расширения приложений имеют код, подписанный с разными идентификаторами, чем родительский, и имеют отдельные идентификаторы приложений и все такое. Подтвердили ли вы, что расширение может действительно прочитать квитанцию ​​SK? Кроме того, я не уверен, что такое обходной путь, но если вы можете проверить его в своем приложении, это звучит как проблема. Я действительно видел только пользовательские настройки по умолчанию с группами приложений, описанными Apple, как способ общения с приложениями, поэтому это действительно сосать, если SK действительно недоступен в расширении. – mszaro

+0

Я мог найти нулевую документацию о расширении чтения приложений, но поскольку она отлично работала в развернутой версией двоичного кода I (ошибочно?), Показанной в TestFlight, оказалось, что все в порядке. – DanM

ответ

6

Все квитанции (покупка приложения и покупка в приложении) хранятся в файле внутри пакета приложений. Расширение приложения находится в комплекте, который вложен внутри пакета приложений, поэтому я был бы удивлен, если бы он имел доступ к файлу получения во внешнем пакете (но стоит проверить, позвонив appStoreReceiptURL).

Таким образом, информация о квитанции (то есть либо сама квитанция, либо какой-либо результат обработки квитанции) должна быть передана из содержащего приложения на расширение посредством обычных средств, то есть с использованием shared container и maybe file coordination.

+0

Любые мысли о том, почему он может работать в режиме песочницы/через TestFlight, но не в App Store? – DanM

+0

В TestFlight все покупки в приложении должны быть бесплатными в любом случае. Что вы подразумеваете под «режимом песочницы»? Вы имеете в виду обычное тестирование, запустив приложение на устройстве разработчика? Попробовали ли вы использовать тестовые учетные записи App Store? ([Эта статья objc.io] (http://www.objc.io/issue-17/receipt-validation.html) имеет хороший обзор.) – roop

+0

Я имею в виду «режим Sandbox», как указано здесь: https: // developer.apple.com/library/ios/technotes/tn2259/_index.html ... т.е. с использованием тестового пользователя. Это работает независимо от того, был ли я развернут через здание напрямую к устройству с помощью XCode или через TestFlight. – DanM