iPhone в приложении Покупка - response.products все еще пусто? - PullRequest
41 голосов
/ 26 января 2010

По сути, я пытался настроить покупки приложений в тестовом приложении, прежде чем внедрить их в надлежащее приложение, над которым работает моя компания. Я прочитал pdf-файл Store и другие фрагменты примерно 1000 раз, но продукты по-прежнему возвращаются пустыми. Вот что я сделал до сих пор:

Настройка тестового приложения и тестовых позиций в приложении Покупка
Я создал новый идентификатор приложения для «Test App One» на портале разработчиков моей компании в Центре разработки iPhone. Я удостоверился, что префикс был com.mycompany.testappone, чтобы обеспечить возможность настройки покупок в приложении. Оставаясь в разделе идентификаторов приложений, я настроил покупки приложений, отметив опцию «Включить покупку приложений».

Я создал «Test App One» в iTunes Connect и выполнил обычную процедуру, но выбрал «загрузить двоичный файл позже» и не отправил на проверку, так как приложение ничего не делает. Конечно, нам не нужно отправлять приложение на проверку, чтобы это работало ?! Затем я нажал на кнопку «Управление покупками приложений» и создал новый с идентификатором продукта «test1» и утвердил его для продажи.

код
Я создал новый проект в XCode под названием TestAppOne, и сейчас я использую только 2 класса:

TestAppOneAppDelegate.h:

#import <UIKit/UIKit.h>
#import <StoreKit/StoreKit.h>  

@interface TestAppOneAppDelegate : NSObject <UIApplicationDelegate, SKRequestDelegate, SKProductsRequestDelegate> {
    UIWindow *window;
}

TestAppOneDelegate.m:

#import "TestAppOneAppDelegate.h"

static NSString *kMyFeatureIdentifier1 = @"com.mycompany.testappone.test1";

@implementation TestAppOneAppDelegate
@synthesize window;

- (void)applicationDidFinishLaunching:(UIApplication *)application {    
 if([SKPaymentQueue canMakePayments]) {
  NSLog(@"IN-APP:can make payments");
 }
 else {
  NSLog(@"IN-APP:can't make payments");
 }

 [self requestProductData];
 [window makeKeyAndVisible]; 
}

- (void)requestProductData {
 NSLog(@"IN-APP:requestProductData");
 SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers: [NSSet setWithObject:kMyFeatureIdentifier1]];
 request.delegate = self; 
 [request start];
 NSLog(@"IN-APP:requestProductData END");  
} 

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {
 NSLog(@"IN-APP:productsRequest");
 NSArray *myProduct = response.products;
 NSLog(@"IN-APP:array count: %i", [myProduct count]);
 [request autorelease];
 NSLog(@"IN-APP:productsRequest END"); 
}

- (void)dealloc {
    [window release];
    [super dealloc];
}

@end

Тестирование на устройстве
Я создал тестовую учетную запись «песочницы» и вышел из своей учетной записи iTunes на iPhone, но не входил в нее с тестовой учетной записью, поскольку документация говорит нам не делать этого до тех пор, пока нас не попросят на этапе покупки. Затем я создаю приложение, и вот журнал, который я получаю:

IN-APP:can make payments
IN-APP:requestProductData
IN-APP:requestProductData END
IN-APP:productsRequest
IN-APP:array count: 0
IN-APP:productsRequest END

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

Ответы [ 10 ]

30 голосов
/ 12 февраля 2011

Еще один важный шаг, который часто упускают из виду, это то, что вам нужно убедиться, что у вас есть настройка контракта для платных приложений iOS, которая находится в разделе «Контракты, налоги и банковское дело» в iTunes connect. Сначала вы должны нажать на кнопку запроса, затем вы должны нажать на 3 кнопки настройки (Контактная информация, Информация о банке, Налоговая информация)

22 голосов
/ 26 января 2010

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

Вы можете установить дату выпуска в далеком будущем.

18 голосов
/ 17 января 2013

Проверьте, есть ли недействительные идентификаторы продукта.

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {

for (NSString *invalidProductId in response.invalidProductIdentifiers)
    {
        NSLog(@"Invalid product id: %@" , invalidProductId);
    }
}

Если есть недопустимые идентификаторы продукта, посетите http://troybrant.net/blog/2010/01/invalid-product-ids/

Это очень полный контрольный список для этой проблемы.

9 голосов
/ 01 февраля 2013

Проверьте, совпадает ли ваш идентификатор пакета (например, com.company.appname) в XCode с идентификатором в iTunes Connect.

Вам не нужно отправлять двоичный файл для его работы.

5 голосов
/ 27 июля 2012

Просто удалите приложение на вашем устройстве и запустите его снова из XCode. Это исправило проблему для меня.

Нет необходимости загружать двоичный файл или ждать часами после создания покупки в приложении в iTunes Connect.

2 голосов
/ 14 апреля 2014

Благодаря ответу Alpere я узнал, что использовал неправильный идентификатор продукта. Это было не , как я думал de.company.appname.PROFESSIONAL_LICENSE. Просто использование PROFESSIONAL_LICENSE в моем случае (без начального идентификатора пакета) работает:)

1 голос
/ 04 апреля 2016

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

1 голос
/ 31 августа 2012

Нет необходимости загружать бинарный файл для тестирования InAppPurchase в песочнице. Вам просто нужно добавить элемент InAppPurchase в iTunesConnect и поместить его только в состояние «Готово к отправке» (обязательно). Если вы отправите его на проверку, он всегда будет содержать ответ. Товар пуст.

0 голосов
/ 02 июля 2019

В моем случае (MacOS) я создавал тестовое приложение (с тем же идентификатором пакета основного приложения). SKFetchRequest начал возвращать идентификаторы продуктов для тестового приложения только после того, как я установил имя пакета (двоичное имя) так же, как в исходном приложении.

0 голосов
/ 31 августа 2017

В моем случае причина была в том, что хостинг Apple был включен по ошибке. Товар был доступен только когда я его выключил

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