Подтвердить что ты не робот

Устранение недопустимой проблемы с идентификатором продукта при покупках в приложении?

Это следующий вопрос: "При покупках приложений с ошибкой MKStoreKit:" Проблема в конфигурации подключения iTunes для продукта: xxx"

У меня есть аналогичная проблема, и я попытался выполнить как с MKStoreKit, так и без него и получить аналогичное сообщение.

Check-лист

Благодаря: http://troybrant.net/blog/2010/01/invalid-product-ids/

Вы включили In-App Purchase для своего идентификатора приложения?

ДА

Вы проверили Очистить для продажи для вашего продукта?

ДА

Вы отправили (и, возможно, отклонили) свое двоичное приложение?

ДА

Соответствуют ли ваши проекты .plist Bundle ID вашему идентификатору приложения?

ДА

Сгенерировали и установили новый профиль обеспечения для нового идентификатора приложения?

ДА

Вы настроили свой проект на кодовый знак, используя этот новый профиль подготовки?

ДА

Вы строите iPhone OS 3.0 или выше?

ДА. iOS4.2 и выше.

Используете ли вы полный идентификатор продукта при создании SKProductRequest?

ДА. Также как раз сам идентификатор продукта без обратного домена

Вы ждали несколько часов с момента добавления своего продукта в iTunes Connect?

ДА. В нем говорится "Ожидание пересмотра" и проделано за последние 4-5 дней.

Активны ли ваши банковские реквизиты в iTunes Connect?

НЕТ. Это клиентский проект, и я только проверяю, работает ли он. Мне нужны банковские реквизиты для проверки?

EDIT: Я изменил это сейчас. Но я не понимаю, зачем мне это нужно, чтобы проверить песочницу.

Вы пытались удалить приложение с вашего устройства и переустановить?

ДА

Является ли ваше устройство взломанным?

НЕТ


Заметка приложения верна

Некоторые примеры, которые я видел, используют это обозначение: com.domain.APP_ID.PRODUCT_TO_BUY

Но другие используют com.domain.PRODUCT_TO_BUY

Что правильно?

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

Разработчик отклонен

App Bundle (Release) находится в iTunes Connect, и у меня есть "разработчик отклонил" пакет.

Фото: App developer rejected

Ожидание обзора?

В моих покупках в приложении у меня есть 1 продукт, автоматически возобновляемая подписка. Он очищается для продажи; это, однако, "Ожидание обзора" и не горит зеленым.

Фото:

waiting for review

Я создал это почти 4-5 дней назад, и его по-прежнему отмечен как "Ожидание обзора"

Мне интересно, не было ли отклонено мое приложение от того, повлияло ли это на "ожидание проверки" на подписке с автоматическим возобновлением?

Я ничего не изменил в этом элементе.

В соответствии с различными статьями я должен ждать 24-48 часов, прежде чем я смогу его использовать?

Но нужно ли ждать, пока это будет принято или зеленого цвета, прежде чем я смогу использовать его в своем тестировании?

Сведения о банке

Я не заполнял никаких банковских реквизитов, потому что это приложение для клиента. Нужно ли мне заполнять банковские реквизиты, прежде чем я смогу продолжить его тестирование?

В соответствии с этими документами: http://developer.apple.com/library/ios/#technotes/tn2259/_index.html необходимы банковские реквизиты?

Нужно ли мне войти в iTunes на моем устройстве в тестовой учетной записи перед запуском приложения?

Мне интересно, может ли кто-нибудь прояснить эти проблемы? Возможно, это так же просто, как ждать, когда покупка в приложении будет "зеленой", или, может быть, я пропустил шаг?

Примечание. Это происходит независимо от того, пользуюсь ли я MKStoreKit или использую следующий код.

Спасибо.

Мой код (это версия, отличная от MKStoreKit)

