相信大家都因为APP没有集成苹果内购IAP而被拒过,相信大家都费尽心机的学会了集成IAP,相信大家最后还是在纠结IAP抽成30%利润的问题,相信大家一直在考虑如何能避开苹果内购或者苹果审核期间使用IAP,审核之后可以动态的换成我们常用的支付宝微信支付方式。一路走来,我也一直饱受IAP所带来的折磨。在一番摸索尝试之后,逐渐形成了自己现在的IAP规避模式。
1.程序内正常集成IAP相关的支付流程。
2.在Appdelegate.m文件的didFinishLaunchingWithOptions方法中加入一个判断当前是否为审核状态的接口。(接口跟后台商量好,审核期间接口返回yes)
3.审核通过后,让接口返回no,具体操作参照下方代码块。
// 是否在审核期间
- (void)getIsAudit {
/*k_IAP为接口宏,参数可以随便写,建议写成版本号version,这样不容易重复,容易区分当前是那一次次审核
*审核期间后台接口的判断为:version == "2.2.0" ? code = 1 : code = 0
*审核通过后台接口的判断为:version == "2.2.1" ? code = 1 : code = 0 (因为本次提交审核的代码块中传的参数为2.2.0,所以接口会返回 code = 0)
*每一次提交审核的时候仅需要修改一下version的值(改成和接口判断一致的,但是要注意不能和之前的重复,也就是说这个数只能加不能减)
*/
[[NetManager shareManager] POST:k_IAP parameters:@{@"version" : @"2.2.0"} progress:^(NSProgress * _Nonnull downloadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];
NSLog(@"%@", dic);
NSString *code = [NSString stringWithFormat:@"%@",dic[@"code"]];
if ([code isEqualToString:@"1"]) {
//说明当前是审核状态,将该状态记录在本地,在支付的地方通过判断k_IsAudit_KEY值来决定是否选择使用IAP内购方式
[DEFAUITS setBool:YES forKey:k_IsAudit_KEY];
} else {
[DEFAUITS setBool:NO forKey:k_IsAudit_KEY];
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"error= %@", error);
[DEFAUITS setBool:NO forKey:k_IsAudit_KEY];
}];
}
直接写一个不需要传参数的接口,审核期间让接口能正常访问,审核通过之后,把接口关闭,这样不是更简单吗?
我之前也是这么做的,后来发现这样做有局限性。比如:你第二次提交审核时,因为接口是能访问的,所以不仅苹果审核你的应用会走苹果内购,你的APP用户也会走苹果内购。而增加参数进行版本控制,就可以避免审核期间,老版本用户不用走苹果内购流程。