美文网首页
iOS开发-IAP内购

iOS开发-IAP内购

作者: 辉辉岁月 | 来源:发表于2021-08-17 15:18 被阅读0次

    接入

    使用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,完成支付

    苹果开发文档

    相关文章

      网友评论

          本文标题:iOS开发-IAP内购

          本文链接:https://www.haomeiwen.com/subject/vycibltx.html