一.前言
1.第一次寫部落格,可以說網上資源的總結一下,雷同多有擔待。
2.隨著15年3月起app上架AppStore官方審核不允許提示更新升級的字樣。可規則是死的 ,人是活的 。還是有空可鑽的。
二.提示版本更新的兩種方式
提示更新大致無非有兩種:
1.在設定裡有“檢查更新”處,檢查版本,不做重點介紹 (PS:安卓截圖,IOS暫時不要想了;不過也可以讓後台控制,審查期間讓後台隱藏掉,審核通過後再顯示。不過當升級版本的時候也不大好控制。綜合考慮:還是不要這個了吧 .....AppStore有現成的提示更新就行了。)
2.啟動APP的時候已彈窗的形式提示更新 (重點介紹)
三.實現方法邏輯機制及原代碼
1.實現思路:a.取自身版本號碼;b.取AppStore版本號碼;c.版本號碼的比較 d.彈框的顯示 e.跳轉AppStore更新
2.代碼實現
a.取自身版本號碼,Xcode 的Version (這個版本號碼就是1.0.3)
//擷取APP自身版本號碼 NSString *localVersion = [[[NSBundle mainBundle]infoDictionary]objectForKey:@"CFBundleShortVersionString"];
b.取AppStore版本號碼
1.首先得擷取App的AppID (紅色箭頭所指。PS:塗鴉感)
//定義的App地址NSString *url = [NSString stringWithFormat:@"http://itunes.apple.com/lookup?id=%@",AppID];//AppID即是如圖紅色箭頭擷取的AppID//PS:有的時候可能會請求不到資料,但是AppID對了,有可能是App是上架地區範圍的原因,建議使用在com末尾加上“/cn” //例:NSString *url = [NSString stringWithFormat:@"http://itunes.apple.com/cn/lookup?id=%@",AppID];//網路請求App的資訊(我們取Version就夠了) NSURL *url = [NSURL URLWithString:url]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:10]; [request setHTTPMethod:@"POST"]; NSURLSession *session = [NSURLSession sharedSession]; NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { NSMutableDictionary *receiveStatusDic=[[NSMutableDictionary alloc]init]; if (data) { //data是有關於App所有的資訊 NSDictionary *receiveDic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil]; if ([[receiveDic valueForKey:@"resultCount"] intValue]>0) { [receiveStatusDic setValue:@"1" forKey:@"status"]; [receiveStatusDic setValue:[[[receiveDic valueForKey:@"results"] objectAtIndex:0] valueForKey:@"version"] forKey:@"version"]; //請求的有資料,進行版本比較 [self performSelectorOnMainThread:@selector(receiveData:) withObject:receiveStatusDic waitUntilDone:NO]; }else{ [receiveStatusDic setValue:@"-1" forKey:@"status"]; } }else{ [receiveStatusDic setValue:@"-1" forKey:@"status"]; } }]; [task resume];
c
1.彈窗比較
-(void)receiveData:(id)sender{ //擷取APP自身版本號碼 NSString *localVersion = [[[NSBundle mainBundle]infoDictionary]objectForKey:@"CFBundleShortVersionString"]; NSArray *localArray = [localVersion componentsSeparatedByString:@"."]; NSArray *versionArray = [sender[@"version"] componentsSeparatedByString:@"."]; if ((versionArray.count == 3) && (localArray.count == versionArray.count)) { if ([localArray[0] intValue] < [versionArray[0] intValue]) { [self updateVersion]; }else if ([localArray[0] intValue] == [versionArray[0] intValue]){ if ([localArray[1] intValue] < [versionArray[1] intValue]) { [self updateVersion]; }else if ([localArray[1] intValue] == [versionArray[1] intValue]){ if ([localArray[2] intValue] < [versionArray[2] intValue]) { [self updateVersion]; } } } }}
d,e升級提示及跳轉
-(void)updateVersion{ NSString *msg = [NSString stringWithFormat:@"又出新版本啦,快點更新吧!"]; UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"升級提示" message:msg preferredStyle:UIAlertControllerStyleAlert]; // Create the actions. UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"下次再說" style:UIAlertActionStyleCancel handler:nil]; UIAlertAction *otherAction = [UIAlertAction actionWithTitle:@"現在升級"style:UIAlertActionStyleDestructive handler:^(UIAlertAction*action) { NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:kBuyerAppUpdateUrl]]; [[UIApplication sharedApplication]openURL:url]; }]; // Add the actions. [alertController addAction:cancelAction]; [alertController addAction:otherAction]; [self.window.rootViewController presentViewController:alertController animated:YES completion:nil];}
四.結語
至此,關於彈窗提示升級就結束了 。PS:這裡比較版本號碼不是不一樣就提示更新升級。而是目前的版本號如果比AppStore版備號小的時候提示彈框升級。這樣做的最大好處就是蘋果在審核App時不會出現提示升級。當然如果你的版本號碼比AppStore設定小了(不可能),那你就。。。。