IPhone StoreKit - недопустимый идентификатор продукта

Я пытаюсь проверить в App Purchase в среде песочницы.

Чтобы проверить код, я сделал следующее:

  • Создана учетная запись пользователя "Проверка покупки приложения" в разделе "Управление пользователями" в iTunes Connect

  • Созданы некоторые из продуктов для покупки приложений в разделе "Управление покупками в приложениях". Я использовал числовые значения и альфа-числовые значения для идентификаторов продуктов.

  • Загрузив приложение на iPhone, перейдите в Настройки- > Сохранить и выйдите из обычного хранилища и в тестовую учетную запись, созданную на шаге 1

  • Установите точку останова в (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response Обратный вызов

Все представленные идентификаторы продукта находятся в свойстве response.invalidProductIdentifiers. При отправке запроса я сначала попробовал точные идентификаторы продуктов, созданные во время шага 2. Я также попробовал префикс их с идентификатором Bundle:

NSString *id2 = @"com.super.duper.8";
NSSet *productList = [NSSet setWithObjects:id2, @"8", nil];

SKProductsRequest *request= [[SKProductsRequest alloc] initWithProductIdentifiers:productList];

Я пропустил что-то очевидное? Любая помощь приветствуется.

Ахим

Ответ 1

Если вы по-прежнему получаете недопустимые идентификаторы продуктов, я накапливал контрольный список всех различных причин:

http://troybrant.net/blog/2010/01/invalid-product-ids/

Ответ 2

Я провел два дня, борясь со всеми моими продуктами. Request (для AppID) оказался в списке response.invalidProductIdentifiers, а не в списке response.products. Apple определенно сделала работу класса F в работе с их storekit. Это запутанно, переплетено и сложно.

Я, наконец, разрешил это. Один очень важный урок, который я узнал, как это указано несколькими на форумах: может потребоваться много часов для того, что вы ввели на itunesconnect.apple.com, чтобы повлиять.

В xcode есть две части: имя приложения и AppID, а также то, что вы ввели в itunesconnection, они должны соответствовать точно (с учетом регистра). Если вы зарегистрировали или внесли изменения в приложение AppleID (я также выполнил все мои контракты и банковскую информацию, как было предложено некоторыми из них, что действия по покупке не будут работать без выполнения этой части), вы также можете ложиться спать, прежде чем тестировать его снова потому что на самом деле для моего решения на самом деле требуется несколько часов. Я был так расстроен, борясь с этим вопросом, прежде чем мой девятилетний перетащил меня на постельное время, а затем удивился, увидев, что проблема исчезла, когда я проснулся.

Я нашел предложения Eddy71 в http://www.iphonedevsdk.com/forum/iphone-sdk-development/21035-problems-creating-test-user-app-purchase.html действительно полезными. Прежде чем разрешить это, я сделал все, что мог, в списке проверки Eddy, и все еще получал нулевые продукты. Один из моих опасений заключался в том, что без добавления двоичного кода для завершения регистрации приложения в itunesconnect было нормально (нет необходимости жить вживую, как описано в http://blog.mugunthkumar.com/coding/iphone-tutorial-%E2%80%93-in-app-purchases/). Это действительно нормально. Убедитесь, что "очищенная для продажи" проверена и в значке зеленый (вам нужно сделать дополнительный шаг, чтобы утвердить его после заполнения формы). Другой страх заключался в том, что я могу использовать предварительный предварительный вариант разработчика (не временный) в режиме отладки, это также действительно нормально. Надеюсь, это поможет некоторым из вас. Удачи и веры. Он будет работать в конечном итоге.

Ответ 3

Наш вопрос был последним пунктом бюллетеня Apple FAQ: " Почему мои идентификаторы продукта возвращаются в массив invalidProductIdentifiers?:

  • Вы не выполнили все финансовые требования (см. раздел "Контракты, налоговая и банковская информация" этого документа).
  • Вы не использовали явный идентификатор приложения.
  • Вы не использовали профиль Provisioning Profile, связанный с вашим явным идентификатором приложения.
  • Вы не использовали правильный код продукта в своем коде. См. Технические вопросы Q & A, QA1329, "В идентификаторах продуктов для покупки приложений" для получения дополнительной информации о идентификаторах продуктов.
  • Вы не очистили свои продукты для покупки приложений в iTunes Connect.
  • Возможно, вы изменили свои продукты, но эти изменения еще не доступны для всех серверов App Store.
  • Если вы или App Review отклонили свой последний бинарный файл в iTunes Connect.

Я изменил самую последнюю версию (которая была отклонена) на "Ожидание загрузки", нажав "Готово для загрузки двоичных файлов" в iTunes Connect, и проблема была решена примерно через 10 минут.

Ответ 4

ОК, что телефон взломан, вы просто должны удалить appSync в Cydia, затем он работает

Ответ 5

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

Ответ 6

Попробуйте сбросить настройки iphone и удалить приложение из iphone и использовать идентификатор продукта запроса непосредственно без идентификатора пакета

Ответ 7

У Apple есть фантастический документ, который не очень хорошо известен, который охватывает это в конце. Это также развевает некоторые мифы о вещах, которые не помогают (например, отправляют двоичные файлы).

Technote 2259 "Добавление покупки в приложения для приложений iOS и Mac"

Ответ 8

Для всех, у кого есть эти проблемы, я настоятельно рекомендую читать этот поток на форуме Apple.

Ответ 9

Я попробовал все, что предлагалось на форумах Apple, и здесь, и все еще не мог заставить его работать. Найденное решение - ваше приложение должно быть передано Xcode для включения песочницы.

Очевидно, да? Ну, если вы работаете с обновлением существующего приложения, устройство по-прежнему будет рассматривать его как приложение, установленное в App Store.

Итак, удалите приложение с вашего устройства. Затем установите приложение обратно на устройство с помощью функции "Сборка и запуск" с подключенным к вашему компьютеру устройством. Теперь он должен работать:)

