相信大家都因?yàn)锳PP沒有集成蘋果內(nèi)購IAP而被拒過,相信大家都費(fèi)盡心機(jī)的學(xué)會(huì)了集成IAP,相信大家最后還是在糾結(jié)IAP抽成30%利潤的問題,相信大家一直在考慮如何能避開蘋果內(nèi)購或者蘋果審核期間使用IAP,審核之后可以動(dòng)態(tài)的換成我們常用的支付寶微信支付方式。一路走來,我也一直飽受IAP所帶來的折磨。在一番摸索嘗試之后,逐漸形成了自己現(xiàn)在的IAP規(guī)避模式。
1.程序內(nèi)正常集成IAP相關(guān)的支付流程。
2.在Appdelegate.m文件的didFinishLaunchingWithOptions方法中加入一個(gè)判斷當(dāng)前是否為審核狀態(tài)的接口。(接口跟后臺(tái)商量好,審核期間接口返回yes)
3.審核通過后,讓接口返回no,具體操作參照下方代碼塊。
// 是否在審核期間
- (void)getIsAudit {
/*k_IAP為接口宏,參數(shù)可以隨便寫,建議寫成版本號version,這樣不容易重復(fù),容易區(qū)分當(dāng)前是那一次次審核
*審核期間后臺(tái)接口的判斷為:version == "2.2.0" ? code = 1 : code = 0
*審核通過后臺(tái)接口的判斷為:version == "2.2.1" ? code = 1 : code = 0 (因?yàn)楸敬翁峤粚徍说拇a塊中傳的參數(shù)為2.2.0,所以接口會(huì)返回 code = 0)
*每一次提交審核的時(shí)候僅需要修改一下version的值(改成和接口判斷一致的,但是要注意不能和之前的重復(fù),也就是說這個(gè)數(shù)只能加不能減)
*/
[[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"]) {
//說明當(dāng)前是審核狀態(tài),將該狀態(tài)記錄在本地,在支付的地方通過判斷k_IsAudit_KEY值來決定是否選擇使用IAP內(nèi)購方式
[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];
}];
}
直接寫一個(gè)不需要傳參數(shù)的接口,審核期間讓接口能正常訪問,審核通過之后,把接口關(guān)閉,這樣不是更簡單嗎?
我之前也是這么做的,后來發(fā)現(xiàn)這樣做有局限性。比如:你第二次提交審核時(shí),因?yàn)榻涌谑悄茉L問的,所以不僅蘋果審核你的應(yīng)用會(huì)走蘋果內(nèi)購,你的APP用戶也會(huì)走蘋果內(nèi)購。而增加參數(shù)進(jìn)行版本控制,就可以避免審核期間,老版本用戶不用走蘋果內(nèi)購流程。