iPhone Store Kit возвращает неверные идентификаторы продукта - PullRequest
4 голосов
/ 27 октября 2009

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

У меня есть:

  • Создан продукт в магазине, связанный с этим приложением. Идентификатор пакета совпадает со всем остальным. Он был очищен для продажи и одобрен разработчиком.
  • Убедитесь, что в моем новом профиле инициализации в магазине включены покупки приложений и полное имя приложения: "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 ++.

Ответы [ 8 ]

6 голосов
/ 30 апреля 2010

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

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

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

4 голосов
/ 06 мая 2011

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

3 голосов
/ 23 августа 2011

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

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

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

  3. Проверьте запросы контрактов и контрактов в разделах процесса.

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

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

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

2 голосов
/ 22 февраля 2012

Обратите внимание, что при взломе iPhone пакет AppSync прерывает тестирование при покупке приложения. AppSync устанавливается вместе с Install0us в качестве зависимости.

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

Все советы на всех форумах, учебные пособия и комментарии о fixind 'недопустимый продукт' не работали для меня, пока я не удалил AppSync.

1 голос
/ 24 января 2011

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

1 голос
/ 09 января 2011

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

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

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

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

0 голосов
/ 04 марта 2017

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

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

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

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

0 голосов
/ 31 октября 2009

ОК, так что после всего, что я мог придумать, и прочитав все форумы, вот что сработало:

Повторить ВСЁ.

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

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

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

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