Набор для iPhone Store возвращает неверные ошибки идентификатора продукта

StackOverflow https://stackoverflow.com/questions/1633072

Вопрос

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

У меня есть:

  • Создал в магазине товар, связанный с этим приложением.Его идентификатор пакета совпадает со всем остальным.Он был выставлен на продажу и одобрен застройщиком.
  • Убедился, что в моем новом профиле подготовки включены покупки в приложениях магазина и в нем указано полное название приложения:"com.domain.appname" (com.domain.appname)
  • Убедился, что это профиль подготовки, используемый для подписи приложения на моем iPhone.
  • Убедился, что "com.domain.appname" - это идентификатор приложения, используемый для создания профиля подготовки.
  • Убедился, что "com.domain.appname" используется в моем файле plist в качестве идентификатора пакета.

Кажется, все на месте, однако я по-прежнему получаю свои продукты, возвращенные мне как недействительные идентификаторы.

Это код, который я использую:


- (void)requestProductData {
   SKProductRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers: [NSSet setWithObject: @"com.domain.appname.productid"]];
   request.delegate = self;
   [request start];
}

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
{
   NSArray *myProducts = response.products;
   NSArray *myInvalidProducts = response.invalidProductIdentifiers;

   for(int i = 1; i < myInvalidProducts.count; ++i)
   {
      std::cout <<"invalid product id = " << [[myInvalidProducts objectAtIndex:i] UTF8String] << std::endl;
   }

   for(int i = 0; i  < myProducts.count; ++i)
   {
      SKProduct * myProduct = [myProducts objectAtIndex:i];
      std::cout << "Product Info:"  << std::endl;
      std::cout << "\tlocalizedTitle         = "  << [[myProduct localizedTitle] UTF8String]  << std::endl;
      std::cout << "\tlocalizedDescription   = "  << [[myProduct localizedDescription] UTF8String]  << std::endl;
      std::cout << "\tproductIdentifier      = "  << [[myProduct productIdentifier] UTF8String]  << std::endl;
      std::cout << "\tprice                  = "  << [[myProduct price] doubleValue]  << std::endl;
      std::cout << "\tpriceLocale            = "  << [myProduct priceLocale]  << std::endl;
   }

   [request autorelease];
}

Все мои идентификаторы продуктов отображаются в недопустимых распечатках, и ни один из них не отображается в распечатках "Информация о продукте:".

Будем очень признательны за любые предложения...

P.S.Да, это построено как Objective-c / c ++.

Это было полезно?

Решение 7

Хорошо, итак, после того, как я сделал все, что мог придумать, и прочитал каждый форум, вот что сработало:

Переделайте ВСЕ.

  1. Удалите ВСЕ свои профили подготовки из Xcode Organizer.
  2. Закройте Xcode.
  3. Создайте Новый идентификатор приложения.
  4. Создайте новый профиль подготовки с новым идентификатором приложения.
  5. Создайте новый профиль подготовки дистрибутива с новым идентификатором приложения.
  6. Создайте новое приложение в iTunes Connect
  7. Запустите Xcode, установите два ваших новых профиля подготовки.Обновите идентификатор пакета yoru, чтобы он соответствовал.Также убедитесь, что ваши идентификационные строки, которые запрашивает приложение, обновлены, чтобы отразить ваш идентификатор пакета.
  8. Создайте свой проект в режиме распространения с новым профилем подготовки дистрибутива.
  9. Загрузите свой новый двоичный файл.(Оставьте это без отклонения)
  10. Настройте свою тестовую покупку в приложении.
  11. Создайте свой проект в режиме отладки с новым профилем подготовки.
  12. Тестовый запрос.

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

Надеюсь, это поможет всем!

Другие советы

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

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

Удалите его, затем перенесите снова.Теперь это должно сработать :)

Удаление приложения на тестируемом iPhone и его переустановка сработали.Кроме того, я также ждал 8 часов с момента отправки товара для покупки в приложении.

Пожалуйста, выполните следующие действия:

  1. Войдите в iTunes connect, используя свою учетную запись разработчика (https://itunesconnect.apple.com/WebObjects/iTunesConnect.woa/wo/).

  2. Перейдите на вкладку - "Контракты, налоги и банковское дело"

  3. Проверьте Контракты запроса и Contracts в разделах Process (Обработка).

  4. Ознакомьтесь с "Платные приложения для iOS" и там необходимо настроить Контактную информацию, банковскую информацию и Налоговую информацию.

  5. Когда ячейка "Платные приложения для iOS" переместится в раздел Действующие контракты, я смогу использовать Продукты для покупки в приложении.

Пожалуйста, перейдите по ссылке ниже для получения дополнительной информации:http://developer.apple.com/library/ios/#technotes/tn2259/_index.html

Пожалуйста, обратите внимание, что при джейлбрейке iPhone Синхронизация приложений разрывы пакетов полное тестирование покупки в приложении. AppSync устанавливается с Install0us в качестве зависимости.

Вам не обязательно полностью восстанавливать iOS, просто удалите AppSync в Cydia, чтобы успешно протестировать покупки в приложении.

Все советы со всех форумов, руководств и комментариев по исправлению "недопустимого продукта" у меня не работали, пока я не удалил AppSync.

У меня возникла аналогичная проблема с новым приложением (версия v1.0 еще не выпущена в магазине), которое я тоже пытался добавить в app purchases.Я все настроил, добавил продукты и т.д.и мои продукты ВСЕГДА возвращались как недействительные, когда я выполнял запрос SKProducts.

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

Просто чтобы быть уверенным, я попробовал это на другом устройстве, которое доставляло мне те же проблемы, и там это тоже было исправлено.

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

если в вашем коде нет ничего неправильного, иногда он возвращает недопустимый ProductID просто потому, что вам может потребоваться время более 10 часов для изменения информации.вступает в силу.Или идентификатор продукта недействителен, потому что на вашем устройстве осталось что-то неправильное, поэтому вы можете попробовать еще раз удалить свое приложение и создать его заново.с моим опытом, надеюсь, это поможет.

Недавно был обновлен интерфейс iTunes Connect для IAP, который может привести к недопустимому :< Идентификатор продукта > ошибка.

Теперь вы можете добавить IAP в iTunes connect, не устанавливая цену, которая по умолчанию равна 0 долларам США, и это позволит вам сохранить эту запись.

Старая версия пользовательского интерфейса жаловалась бы при нажатии кнопки сохранить, если бы вы заранее не отредактировали поле цены.

Очень легко полностью пропустить это поле, и любая попытка получить информацию, используя этот идентификатор продукта, с помощью любого вызова iOS приведет к недействительности :< Идентификатор продукта> вместо того, чтобы сообщать вам, что он найден < Идентификатор продукта > по цене 0 долларов США.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top