Вопрос

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

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

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

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

Testapponeappdelegate.h:

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

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

TestappoNelegate.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.

Это было полезно?

Решение

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

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

Другие советы

Еще один важный шаг, который часто упускается из виду, - это необходимо убедиться, что у вас есть установка контракта с платными заявками в iOS, которая расположена в разделе «Контракты, налог и банковское дело» в iTunes Connect. Сначала вам нужно нажать на кнопку запроса, затем вам нужно нажать на 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/

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

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top