今天赶着回家,明天来接着写。。。
一定要绑定税务那栏的银行卡信息。
苹果内购的产品审核时和二进制程序审核一起的。
在做内购时,切记把银行卡信息填对,且需要银行去备案,这样钱才能汇到该账户中。
用沙盒测试的时候,当选中的消耗型产品是时,也是可以测试成功,如果提示获取产品信息失败,只能表示前期工作做的不到位。
第一步 填写税务信息
- 选择iTunes
- 详细操作
进入之后,需要把红色框起的三项都设置好,其中bank Info 就是对公账号,就是汇钱的时候,就汇到这个账户里,这一步相对来说比较麻烦,需要银行卡的很多信息。在Tax Info中,往下进行的时候,大家用百度翻译一下,什么意思,哪些选项该勾哪些不必勾,一目了然。
- 这里就是显示你的税务这一栏的状态,刚开始是processing后来转变为download Aggrement这个时候,如果你之前已经创了app应用以及付费产品和沙盒测试账号的话,现在就可以运行测试了。
第二步,创建测试账号
- 选择iTunes
- 添加沙盒测试用户
- 这个测试用户不一定非要是一个appStore上的真实账户,可以是虚拟的,这个密码就是等会你测试的时候,需要输入的,所以需要自己记住,并在之后提交In-APP Purchase 产品审核的时候,需要把这个测试账号和密码添加到额外信息中。
就是添加IN-APP Purchase 产品信息
- 在developer中心,选择:
- 这里选择内购产品的类型,需要根据自己公司产品的定位进行选择。
- 首先添加的是产品参考名称,这个名称是用于显示在iTunes中的IN-APP Purchase,这个产品ID需要注意一点的就是,需要跟自己这边的后台工程师协商,因为在整个产品流程中,最后后台需要得到充值记录,就需要结合这个产品ID,所以需要谨慎。
4.添加语言一栏,就根据你公司产品所在地区选择使用的语言,然后注意的是,在做描述一栏时,也需要注意语法,尽量写花多少人民币购买多少XXX币,就可以了。在传那个截图照片的时候,只需要把在你工程中显示需要用内购的地方截图就可以了。
就这样,算是完成了产品信息的描述了。
其实这个时候,你就可以添加内购代码进行购买产品的流程,可以测试通过。
这个时候,就添加内购环节的代码
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];
}