Набор для iPhone Store возвращает неверные ошибки идентификатора продукта
-
06-07-2019 - |
Вопрос
Я пытаюсь протестировать покупки в приложении на своем 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
Хорошо, итак, после того, как я сделал все, что мог придумать, и прочитал каждый форум, вот что сработало:
Переделайте ВСЕ.
- Удалите ВСЕ свои профили подготовки из Xcode Organizer.
- Закройте Xcode.
- Создайте Новый идентификатор приложения.
- Создайте новый профиль подготовки с новым идентификатором приложения.
- Создайте новый профиль подготовки дистрибутива с новым идентификатором приложения.
- Создайте новое приложение в iTunes Connect
- Запустите Xcode, установите два ваших новых профиля подготовки.Обновите идентификатор пакета yoru, чтобы он соответствовал.Также убедитесь, что ваши идентификационные строки, которые запрашивает приложение, обновлены, чтобы отразить ваш идентификатор пакета.
- Создайте свой проект в режиме распространения с новым профилем подготовки дистрибутива.
- Загрузите свой новый двоичный файл.(Оставьте это без отклонения)
- Настройте свою тестовую покупку в приложении.
- Создайте свой проект в режиме отладки с новым профилем подготовки.
- Тестовый запрос.
Это то, что потребовалось, чтобы мой магазин заработал.Мое лучшее предположение заключается в том, что внутренние серверы Apple иногда выходят из строя, и вам просто нужно начинать с нуля.
Надеюсь, это поможет всем!
Другие советы
Я перепробовал все, что предлагалось на форумах Apple и здесь, и все равно не смог заставить это работать.Найдено решение - ваше приложение должно быть перенесено Xcode, чтобы включить песочницу.
Очевидно, не так ли?Что ж, если вы работаете с обновлением существующей учетной записи, устройство по-прежнему будет рассматривать ее как приложение, установленное в App Store.
Удалите его, затем перенесите снова.Теперь это должно сработать :)
Удаление приложения на тестируемом iPhone и его переустановка сработали.Кроме того, я также ждал 8 часов с момента отправки товара для покупки в приложении.
Пожалуйста, выполните следующие действия:
Войдите в iTunes connect, используя свою учетную запись разработчика (https://itunesconnect.apple.com/WebObjects/iTunesConnect.woa/wo/).
Перейдите на вкладку - "Контракты, налоги и банковское дело"
Проверьте Контракты запроса и Contracts в разделах Process (Обработка).
Ознакомьтесь с "Платные приложения для iOS" и там необходимо настроить Контактную информацию, банковскую информацию и Налоговую информацию.
Когда ячейка "Платные приложения для 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 долларов США.