Встроенные покупки чрезвычайно медленные - PullRequest
3 голосов
/ 22 марта 2012

В моем приложении есть встроенные покупки в приложении, это просто одноразовые покупки.Они полностью работают, и реализация даже жива в магазине приложений.Однако в кажущиеся случайными моменты времени, когда пользователь пытается купить ответ от Apple, ОЧЕНЬ МЕДЛЕННО, как порядка 30+ секунд по Wi-Fi в сети 100 Мбит / с или в LTE / 3G.Похоже, что это не имеет ничего общего с подключением, просто требуется много времени для ответа Apple.

Вот основной код, который создает это приглашение и обрабатывает ответ:

// User has decided to buy a sticker pack
- (void) promptToBuyPack:(StickerPack *)pack {
    if([SKPaymentQueue canMakePayments]) {
        if([products valueForKey:pack.packID]) {
            SKPayment *payment = [SKPayment paymentWithProduct:[products valueForKey:pack.packID]];
            [[SKPaymentQueue defaultQueue] addPayment:payment];
        }
        else {
            nlog(@"User attempted to buy a pack that iTunes does not recognize");
        }

    }
    else {
        UIAlertView *a = [[UIAlertView alloc] initWithTitle:@"Can not make purchases" message:@"Your device does not have purchases enabled. Please enable them in order to proceed" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [a show];
    }
}



- (void) grantProductAccess:(NSString *)productIdentifier {
    // Store purchase in user defaults
    nlog(@"Bought product: %@", productIdentifier);
    [[NSUserDefaults standardUserDefaults] setValue:[NSNumber numberWithBool:YES] forKey:productIdentifier];
    [[NSUserDefaults standardUserDefaults] synchronize];
}

- (void) tellUserPurchaseIsComplete {
    UIAlertView *a = [[UIAlertView alloc] initWithTitle:@"Purchase Complete" message:@"Your pack is now unlocked, Enjoy!" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil];
    [a show];
    [a release];
}

- (void) paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions {
    for(SKPaymentTransaction *transaction in transactions) {
        BOOL canFinishTransaction = NO;
        switch (transaction.transactionState) {
            case SKPaymentTransactionStatePurchased:
                canFinishTransaction = YES;
                [self grantProductAccess:transaction.payment.productIdentifier];
                [self tellUserPurchaseIsComplete];
                if(iPad)
                    [FlurryAPI logEvent:[NSString stringWithFormat:@"Purchased %@ on iPad",transaction.payment.productIdentifier]];
                else
                    [FlurryAPI logEvent:[NSString stringWithFormat:@"Purchased %@ on iPod",transaction.payment.productIdentifier]];
                break;
            case SKPaymentTransactionStateFailed:
                nlog(@"Transactin failed");
                canFinishTransaction = YES;
                break;
            case SKPaymentTransactionStateRestored:
                nlog(@"SKPaymentTransactionStateRestored");
                canFinishTransaction = YES;
                [self grantProductAccess:transaction.originalTransaction.payment.productIdentifier];
                break;
            default:
                nlog(@"SKPaymentTransactionDefault");
                break;
        }

        // Remove from payment queue
        if(canFinishTransaction)
            [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...