Ответ 10

Здесь вы ошибаетесь, вам нужно это в вашем коде:

NSSet *productList = [NSSet setWithObjects:product id]

Вы можете получить этот идентификатор продукта из iTunes connect.

И вам нужно убедиться, что вы создали тестового пользователя и вышли из вашей исходной учетной записи iTunes. Пожалуйста, не заходите в учетную запись тестового пользователя, независимо от того, что говорит документация Apple, просто используйте ее, когда появляется всплывающее окно.

Ответ 12

Еще одна проблема, с которой я столкнулся, заключалась в том, что мне нужно было перейти в Window > Organizer в Xcode и удалить мое приложение и профили обеспечения и повторно добавить профиль разработки. Я перезапустил устройство и xcode в качестве дополнительной меры.

Ответ 13

Я пробовал каждое решение, доступное в Интернете, и ничего не работало, абсолютно ничего. Моя проблема: мое устройство было взломанным, и на нем была Cydia. Я восстановил устройство до factory по умолчанию (Not jailbroken), и он работал в первый раз и без проблем возвратил идентификатор продукта.

Ответ 14

Для меня проблема заключалась в том, что я выбрал "Включить контент-хостинг" при настройке покупки In-App. Поэтому мне пришлось отключить его, и проблема была решена.

Ответ 15

В моем случае я не заполнил информацию о банке, налоговую информацию и контактную информацию. Когда я закончу это, я могу получить свой идентификатор продукта, надеюсь, что это поможет кому-то.

Ответ 16

Требуется некоторое время для хранения продуктов на всех серверах (см. документацию). Таким образом, вы можете столкнуться с задержкой между созданием продукта в iTunes Connect и тем, что идентификатор продукта является действительным при тестировании на устройстве. Для меня это заняло около 12 часов, пока не появились мои продукты.

Ответ 17

Примечание для других: не используйте NSMutableSet для идентификаторов продуктов. Это должен быть NSSet!

Ответ 18

Если вы хотите сохранить данные своего приложения, но хотите попробовать удалить свое приложение, чтобы исправить эту проблему, сначала выполните синхронизацию устройства. Затем удалите приложение и переустановите его из Xcode - это исправило проблему для меня. После его работы вы можете восстановить свое устройство из своей резервной копии - это займет всего несколько минут, а запросы продукта все еще работают после восстановления.

Ответ 19

Не совсем понятно, почему, но когда я изменил идентификатор продукта запроса с "com.mycompany.myapp.product" на "продукт", он начал работать. Возможно, это из-за того, что у меня есть продукт, настроенный в iTunes Connect.

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

Ответ 20

заменить:

NSSet *productList = [NSSet setWithObjects:id2, @"8", nil];

с:

NSSet *productList = [NSSet setWithObjects:@"8", nil];

Ответ 21

Другая проблема, которая может быть. Если имя вашего проекта xCode не написано на английском языке или у него есть другие символы, идентификатор пакета будет содержать "------", где должно быть имя вашего приложения. Я думал, что это просто соглашение для идентификатора пакета, для этого в xCode. Оказывается, это была моя проблема, поэтому назовите свой проект xCode на английском языке) Я знаю, что это не так для большинства, но в любом случае)

Ответ 22

Я пробовал все, о чем все говорят. Сначала я сделал учетную запись гостя, чтобы узнать, можно ли найти идентификатор продукта... Это было. Итак, я начал уходить со всего на монитор активности и нашел проблему. Мне пришлось выйти из процесса "магазина" ниже. Внезапно я прекратил получать недопустимый идентификатор продукта. Надеюсь, что кто-то поможет там.

Закройте их, если вы получаете недопустимую ошибку id продукта