В песочнице покупки приложения не запрашивается мой логин / пароль - PullRequest
4 голосов
/ 18 января 2012

Мы разрабатываем приложение, которое (конечно) использует при покупках приложений (IAP). Я сделал все в руководстве, чтобы включить iap, и все работает нормально, пока я не захочу совершить покупку.
Часть кода:

MainViewController.m

    -(void)viewDidLoad {
            if ([SKPaymentQueue canMakePayments]) {
                    MyStoreObserver *observer = [[MyStoreObserver alloc] init];     
                    [[SKPaymentQueue defaultQueue] addTransactionObserver:observer];        

                    SKProductsRequest *request= [[SKProductsRequest alloc] initWithProductIdentifiers: [NSSet setWithObjects: @"com.company.app.product1", @"com.company.app.product1", nil]];
                    request.delegate = self;
                    [request start];
            }
    };

    -(void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {
            for (SKProduct *prod in response.products) {
                    NSLog(@"%@ (%@)", prod.localizedTitle, prod.price);
            }
            [request release];
    };

    -(IBAction)clickBuy:(UIButton *)__sender {
            SKPayment *payment = [SKPayment paymentWithProductIdentifier:@"com.company.app.product1"];
            [[SKPaymentQueue defaultQueue] addPayment:payment];
    };

MyStoreObserver.m

    - (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions {
        for (SKPaymentTransaction *transaction in transactions) {
            switch (transaction.transactionState) {
                case SKPaymentTransactionStatePurchased:
                    NSLog(@"SKPaymentTransactionStatePurchased");
                    break;
                case SKPaymentTransactionStateFailed:               
                    NSLog(@"SKPaymentTransactionStateFailed");
                    break;
                case SKPaymentTransactionStateRestored:
                    NSLog(@"SKPaymentTransactionStateRestored");
                    break;
                case SKPaymentTransactionStatePurchasing:
                    NSLog(@"SKPaymentTransactionStatePurchasing");
                default:
                    break;
            }
        }
    };

Метод делегата productRequest: показывает 2 товара с их названием / ценой. Как я и вошел на сайт iTunes Connect.

Но как только я нажимаю кнопку «купить», диалоговое окно не появляется и не запрашивает мои учетные данные. Только "SKPaymentTransactionStatePurchasing" регистрируется.

И я:
- ... вышли из системы в панели настроек / магазина
- ... использую правильные профили обеспечения
- ... я в отчаянии

Любой

Ответы [ 5 ]

12 голосов
/ 20 октября 2013

Я столкнулся с подобной проблемой, но моя была скорее глупостью с моей стороны. Я «реорганизовал» вызов на finishTransaction, чтобы он вызывался для каждого состояния в transactionState:

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions {
    for (SKPaymentTransaction *transaction in transactions) {
        switch (transaction.transactionState) {
            case SKPaymentTransactionStatePurchased:
                // do stuff
                break;
            case SKPaymentTransactionStateFailed:
                // do stuff
                break;
            case SKPaymentTransactionStateRestored:
                // do stuff
                break;
            default:
                break;
        }
        [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
    }
}

Оказывается ™, это также вызовет finishTransaction на SKPaymentTransactionStatePurchasing, что вызовет сбой. Перемещение finishTransaction обратно в каждый случай оператора switch исправило это.

4 голосов
/ 18 января 2012

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

NSArray *transactions = [[SKPaymentQueue defaultQueue] transactions];
for(id transaction in transactions){
    [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
}

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

3 голосов
/ 25 августа 2014

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

2 голосов
/ 18 января 2012

Доступ к Apple App Store для iPhone может быть ограничен .Например, родители могут ограничить возможность своих детей покупать дополнительный контент.

Перед размещением транзакции убедитесь, можете ли вы покупать или нет? Проверьте это следующим образом -

  -(IBAction)clickBuy:(UIButton *)__sender {

      if ([SKPaymentQueue canMakePayments]) {
        SKPayment *payment = [SKPayment paymentWithProductIdentifier:@"Product_id"];
        [[SKPaymentQueue defaultQueue] addPayment:payment];
      }
      else {
      //show appropriate message 
      }
   }
0 голосов
/ 18 января 2012

Тестируете ли вы на iPhone / iPad Simulator 4.2 или что-то еще? Это может быть проблемой. Тестирование на iPhone / iPad Simulator 5.0 или устройстве корректно запустит storekit.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...