iphone: ошибка покупки в приложении - PullRequest
4 голосов
/ 22 сентября 2010

Я разрабатываю приложение и использую в нем покупки внутри приложения.Я создал продукты в приложении в iTunes Connect.до вчерашнего дня все работало нормально.но сегодня.он начал выдавать эту ошибку.

"Ошибка: запросы на оплату ограничены продуктами, возвращенными как действительные с помощью метода didRecieveResponse Store Kit."

Я понятия не имею, что такоевопрос.пожалуйста, ответьте

Ответы [ 4 ]

13 голосов
/ 23 сентября 2010

Хорошо, это может быть пистолет для курения -

Согласно официальному потоку данных из приложений Store Kit, вы должны получить информацию о доступных покупках (SKProductsRequest), прежде чем пытаться совершить покупку (SKPaymentQueue).

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

Покупка прошла без ошибок!

Затем я удалил код, который называется SKProductsRequest, иперезапустил его и получил сообщение об ошибке «Запросы на оплату ограничены ...».

Похоже, что структура набора магазина была изменена таким образом, что ТРЕБУЕТСЯ сделать вызов SKProductsRequest, для того, чтобы покупки работали правильно, когда они добавляются в SKPaymentQueue.

В компьютерной науке они, похоже, вводят жесткую зависимость между двумя логически связанными, но отдельными модулями.Это ДЕЙСТВИТЕЛЬНО плохая практика.

Попробуйте добавить этот код в свое приложение и в какой-то момент вызовите dumpProductInfo, прежде чем совершать «реальные» вызовы SKPaymentQueue и посмотрите, начнет ли он работать - обязательно обновите встроенныйстроковый литерал с вашими фактическими идентификаторами продукта.

-(void) dumpProductInfo
{
        SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers:[NSSet setWithObject:@"com.company.domain.app.purchase"]];
        request.delegate = self;
        [request start];
}

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
{
    NSArray *myProduct = response.products;
    // populate UI
    NSLog(@"Products:");
    for (int i = 0; i < [myProduct count]; i++)
    {
        SKProduct *product = [myProduct objectAtIndex:i];
        NSLog(@"Name: %@ - Price: %f   ID: %@" ,
              [product localizedTitle],
              [[product price] doubleValue], 
              [product productIdentifier]);

    }
}

Последующие действия: как упоминалось ниже, Техническое примечание Apple QA1691 подтверждает, что то, что я думал, происходило правильно - через две недели после того, как мы выяснили это: р

2 голосов
/ 10 октября 2010

Вот моя теория относительно того, что происходит после недавнего тестирования IAP для нового приложения:

  1. Окно IAP изолированной программной среды НЕ позволяет вам тестировать IAP после того, как вы одобрили и отправили его наобзор.Насколько я могу судить, это новое недокументированное поведение, которое вызывает много головной боли у нас, обезьян iPhone SDK.До этого изменения вы могли иметь тестовые IAP даже после отправки их на рассмотрение Apple и до одобрения приложения.

Таким образом, в этом случае даже запрос хранилища IAP для действительных идентификаторов продукта не поможетвас нет.

  1. Похоже, что в рамках процесса проверки Apple добавила следующий автоматический тест: аннулируйте ВСЕ свой IAP и протестируйте свое приложение, чтобы убедиться, что вы отправляете запрос на действительные идентификаторы IAP дозаполнение вашего интерфейса IAP.Поэтому, если вы не решите эту проблему с помощью своего кода, ваше приложение будет отклонено, но вам сообщат, что запрашивать действительные идентификаторы - это только рекомендуемая и не обязательная практика, но, по моему опыту, теперь это требуется.

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

2 голосов
/ 22 сентября 2010

Я внезапно начал получать это также!Последний раз я проверял код покупки в конце прошлой недели, и тогда он работал нормально!

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

Что-то определенно изменилось, и, похоже, это со стороны магазина приложений!

Отмечу, что «официальный» поток данных для магазина требует, чтобы приложение получало список продуктов, доступных для покупки, но вместо этого я жестко закодировал идентификатор после определения покупки в iTunes Connect.Я проверил, изменился ли идентификатор покупки, и ответил, что это не так.

Чтобы сделать это еще более запутанным, я спустил сборку живого приложения из iTunes, и покупка прошла успешно.Различия между этими двумя сценариями: 1. один был построен с использованием моего профиля разработки вместо профиля развертывания 2. один работал в «песочнице» вместо «реального» 3. один использовал тестовую учетную запись для совершения покупки

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

ОБНОВЛЕНИЕ - Я написал по электронной почте об этом Apple, не получил ответа (пока), но ошибка внезапно ушла, и все начало работать как ожидалось!?!

0 голосов
/ 31 декабря 2010

Вы должны собрать его непосредственно из xcode, чтобы песочница теперь работала.

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