#define kMySubscriptionFeature @"uk.co.samplewebsite.myappproject.sub1"

    - (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    self.title = @"Manage Subscriptions";


    if ([SKPaymentQueue canMakePayments])
    {
        // Display a store to the user.

        //[MKStoreManager sharedManager];
        //NSLog(@"purhcasable = %@", [[MKStoreManager sharedManager] purchasableObjectsDescription] );
        [self requestProUpgradeProductData];

    }
    else
    {
        // Warn the user that purchases are disabled.
        NSString *message = @"In-app purchases are disabled. Please review your settings";
        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error" message:message delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [alertView show];
        [alertView release];
    } // end if
}


#pragma mark - StoreKit Delegate

- (void) requestProductData
{
    SKProductsRequest *request= [[SKProductsRequest alloc] initWithProductIdentifiers: [NSSet setWithObject:kMySubscriptionFeature]];
    request.delegate = self;
    [request start];
}

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
{
    NSArray *myProduct = [[NSArray alloc] initWithArray:response.products];

    for(SKProduct *item in myProduct)
    {

        NSLog(@"Product title: %@" , item.localizedTitle);
        NSLog(@"Product description: %@" , item.localizedDescription);
        NSLog(@"Product price: %@" , item.price);
        NSLog(@"Product id: %@" , item.productIdentifier);
    }


    for (NSString *invalidProductId in response.invalidProductIdentifiers)
    {
        NSLog(@"Problem in iTunes connect configuration for product: %@" , invalidProductId);
    }


    [myProduct release];

    // populate UI
    [request autorelease];
}

Edit:

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

Я также убедился, что загрузил и отклонил пакет выпуска приложений, а не adhoc; хотя я не знаю, имеет ли это значение.

4b9b3361

Ответ 1

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

Это еще не принято; Я выполняю некоторые тесты с различными структурами storekit.

Мой вывод:

2011-10-27 15:17:49.297 My Simple App[7376:707] productsRequest
2011-10-27 15:17:49.298 My Simple App[7376:707] Product title: Simple subscription
2011-10-27 15:17:49.299 My Simple App[7376:707] Product description: Subscribe and get the latest content to your iPhone or iPod Touch device
2011-10-27 15:17:49.299 My Simple App[7376:707] Product price: 2.99
2011-10-27 15:17:49.300 My Simple App[7376:707] Product id: sub1

Вот что я сделал.

  • Я добавил свои банковские реквизиты. Я все еще не думаю, что это имеет к этому отношение, хотя.

  • Примечание. Приобретение приложения в приложении по-прежнему "Ожидание обзора", и я получил вышеупомянутый вывод.

  • Я заменил:

    #define kMySubscriptionFeature @"uk.co.somesite.someapp.sub1"

с:

#define kMySubscriptionFeature @"sub1"

Я собираюсь запустить некоторые тесты с помощью MKStoreKit и с другими фреймворками, чтобы убедиться, что все в порядке.

Код, который я использовал ниже, отредактирован по соображениям безопасности:

.h файл

//  ManageSubscriptionsVC.h
//  This doesn't have visual output, just NSLog at the moment
//  This doesn't use MKStoreKit yet

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

#define kMySubscriptionFeature @"sub1"

/*
 Shared Secret

 A shared secret is a unique code that you should use when you make the 
 call to our servers for your In-App Purchase receipts. 
 Without a shared secret, you will not be able to test auto-renewable 
 In-App Purchase subscriptions in the sandbox mode. 

 Also note that you will not be able to make them available 
 on the App Store.

 Note: Regardless of what app they are associated with, 
 all of your auto-renewable subscriptions will use this 
 same shared secret.
 */
#define sharedSecret @"PUTSHAREDSECRETHERE"


@interface ManageSubscriptionsVC : UIViewController
<SKProductsRequestDelegate, SKProductsRequestDelegate, SKPaymentTransactionObserver>
{
    SKProduct *proUpgradeProduct;
    SKProductsRequest *productsRequest;
}

- (void)requestProUpgradeProductData;

