In-APP Purchase 产品 详细流程。


今天赶着回家,明天来接着写。。。
一定要绑定税务那栏的银行卡信息。
苹果内购的产品审核时和二进制程序审核一起的。
在做内购时,切记把银行卡信息填对,且需要银行去备案,这样钱才能汇到该账户中。
用沙盒测试的时候,当选中的消耗型产品是时,也是可以测试成功,如果提示获取产品信息失败,只能表示前期工作做的不到位。


第一步 填写税务信息


  1. 选择iTunes
    In-APP Purchase 产品 详细流程。_第1张图片
  2. 详细操作
    进入之后,需要把红色框起的三项都设置好,其中bank Info 就是对公账号,就是汇钱的时候,就汇到这个账户里,这一步相对来说比较麻烦,需要银行卡的很多信息。在Tax Info中,往下进行的时候,大家用百度翻译一下,什么意思,哪些选项该勾哪些不必勾,一目了然。
    In-APP Purchase 产品 详细流程。_第2张图片
  3. 这里就是显示你的税务这一栏的状态,刚开始是processing后来转变为download Aggrement这个时候,如果你之前已经创了app应用以及付费产品和沙盒测试账号的话,现在就可以运行测试了。
    In-APP Purchase 产品 详细流程。_第3张图片

第二步,创建测试账号


  1. 选择iTunes
    In-APP Purchase 产品 详细流程。_第4张图片
  2. 添加沙盒测试用户
    In-APP Purchase 产品 详细流程。_第5张图片
  3. 这个测试用户不一定非要是一个appStore上的真实账户,可以是虚拟的,这个密码就是等会你测试的时候,需要输入的,所以需要自己记住,并在之后提交In-APP Purchase 产品审核的时候,需要把这个测试账号和密码添加到额外信息中。
    In-APP Purchase 产品 详细流程。_第6张图片

就是添加IN-APP Purchase 产品信息


  1. 在developer中心,选择:
    In-APP Purchase 产品 详细流程。_第7张图片
  2. 这里选择内购产品的类型,需要根据自己公司产品的定位进行选择。
    In-APP Purchase 产品 详细流程。_第8张图片
  3. 首先添加的是产品参考名称,这个名称是用于显示在iTunes中的IN-APP Purchase,这个产品ID需要注意一点的就是,需要跟自己这边的后台工程师协商,因为在整个产品流程中,最后后台需要得到充值记录,就需要结合这个产品ID,所以需要谨慎。
    In-APP Purchase 产品 详细流程。_第9张图片
    4.添加语言一栏,就根据你公司产品所在地区选择使用的语言,然后注意的是,在做描述一栏时,也需要注意语法,尽量写花多少人民币购买多少XXX币,就可以了。在传那个截图照片的时候,只需要把在你工程中显示需要用内购的地方截图就可以了。
    In-APP Purchase 产品 详细流程。_第10张图片
    就这样,算是完成了产品信息的描述了。


其实这个时候,你就可以添加内购代码进行购买产品的流程,可以测试通过。


这个时候,就添加内购环节的代码


1.获取产品信息

根据后台获取到的关联之前自己创建的那个产品ID,来获取产品的基本信息。

- (void)getProductInfoByProductId:(NSString *)productId {
    NSSet *set = [NSSet setWithArray:@[productId]];
    SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers:set];
    request.delegate = self;
    [request start];
    }

实现SKProductsRequestDelegate中的,是否得到产品信息,如果得不到产品信息,购买一定失败。

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

    NSArray *myProduct = response.products;

    if (myProduct.count == 0) {
        NSLog(@"无法获取产品信息,购买失败");
        [self alertWarningMessage:@"无法获取产品信息,购买失败"];
        return ;
    }

    SKPayment *payment = [SKPayment paymentWithProduct:myProduct[0]];

    [[SKPaymentQueue defaultQueue] addPayment:payment];

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(exitTime * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        //监听购买结果
        [[SKPaymentQueue defaultQueue] addTransactionObserver:self];
    });
    }

2.获取到产品信息后,会弹出输入你的测试账号及密码,进行购买

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions {
    for (SKPaymentTransaction *transaction in transactions)
    {
        switch (transaction.transactionState)
        {
            case SKPaymentTransactionStatePurchased://交易完成
                NSLog(@"交易完成【transactionIdentifier】 = %@  %@", transaction.transactionIdentifier);
                [self completeTransaction:transaction];
                break;
            case SKPaymentTransactionStateFailed://交易失败
                [self failedTransaction:transaction];
                break;
            case SKPaymentTransactionStateRestored://已经购买过该商品
                [self restoreTransaction:transaction];
                break;
            case SKPaymentTransactionStatePurchasing:      //商品添加进列表
                NSLog(@"商品添加进列表");
                break;
            default:
                break;
        }
     }
    }

交易成功,就需要在后台进行验证。

- (void)completeTransaction:(SKPaymentTransaction *)transaction {
        // Your application should implement these two methods.
                    NSString * productIdentifier = transaction.payment.productIdentifier;
        NSString *receipt = [transaction.transactionReceipt base64Encoding];
    if ([productIdentifier length] > 0) {
        // 向自己的服务器验证购买凭证
        __weak typeof(self) temp = self;
        self.appleVerifyReceiptSuccess = ^() {
//            [temp noticeMessage:@"购买成功" time:exitTime];
            NSLog(@"苹果内购【验证购买成功】");
            // Remove the transaction from the payment queue.
            [[SKPaymentQueue defaultQueue] finishTransaction: transaction];
        };
        //这里就是后台给的验证接口,需要自己传一个验证码
       [self appleVerifyReceiptByAccess_token:account.access_token receipt_data:receipt];
        self.dataDelegate = self;
    }   
}
- (void)failedTransaction:(SKPaymentTransaction *)transaction {
    if(transaction.error.code != SKErrorPaymentCancelled) {
        NSLog(@"购买失败");
        [self alertWarningMessage:@"购买失败"];
    } else {
        NSLog(@"用户取消交易");
        [self alertWarningMessage:@"您取消了交易"];
    }
    [[SKPaymentQueue defaultQueue] finishTransaction: transaction];
}
- (void)restoreTransaction:(SKPaymentTransaction *)transaction {
    // 对于已购商品,处理恢复购买的逻辑
    [[SKPaymentQueue defaultQueue] finishTransaction: transaction];
}

这样就算大功告成了。

你可能感兴趣的:(个人错误总结)