您的位置:首页 > 移动开发 > IOS开发

IOS购买支付篇 In App Purchase Xcode实现代码

2014-12-05 14:07 435 查看
1、首先验证是否能够支付
 -
(BOOL)checkCanMakePayment
{
    if
([SKPaymentQueue canMakePayments]) {
        return
YES;
    }
else {
        return
NO;
    }
}
2、其次获取需要支付商品信息
- (void)purchaseProductWithIndentifier:(NSString
*)identifier
{
    if
(identifier == nil || [@"" isEqualToString:identifier]) {
        if
(self.delegate && [self.delegate respondsToSelector:@selector(AppStorePurchaseSuccess:)]
{
            [self.delegate
AppStorePurchaseSuccess:identifier];
        }
        return;
    }
    [[ITTActivityIndicator
currentIndicator] displayActivity:@"获取商品信息中..."]; 
    SKProductsRequest
*request= [[SKProductsRequest alloc] initWithProductIdentifiers:[NSSet
setWithObject:identifier]];
request.delegate = self;
[request start];
}

3、接收来自App Store的回应
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response

{

    [[ITTActivityIndicator currentIndicator] hide];

    NSArray *myProducts = response.products;

    // Populate your UI from the products list.i

    // Save a reference to the products list.

    if (myProducts && [myProducts count] > 0) {        

        SKProduct *selectedProduct = [myProducts objectAtIndex:0];

        SKPayment *payment = [SKPayment paymentWithProduct:selectedProduct];

        [[SKPaymentQueue defaultQueue] addPayment:payment];

    }

    else {

        [[ITTActivityIndicator currentIndicator] displayActivity:@"获取商品信息失败!"];

    }

}

4、对支付进行相应的处理

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

{

    for (SKPaymentTransaction *transaction in transactions)

    {

        switch (transaction.transactionState)

        {

            case SKPaymentTransactionStatePurchasing:

                [[ITTActivityIndicator currentIndicator] displayMessage:@"连接App Store..."];

                break;

            case SKPaymentTransactionStatePurchased:

                [self completeTransaction:transaction];

                break;

            case SKPaymentTransactionStateFailed:

                [self failedTransaction:transaction];

                break;

            case SKPaymentTransactionStateRestored:

                [self restoreTransaction:transaction];

                break;

            default:

                break;

        }

    }

}

另外:如何恢复产品,其实已经得到了,这里再详细描述下:

首先向AppStore请求恢复交易:
[[SKPaymentQueue defaultQueue]  restoreCompletedTransactions];

然后当用户输入正确的AppStore帐户,进入

然后再下面的函数处理就好了!

- (void) restoreTransaction: (SKPaymentTransaction *)transaction

{

    [[SKPaymentQueue defaultQueue] finishTransaction: transaction];

}

PS: StoreKit不支持模拟器。。(^_^)

PPS:现在的模拟器已经可以支持内支付了。

原文地址:http://blog.sina.com.cn/s/blog_626e5d6901015fk7.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  In App Purchases xcode