IPhone в App Purchase - response.products все еще пуст?

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

Установить тестовое приложение и пункты тестирования App Purchase
Я создал новый идентификатор приложения для "Test App One" на моем портале разработчиков в iPhone Dev Center. Я удостоверился, что префикс был com.mycompany.testappone, чтобы гарантировать, что в покупках приложений можно настроить. Оставаясь в разделе "Идентификаторы приложений", я настроил покупки приложений, отметив опцию "Включить покупку".

Я создал "Test App One" в iTunes Connect и выполнил обычную процедуру, но выбрал "upload binary later" и не отправил на рассмотрение, поскольку приложение ничего не делает. Неужели нам не нужно прикладывать приложение для обзора, чтобы это работало?! Затем я нажал на управление покупками приложений и создал новый с идентификатором продукта '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 не работает с примерами приложений.

Ответ 1

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

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

Ответ 2

Еще один важный шаг, который часто упускается из виду, - вам нужно убедиться, что у вас установлен контракт на поставку iOS Paid Applications, который находится в разделе "Контракты, налоги и банковское обслуживание" в iTunes connect. Сначала вам нужно щелкнуть по кнопке запроса, затем вам нужно нажать на кнопки 3 Set Up (контактная информация, информация о банке, информация о налогах)

Ответ 3

Проверьте наличие недопустимых идентификаторов продукта.

- (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/

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

Ответ 4

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

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

Ответ 5

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

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

Ответ 6

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

Ответ 7

Не нужно загружать двоичные файлы для тестирования Inbox с помощью Sandbox. Вам просто нужно добавить элемент InAppPurchase в iTunesConnect и поместить его в состояние "Готов к отправке" (обязательно). Если вы отправите его на проверку, он всегда будет давать ответ o.product пустой.

Ответ 8

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

Ответ 9

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

Ответ 10

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