每篇文章我都有個寫在前面的話
在我們平時開發(fā)中单默,公司總是有需求要我們的蘋果App可以像安卓的一樣加入強制更新瑰抵,但是由于蘋果的審核時神圣不可侵犯的肛炮,只要你的項目中讓我看到有強制更新的頁面或者提示框或者小到一個提示更新的按鈕蟀淮,那不好意思,直接不給你通過審核超凳,直接Pass愈污,沒的商量!轮傍!所以這成為我們提交項目中一個非常值得注意的問題钙畔。但是公司老大的命令我們也是不能不辦的,兩面夾擊金麸,為難的永遠(yuǎn)是我們!
針對這種無理的要求簿盅,我開動了我的大腦挥下,做一次我和蘋果審核員的對賭游戲
廢話不多說,直接上代碼
+ (void)getNewVersion
{
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://itunes.apple.com/cn/lookup?id=1036152564"]];
NSURLSessionDataTask *task = [[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
// 請求的數(shù)據(jù)轉(zhuǎn)字典桨醋,必須判斷數(shù)據(jù)有值才走里面棚瘟,不然空的data會出現(xiàn)crash
if (data.length > 0) {
NSDictionary *result = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
NSString *newVersion = [result[@"results"] firstObject][@"version"];
NSString *message = [result[@"results"] firstObject][@"releaseNotes"];
NSString *trackViewUrl = [result[@"results"] firstObject][@"trackViewUrl"];
//屏蔽蘋果審核員看到此更新提示口(此版本每次提交前更新成目前線上版本號)
if ([newVersion isEqualToString:@"2.5.0"]) return;
// 獲得當(dāng)前打開軟件的版本號
NSString *currentVersion = [NSBundle mainBundle].infoDictionary[@"CFBundleShortVersionString"];
// 針對新下載用戶如果是第一次下載 不會走里面代碼。如果是老用戶就會走里面代碼
if (![newVersion isEqualToString:currentVersion]) {
UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:@"有新版本啦" message:message preferredStyle:UIAlertControllerStyleAlert];
[alertVC addAction:[UIAlertAction actionWithTitle:@"馬上嘗鮮"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction * _Nonnull action) {
[[UIApplication sharedApplication]
openURL:[NSURL URLWithString:trackViewUrl]];
}]];
UIViewController *mainVc = [UIApplication sharedApplication].keyWindow.rootViewController;
if (mainVc.presentedViewController) {
mainVc = mainVc.presentedViewController;
}
[mainVc presentViewController:alertVC animated:YES completion:nil];
}
}
}];
[task resume];
}
這是我把強制更新做成一個繼承NSObject工具類里面的代碼喜最,我的類是這樣寫的
強制更新.png
強制更新.png
-
下面是調(diào)用方法(當(dāng)然你一定要包含頭文件)
強制更新調(diào)用.png
里面的請求方法偎蘸,我已經(jīng)改成了現(xiàn)在蘋果推薦的HTTPS安全請求方式,可以直接拖到項目里面用!
- 我和蘋果審核員對賭的游戲其實就一句話
屏蔽蘋果審核員看到此更新提示口(此版本號必須每次提交前更新成目前線上已上線版本號)
if ([newVersion isEqualToString:@"2.5.0"]) return;
在上線之前一定要將此處的版本號改成你現(xiàn)在已經(jīng)上線的版本號迷雪,我對賭的理由是限书,蘋果審核員在審核我們的App的時候,他的手機或者pad上絕對沒有安裝我們之前的App章咧,如果安裝了的話倦西,那他就會跟我們用戶一樣,會彈出更新提示框赁严,這樣我們的應(yīng)用鐵定是通過不了的扰柠,如果沒安裝,那他請求下來的version一定是跟我這里寫死的是一樣的疼约,所以就會return掉卤档,不會走后面的代碼,事實證明程剥,我贏了劝枣!但是這也不是絕對的,如果真有一天審核員心情好倡缠,一直留著你的App哨免,那你就中獎了!
- 當(dāng)然還有福利給你們昙沦,我Demo代碼已經(jīng)上傳到Github 點擊下載
如果覺得我的文章對你有用琢唾,請關(guān)注我,共同進步盾饮,謝謝采桃!