Причины для SKProductsRequest возвращают 0 продуктов?
Я пытаюсь настроить IAP, но после обращения к продуктам, использующим SKProductsRequest, массив SKProductsResponse у моего делегата имеет счет 0. Здесь мой контрольный список:
- Тестовый продукт был добавлен в iTunes connect
- Идентификатор продукта совпадает с идентификатором пакета приложения (и его не использует подстановочный знак)
- Идентификатор продукта, установленный в SKProductRequest, соответствует продукту, созданному на iTunes connect
- Я ждал несколько часов с момента создания продукта в iTunes connect
- Профили обеспечения позволяют IAP
- Следуйте всем шагам в различных учебниках, таких как http://troybrant.net/blog/2010/01/in-app-purchases-a-full-walkthrough/ и т.д.
- Удалили приложение с устройства, перезапустили Xcode, перестроили и т.д. и т.д.
Любые другие предложения относительно того, почему количество загруженных продуктов равно нулю?
Я не считаю, что это будет проблема с кодировкой, но здесь все равно:
…
NSSet *productIdentifiers = [NSSet setWithObjects:@"redacted", nil];
self.productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:productIdentifiers];
self.productsRequest.delegate = self;
[self.productsRequest start];
…
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
{
NSArray *products = response.products;
NSLog(@"Product count: %d", [products count]);
for (SKProduct *product in products)
{
NSLog(@"Product: %@ %@ %f", product.productIdentifier, product.localizedTitle, product.price.floatValue);
}
}
Ответы
Ответ 1
Проверьте все 3 вещи в списке ниже
1) проверьте идентификаторы вашего продукта - они должны быть точно такими же, как у вас в коде и в iTunes Connect → Мои приложения → YourAppName → Функции → Покупки из приложения
2) iTunes Connect → Соглашения, налоги и банковское дело → Генеральные соглашения → Платные Applications-> Контактная информация/Информация о банке/Налоговая информация (заполняется)
3) код для проверки
class ViewController: UIViewController {
var requestProd = SKProductsRequest()
var products = [SKProduct]()
override func viewDidLoad() {
super.viewDidLoad()
validateProductIdentifiers()
}
}
extension ViewController: SKProductsRequestDelegate {
func validateProductIdentifiers() {
let productsRequest = SKProductsRequest(productIdentifiers: Set(["candy100", "someOtherProductId"]))
// Keep a strong reference to the request.
self.requestProd = productsRequest;
productsRequest.delegate = self
productsRequest.start()
}
// SKProductsRequestDelegate protocol method
public func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
self.products = response.products
for invalidIdentifier in response.invalidProductIdentifiers {
print(invalidIdentifier)
}
}
}
Ответ 2
Я столкнулся с одной и той же проблемой. Решил ее, отправив только имя продукта IAP, а не мой идентификатор пакета до имени продукта. Вот пример:
работает
SKProductsRequest *productRequest = [[SKProductsRequest alloc]initWithProductIdentifiers:[NSSet setWithObject:@"my_product"]];
а не
не работает
SKProductsRequest *productRequest = [[SKProductsRequest alloc]initWithProductIdentifiers:[NSSet setWithObject:@"com.my_site.my_app.my_product"]];
Ответ 3
Убедитесь, что включено приложение In-App Purchase в разделе "Возможности". Если вы этого не сделаете, SKProductsRequest вернет 0 продуктов.
Ответ 4
У меня была такая же проблема...
Я просто изменяю свой идентификатор Bundle, который не соответствует идентификатору пакета iTunes.
И мое приложение работает хорошо:)
Ответ 5
В том случае, если вы не заметили этого, совпадение идентификатора продукта зависит от регистра.
Итак, если вы создали продукт на Apple с идентификатором say
com.yourcompany.product1
и вы вызываете запрос продукта с идентификатором продукта
com.yourcompany.Product1
Ваш список будет возвращен нулевыми продуктами.
Это помогло мне заняться какое-то время: -)
ps: В отдельном проекте я обнаружил, что SKProductsRequest только начал возвращать продукты после перезагрузки. Итак, если все остальное не удается, попробуйте перезагрузить свой Mac.
Ответ 6
Перейдите в iOS Настройки> iTunes & Магазины приложений и Выйти
Надеюсь, это поможет вам, я не знаю, почему: D
Ответ 7
В некоторых случаях очень много решений для этих проблем. После некоторых исследований я обнаружил, что иногда помогает удалить приложение, а затем снова установить его (In-App Purchase, SKProductsRequest возвращает 0 - Продукты, все еще находящиеся в обзоре) Также какую версию iOS вы используете?
Ответ 8
Начальный ответ
У вас есть настройки вашего контракта, банков и т.д.
Исправленный ответ
Кажется, я ошибаюсь. Взгляните на In-App Purchase, SKProductsRequest вернется 0 - Продукты все еще находятся в обзоре
Ответ 9
Пожалуйста, также укажите, была ли вы установлена цена продукта в iTunesConnect или нет. Я пропустил это, и продукты были равны нулю. Весь мой день потратил на это.
Ответ 10
Кроме того, имейте в виду, что согласия на оплату приложений cotract недостаточно. Вы также должны заполнить контактную, банковскую и налоговую информацию для этого агрессора специально, чтобы это считалось выполненным.
Ответ 11
После долгих раскопок следующие шаги решили мою проблему с получением 0 продуктов для SKProductsRequest.
Перейдите в Настройки> Войдите в свой iPhone на устройстве iOS. Если вы уже вошли в систему со своим оригинальным Apple ID, нажмите на него и выберите Выйти. Затем просто войдите в систему, используя учетные данные тестера песочницы, который вы создали в iTunes Connect.
Ответ 12
В некоторых системах MacOS 10.14 я получаю пустой массив SKProductsResponse.products
, в то время как другие работают нормально и возвращают действительный список текущих IAP для моего приложения.
То же самое приложение, идентичный код.
Пользователь вошел в одну и ту же учетную запись App Store на обеих машинах.
Это просто странно.
Ответ 13
В моем случае это была ошибка. В симуляторе все идентификаторы товара не сработали и были помечены как недействительные. В реальном устройстве все запросы продукта успешно получены продукт.
Твос 4К