IOS应用内付费(IAP)代码实现

在编写代码前,还需要去itunes connect配置APP和产品,然后还要在项目设置中做一些设置。这些我就不讲了 大家可以去google,资料很多的。


在IOS中如果你想购买物品的话,大概需要经过下面几步:

1.获取商店内商品信息

2.购买商品


如果你没有走第1步,就无法进行第2步的操作!


如果你在游戏中,想要做一个商店,然后希望玩家可以在商店中购买并付费给你们,那你首先需要显示一个商店给玩家 是吧?

如果去显示,这是程序员的工作,无非就是UI编程方面的工作。那么我们主要讲讲 如何获得商店内的物品信息,我们来看看下面的代码:

//获得商店信息
- (void)getShopInfo {
    if ([SKPaymentQueuecanMakePayments] == YES) {//有权限购买
        NSSet *set = [NSSetsetWithArray:[[NSArrayalloc] initWithObjects:@"1001",nil]];
        
        SKProductsRequest *request = [[SKProductsRequestalloc] initWithProductIdentifiers:set];
        request.delegate = self;
        [request start];
    }
}

因为用户是可以禁用内付费功能的,所以在使用IAP之前,先检测下是否禁用了。第一条语句就是实现这个功能:

if ([SKPaymentQueuecanMakePayments] == YES) {//有权限购买


上面代码中的 @"1001" 就是商品的ID,这个ID是我之前在 itunes connect中配置好的。我这里只查询1个商品的信息,所以只给了@"1001"。


如果你要获得商店内的信息,你需要实现这个协议:

@protocol SKProductsRequestDelegate <SKRequestDelegate>

@required
// Sent immediately before -requestDidFinish:
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response__OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0);

@end


下面是我的实现,这里这是简单的把得到的信息显示出来而已:

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response{  
    
    for (SKProduct *productin response.products) {
        NSLog(@"商品标题:%@",product.localizedTitle);
        NSLog(@"商品价格:%@",product.price);
        NSLog(@"商品描述:%@",product.localizedDescription);
    }
    
    [selfbuyItemWithID:@"1001"];
}


接下来,我们看看如何购买商品:

//购买指定类型的商品
- (void)buyItemWithID:(NSString *)itemID {
    
    SKPayment *payment = [SKPaymentpaymentWithProductIdentifier:itemID];
    [[SKPaymentQueuedefaultQueue] addPayment:payment];
}

最后是购买结果的代理方法:

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

    for (SKPaymentTransaction *transactionin transactions) {
        
        switch (transaction.transactionState) {
                
            caseSKPaymentTransactionStatePurchasing://购买中
                NSLog(@"购买中");
                break;
                
            caseSKPaymentTransactionStatePurchased://购买成功
                NSLog(@"购买成功");
                break;
                
            caseSKPaymentTransactionStateFailed://购买失败
                NSLog(@"购买失败");
                break;
                
            caseSKPaymentTransactionStateRestored://恢复商品
                NSLog(@"恢复商品");
                break;
        }
    }
}


这些只是一些核心的代码,其实如果你要做IAP功能,还需要一些更细致的代码,这些你们可以去google一下。很多资料的

你可能感兴趣的:(ios,工作,Google,osx,transactions,payment)