IAP 简单流程整理

来源:互联网 发布:报纸排版软件有哪些 编辑:程序博客网 时间:2024/05/02 01:41

IAP,就是程序内购买,比如游戏中购买游戏币、读书应用中订阅书籍等。OK,我们开始吧。


1、在itunesconnect.apple.com中创建一个应用,点击Manage In-App Purchases,可以通过create new创建新的产品,其中的Product ID就是以后用来交易的ID。


2、进行客户端开发

2.1、添加框架

StoreKit.framework

2.2、导入头文件

#import <StoreKit/StoreKit.h>

2.3、添加监听

[[SKPaymentQueue defaultQueue] addTransactionObserver:self];//监听购买结果

2.4、实现购买结果

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

{

    for (SKPaymentTransaction *transaction in transactions) {

        switch (transaction.transactionState) {

            case SKPaymentTransactionStatePurchased:// 交易完成

                break;

            case SKPaymentTransactionStateFailed:// 交易失败

                break;

            case SKPaymentTransactionStateRestored:// 已经购买过该商品

                break;

            case SKPaymentTransactionStatePurchasing:// 交易中

                break;

            default:

                break;

        }

    }

}

2.5、发起购买
如果交易只在本地,跳过第3步。如果为了安全或交易的东西在服务器,比如网游里的道具,则需要服务器端开发

[[SKPaymentQueue defaultQueue] addPayment:[SKPayment paymentWithProductIdentifier:productID]];

2.6、交易完成后清除交易

[[SKPaymentQueue defaultQueue] finishTransaction: transaction];


3、服务器开发

3.1、获得交易凭证

在- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions返回SKPaymentTransactionStatePurchased交易成功时,返回的

SKPaymentTransaction对象里transaction.transactionReceipt就是凭证。

3.2、验证交易凭证

把凭证进行base64后以post的方式json格式发送到苹果服务器验证

https://sandbox.itunes.apple.com/verifyReceipt // 沙盒

https://buy.itunes.apple.com/verifyReceipt // 正式

{"receipt-data":"base64后的凭证信息"} // post内容

会返回json格式信息,如果status=0则认为凭证是合法的。


4、测试

4.1、创建测试帐号

打开itunesconnect.apple.com首页,进入Manage Users,点击Test Users。添完保存即可。

注意:创建的帐号不能是真是的用户帐号

4.2、测试过程

注意:测试的时候如果appstore绑定了帐号不是测试帐号,无限购买失败

注意:有文档说创建了产品,当时可以会出现无限购买失败,需要等待一会等苹果的沙盒准备完成


5、其他

5.1查询产品信息

5.1.1发起获取

SKProductsRequest *request=[[SKProductsRequest alloc] initWithProductIdentifiers:[NSSet setWithArray:productID]];

request.delegate=self;

[request start];

[request release];

备注:如果产品为com.xx.a,com.xx.b,productID为com.xx时可以查出全部(新版可能已经无法查出全部了)

5.1.2申明SKProductsRequestDelegate并实现

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response

并可以获得产品信息

for( SKProduct *product in response.products ) {

    NSLog(@"product info");

}


5.1.2发起获取

SKProductsRequest *request=[[SKProductsRequest alloc] initWithProductIdentifiers:[NSSet setWithArray:productID]];

request.delegate=self;

[request start];

[request release];


6 提交

创建版本后,一定不要点击“Prepare for upload”或“Read for upload”。要在版本详情里的IAP中勾选后,才能点击“Read for upload”。否则IAP中的产品会永远“Read for submit”!!只有重新上传才能解决。(新版已经不需要勾选了,只有添加新的时可能需要勾选)

7 坑

7.1 越狱机,可以IAP已经破坏而无法购买7.2 审核的时候,如果用生产服务器验证是,出现21007,要使用测试服务器再验证一下,一般都能过