文章

IAP - iOS

动态获取IAP价格。

动态获取IAP本地商店价格

获取美国商店、中国商店不同的价格

CN: ¥18

US: $2.99

请求

1
2
3
SKProductsRequest* productRequest=[[SKProductsRequest alloc] initWithProductIdentifiers:aProductSet];
productRequest.delegate=self;
[productRequest start];

代理处理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {
    id Books = response.products;
    CCArray *rets = CCArray::create();
    for (SKProduct *curProduct in Books) {
        //id & price
        NSNumberFormatter *numberFormatter = [[[NSNumberFormatter alloc] init] autorelease];
        [numberFormatter setFormatterBehavior:NSNumberFormatterBehavior10_4];
        [numberFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
        [numberFormatter setLocale:curProduct.priceLocale];
        NSString *formattedPrice = [numberFormatter stringFromNumber:curProduct.price];
		NSLog(@"%@:%@", curProduct.productIdentifier,formattedPrice);
        rets->addObject(CCString::create([curProduct.productIdentifier UTF8String]));
        rets->addObject(CCString::create([formattedPrice UTF8String]));
    }
    [request release];
}

购买IAP

初始化购买监听代理

1
2
3
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];

在didReceiveResponse返回的product加入到购买队列中实现购买

1
2
3
4
SKPayment *payment = [SKPayment paymentWithProduct:curProduct];
[[SKPaymentQueue defaultQueue] addPayment:payment];

监听代理处理

1
2
3
4
5
6
7
8
9
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
- (void)paymentQueue:(SKPaymentQueue *)queue removedTransactions:(NSArray *)transactions
- (void)paymentQueue:(SKPaymentQueue *)queue restoreCompletedTransactionsFailedWithError:(NSError *)error
- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue
- (void)paymentQueue:(SKPaymentQueue *)queue updatedDownloads:(NSArray *)downloads

@end

恢复IAP

代理如购买IAP实现

触发如下

1
2
3
[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];

本文由作者按照 CC BY 4.0 进行授权