iOS開發-IAP內購

介紹

分享下自己做內購遇到問題,總結出來的經驗。

接入

使用RMStore。

1、使用RMStore的接入步驟

1、在Podfile內添加pod 'RMStore'并pod install;
2、實現并設置接口RMStoreReceiptVerificator;
3、在應用啟動時調用接口 
- (void)requestProducts:(NSSet*)identifiers
                success:(RMSKProductsRequestSuccessBlock)successBlock
                failure:(RMSKProductsRequestFailureBlock)failureBlock
4、在支付時調用接口
- (void)addPayment:(NSString*)productIdentifier
              user:(NSString*)userIdentifier
           success:(void (^)(SKPaymentTransaction *transaction))successBlock
           failure:(void (^)(SKPaymentTransaction *transaction, NSError *error))failureBlock

2、詳細解析

  • 步驟1,引入第三方庫。
  • 步驟2,RMStoreReceiptVerificator類是驗證憑據的有效性。
    實現接口RMStoreReceiptVerificator,并向服務器請求驗證憑據的有效性,等返回后回調RMStore。
@implementation IAPReceiptVerificator
- (void)verifyTransaction:(SKPaymentTransaction*)transaction
                  success:(void (^)())successBlock
                  failure:(void (^)(NSError *error))failureBlock
{
    RequestSuccessResponseBlock success=^(NSDictionary *responseDic){
        NSLog(@"success");
        if (successBlock) {
            successBlock();
        }
    };
    RequestFailResponseBlock fail=^(NSError *error){
        NSLog(@"fail");
        if (failureBlock) {
            failureBlock(error);
        }
    };
    NSData* data = [NSData dataWithContentsOfURL:[NSBundle mainBundle].appStoreReceiptURL];
    NSMutableDictionary *params = [NSMutableDictionary dictionary];
    params[@"receipt-data"] = [data base64EncodedStringWithOptions:0];
    [[HTTPClient sharedHTTPClient] requestWithParameters:params
                                                  withPath:@"pay/apple"
                                               withRESTful:POST_REQUEST
                                          withSuccessBlock:success
                                             withFailBlock:fail];
}
  • 步驟3,在應用啟動時請求商品列表,可以每次請求列表,也可以暫存本地并設置有效時間;
  • 步驟4,發起支付,傳入商品ID和用戶ID。

疑難雜癥排查

1、invalid ID

檢查下列項目

  • 內購是否申請


  • 內購是否添加到應用


  • 銀行協議是否添加(重點排查對象
  • BundleID是否和申請的ID一致


下列是無關的項目

  • 不需要配置特殊的provisioning profile


  • 不需要提交二進制文件

2、支付失敗

檢查下列項目

  • 添加沙盒賬號


  • 是否為沙盒賬號


  • 檢查請求的ID是否一致


  • 檢查是否持有引用 (因為RMStore持有的是弱引用

3、如何登陸沙盒測試賬號

在iPhone的設置里面注銷原來的賬號,在應用中發起支付,會彈出系統提示框,在這里登錄;


沙盒測試賬號的要求:不能是已有的賬號,可以使用任意的郵箱,不能購買app。

4、您的首個 App 內購買項目必須以新的 App 版本提交,只能創建報刊免費內購

填寫銀行信息。

總結

總體的流程是

  • (后臺)配置協議
  • (后臺)配置商品
  • (后臺)添加商品
  • (iOS)請求商品列表
  • (iOS)用RMStore發起支付
  • (iOS)RMStore回調,請求服務器驗證憑據
  • (服務器)暫存憑據并請求蘋果服務器驗證
  • (服務器)發放商品并回調客戶端
  • (iOS)收到服務器回調,回調RMStore,完成支付

蘋果開發文檔

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容