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
-
(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
相关文章推荐
- IOS购买支付篇 In App Purchase
- ios 应用内支付(In-App Purchase,沙盒测试,后台验证)
- unity3d 嵌入iOS的 In App Purchase 应用程序内购买
- iOS的in-app purchase C#服务器二次验证实现
- iOS应用内支付(IAP,In-App Purchase)的那些坑
- iOS 上 App 内购买(in-app purchase)的误消费可以退款吗?
- IOS应用内购买(In App Purchase)总结
- 【IAP支付之二】In app purchase 本地购买和服务器购买两种购买模式
- Windows Phone 8 In app purchase 应用内购买 / 应用内支付
- iOS应用内购买(In-App Purchase)
- iOS游戏开发三:苹果内支付实现 In-app
- iOS 开发 初级:应用内购买 In-App Purchase
- 【引用】unity3d 嵌入iOS的 In App Purchase 应用程序内购买
- ios 应用内支付(In-App Purchase,沙盒测试,后台验证)iap
- AIR Native Extension实现iOS应用内付费(In-App Purchase)全教程(二)——AIR面向iOS设备的原生扩展
- ios 应用内购买 In-App Purchase
- AIR Native Extension实现iOS应用内付费(In-App Purchase)全教程(三)——iOS应用内付费简介和准备流程
- IOS应用内购买(In App Purchase)总结
- IOS应用内购买(In App Purchase)总结
- iOS 开发 初级:应用内购买 In-App Purchase