iPhone в приложении - ответ. Продукты все еще пусты?
-
22-09-2019 - |
Вопрос
По сути, я пытался настроить покупки приложений в тестовом приложении, прежде чем внедрить их в надлежащее приложение, над которым работает моя компания. Я прочитал комплект магазина 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 начал возвращать идентификаторы продукта для тестового приложения только после того, как я установил имя пакета (двоичное имя) так же, как в исходном приложении.