Ответ 1
На самом деле, я думаю, вы должны представить двоичный файл для этого.
Вы можете установить дату выпуска в отдаленное будущее.
В принципе, я пытался настроить покупки приложений в тестовом приложении, прежде чем я внедрю их в подходящее приложение, над которым работает моя компания. Я прочитал набор 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 не работает с примерами приложений.
На самом деле, я думаю, вы должны представить двоичный файл для этого.
Вы можете установить дату выпуска в отдаленное будущее.
Еще один важный шаг, который часто упускается из виду, - вам нужно убедиться, что у вас установлен контракт на поставку iOS Paid Applications, который находится в разделе "Контракты, налоги и банковское обслуживание" в iTunes connect. Сначала вам нужно щелкнуть по кнопке запроса, затем вам нужно нажать на кнопки 3 Set Up (контактная информация, информация о банке, информация о налогах)
Проверьте наличие недопустимых идентификаторов продукта.
- (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/
Это очень подробный контрольный список для этой проблемы.
Проверьте, соответствует ли ваш идентификатор Bundle (например, com.company.appname) в XCode тем, который находится в iTunes Connect.
Вам не нужно представлять двоичный файл, чтобы он работал.
Просто удалите приложение на своем устройстве и запустите его снова из XCode. Это исправило проблему для меня.
Не нужно загружать двоичный файл или ждать несколько часов после создания покупки в приложении iTunes Connect.
Благодаря ответу alpere я узнал, что использовал неправильный идентификатор продукта. Это было не, как я думал de.company.appname.PROFESSIONAL_LICENSE
. Просто использование PROFESSIONAL_LICENSE
в моем случае (без ведомого идентификатора пакета) работает:)
Не нужно загружать двоичные файлы для тестирования Inbox с помощью Sandbox. Вам просто нужно добавить элемент InAppPurchase в iTunesConnect и поместить его в состояние "Готов к отправке" (обязательно). Если вы отправите его на проверку, он всегда будет давать ответ o.product пустой.
Попробуйте добавить бесплатный подписчик. Если он появляется в ответе, в коде нет ничего плохого. Поскольку Free Subscription является единственным типом, который не требует соглашений, налогов и банковских операций, и если он появляется, а другие типы не являются, то это проблема, связанная с вашим контрактом.
В моем случае причина заключалась в размещении контента Apple, который был включен по ошибке. Продукт был доступен только тогда, когда я отключил его
В моем случае (MacOS) я создавал тестовое приложение (с тем же идентификатором пакета основного приложения). SKFetchRequest начал возвращать идентификаторы продукта для тестового приложения только после того, как я установил имя пакета (двоичное имя) так же, как в исходном приложении.