@end

.m file

//
//  ManageSubscriptionsVC.m

#import "ManageSubscriptionsVC.h"

@implementation ManageSubscriptionsVC

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)didReceiveMemoryWarning
{
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Release any cached data, images, etc that aren't in use.
}

#pragma mark - View lifecycle

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    self.title = @"Manage Subscriptions";


    if ([SKPaymentQueue canMakePayments])
    {
        // Display a store to the user.

        //[MKStoreManager sharedManager];
        //NSLog(@"purhcasable = %@", [[MKStoreManager sharedManager] purchasableObjectsDescription] );
        [self requestProUpgradeProductData];

    }
    else
    {
        // Warn the user that purchases are disabled.
        NSString *message = @"In-app purchases are disabled. Please review your settings";
        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error" message:message delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [alertView show];
        [alertView release];
    } // end if
}

- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

#pragma mark - StoreKit Delegate

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

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
{
    NSLog(@"productsRequest");

    NSArray *myProduct = [[NSArray alloc] initWithArray:response.products];

    for(SKProduct *item in myProduct)
    {

        NSLog(@"Product title: %@" , item.localizedTitle);
        NSLog(@"Product description: %@" , item.localizedDescription);
        NSLog(@"Product price: %@" , item.price);
        NSLog(@"Product id: %@" , item.productIdentifier);


    }

    /*
    for(NSString *invalidProduct in response.invalidProductIdentifiers)
        NSLog(@"Problem in iTunes connect configuration for product: %@", invalidProduct);
    */

    for (NSString *invalidProductId in response.invalidProductIdentifiers)
    {
        NSLog(@"Problem in iTunes connect configuration for product: %@" , invalidProductId);
    }


    [myProduct release];

    // populate UI
    [request autorelease];
}

#pragma mark - PaymentQueue

-(void)paymentQueue:(SKPaymentQueue *)queue removedTransactions:(NSArray *)transactions
{
}

-(void)paymentQueue:(SKPaymentQueue *)queue restoreCompletedTransactionsFailedWithError:(NSError *)error
{
}

-(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
}

-(void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue
{
}

#pragma mark - Other


- (void)requestProUpgradeProductData
{
    NSSet *productIdentifiers = [NSSet setWithObject:kMySubscriptionFeature];
    productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:productIdentifiers];
    productsRequest.delegate = self;
    [productsRequest start];

    // we will release the request object in the delegate callback
}





@end

Ответ 2

После двух дней ожидания, новых идентификаторов, профилей и т.д. это исправило это для меня.

Почему документы требуют использовать полный синтаксис com.iap.isrubbish?

Спасибо за помощь

Я заменил:

определить kMySubscriptionFeature @ "uk.co.somesite.someapp.sub1"

с:

define kMySubscriptionFeature @ "sub1"

Ответ 3

Я только выяснил, что я поменял идентификатор продукта и имя ссылки, когда я создал покупку в приложении, поэтому в моем случае я использовал неправильную строку, чтобы попытаться найти Продукт... Трудно заметить.

Ответ 4

Я тестировал новейшую версию моего существующего, полностью работающего приложения с приложением-покупкой, чтобы гарантировать, что функциональность все еще работает, как ожидалось, когда я начал видеть проблемы в сообщении iTunes connect. Моя проблема была (я забыл), что MKStoreKit сохранил факт покупки на брелках на разных устройствах, поэтому, хотя я использовал новую учетную запись пользователя, мой брелок регистрировал устройство как уже приобретенное. [self removeAllKeychainData] изнутри MKStoreManager исправил проблему. Надеюсь, это избавит кого-то от разочарования.

Ответ 5

Моя проблема заключалась в том, что я вошел в систему на устройстве, используя реальный идентификатор apple. Затем вышли (Iphone- > Настройки → Магазин приложений → Мой идентификатор- > Выйти) Затем снова развернуто, и ура помогла.

Спасибо всем в Интернете.