博客> iOS使用RMStore内购
iOS使用RMStore内购
2017-08-18 03:30 评论:0 阅读:954 tianya2416
RMStore 内购 iap

前言:

小弟最近项目中开始接触到内购,本文主要介绍如何使用RMStore开发应用内购(In App Purchase),有一些是根据实际需求做的考虑,有不同的见解欢迎探讨。

大体内购流程:

1、应用发送请求到服务器,获取所有的可用Products Id集合(当然你也可以把Products Id写到程序中,这样会导致不能动态配置商品)
2、根据服务器返回的Products Id 以及信息设置购买界面UI用户点击购买商品
3、客户端根据相应的Product Id向App Store请求产品信息
4、请求产品信息完成后发起购买payment(使用StoreKit)
5、App Store处理该payment,并返回完成的transaction
6、客户端从transaction中获取receipt凭证数据(为了数据安全建议加密处理),并将其发送给服务器,等待返回
7、服务器验证receipt凭证数据是否使用过,保存然后发给App Store验证是否合法
8、服务器得到App Store验证结果,返回给客户端相应购买成功或失败信息
9、客户端提示用户购买结果以及处理相应UI

RMStore的使用

  1、向AppStore请求产品需要购买的产品
NSSet * set = [NSSet setWithObjects:@"id1",@"id2",@"id3",nil];
 [[RMStore defaultStore] requestProducts:set success:^(NSArray *products, NSArray *invalidProductIdentifiers) {
        successBlock(products,invalidProductIdentifiers);
        if([products count] == 0){
            NSLog(@"--------------没有商品------------------");
        }
    } failure:^(NSError *error) {
        failureBlock(error);
         NSLog(@"--------------请求商品失败------------------");
    }];

2、判断当前订单是否可以购买

[RMStore canMakePayments]

3、向AppStore购买产品
//productIdentifier 产品id
[[RMStore defaultStore] addPayment:productIdentifier success:^(SKPaymentTransaction *transaction) {
        successBlock(transaction);
        NSLog(@"------交易成功------");
    } failure:^(SKPaymentTransaction *transaction, NSError *error) {
        failureBlock(transaction,error);
        NSLog(@"------交易失败------");
    }];

4、获取receipt(为了数据传输安全建议加密处理,并交给后台验证)

+ (NSString *)GetMGRMStoreWithReceipt
{
    NSURL *receiptURL = [[NSBundle mainBundle] appStoreReceiptURL];
    NSData *receiptData = [NSData dataWithContentsOfURL:receiptURL];
    NSString *receiptStr = [receiptData base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed];
    return receiptStr;
}

5、RMStore链接
https://github.com/robotmedia/RMStore.git
使用cocoa pod 可以pod 'RMStore', '~> 0.7.1'

其他

关于苹果证书的生成和设置的教程
http://www.jianshu.com/p/86ac7d3b593a
收藏
0
sina weixin mail 回到顶部