iOS APP如何實現(xiàn)檢測更新

第一種是直接從AppStore上獲取APP的版本號被啼,然后已安裝的App版本號比較判斷是否需要更新关筒,另一種是從服務器上獲取APP的版本號暖途,然后與已安裝的App版本號比較判斷是否需要更新芜飘。
第一種方法檢測更新方法的優(yōu)點是:檢測版本號是實時同步的泪蔫;缺點是:蘋果網(wǎng)絡不穩(wěn)定堪簿,檢測更新有點延時痊乾,部分App獲取不到任何參數(shù)。第二種檢測更新方法的優(yōu)點是:檢測更新速度快椭更、檢測穩(wěn)定哪审;缺點是:和App Store上的應用版本號不同步(App上架需要審核時間,不確定什么時候成功更新到App Store上)虑瀑。

那么湿滓,我先來說一下第一種方法吧,先從AppStore上獲取版本號舌狗,代碼如下:

//獲取版本號
-(void)Postpath
{
    NSString *appId = @"0123456789";//這是隨便寫的叽奥,你可以在查看APP信息里找到AppleId
NSString *urlStr = [[NSString alloc] initWithFormat:@"http://itunes.apple.com/lookup?id=%@",appId];
    NSURL *url = [NSURL URLWithString: urlStr];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url
                                                           cachePolicy:NSURLRequestReloadIgnoringCacheData
                                                       timeoutInterval:10];
    
    [request setHTTPMethod:@"POST"];
    
    
    NSOperationQueue *queue = [NSOperationQueue new];
    
    [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response,NSData *data,NSError *error){
        NSMutableDictionary *receiveStatusDic=[[NSMutableDictionary alloc]init];
        if (data) {
            
            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"];
            }else{
                
                [receiveStatusDic setValue:@"-1" forKey:@"status"];
            }
        }else{
            [receiveStatusDic setValue:@"-1" forKey:@"status"];
        }
        
        [self performSelectorOnMainThread:@selector(receiveData:) withObject:receiveStatusDic waitUntilDone:NO];
    }];
    
}

在這個方法里可以輸出獲取的版本號:

-(void)receiveData:(id)sender
{
    NSLog(@"receiveData=%@",sender);
    [self compareVersion:sender[@"version"]];
   
}

在這個方法里比較新舊版本號的大小:

- (BOOL)compareVersion:(NSString *)serverVersion{
    
    //獲取應用當前版本號
    NSDictionary *infoDic = [[NSBundle mainBundle] infoDictionary];
    NSString *appVersion = [infoDic objectForKey:@"CFBundleShortVersionString"];
    
    /*
     typedef NS_ENUM(NSInteger, NSComparisonResult)
     {
     NSOrderedAscending = -1L,//升序
     NSOrderedSame,   //等于
     NSOrderedDescending  //降序
     };
     */
    
    //比較當前版本和新版本號的大小
    if ([appVersion compare:serverVersion options:NSNumericSearch] == NSOrderedAscending) {
        NSLog(@"發(fā)現(xiàn)新版本: %@",serverVersion);
        return YES;
    }else{
        NSLog(@"沒有新版本");
        return NO;
    }
    
}

第二種方法痛侍,是從服務器上獲取版本號進行判斷的朝氓,代碼如下:

-(void)reloadData{

 NSString *BaseUrl = @"";
    NSDictionary *dic = [NSDictionary dictionary];
    dic = @{@"FunName":@"Get_App_Version",@"Params":@{@"DATA":@"2"}};
    HttpRequest *respont = [HttpRequest share];
    [respont sendRequestWithUrlNSString:BaseUrl withDic:dic withCompletion:^(NSDictionary *responseData, id status, NSError *error) {
        
        //判斷版本
        NSLog(@"%@",responseData);
        if ([[responseData objectForKey:@"FAG"]isEqualToString:@"1"]) {

//獲取當前應用版本號
            NSDictionary *infoDict=[[NSBundle mainBundle] infoDictionary]; 
            NSString *version=[infoDict objectForKey:@"CFBundleShortVersionString"];
            //            NSLog(@"%@",version);
            NSDictionary *VersionDic = [responseData objectForKey:@"RET"];
//獲取到服務器上最后的版本號
            NSString *backVersion = [VersionDic objectForKey:@"IOS_VERSION"];
            
            if(backVersion==nil)
            {
              return;
            }
//VersionDic  objectForKey:@"IOS_Index"]判斷是否在審核期間,如果在審核期間為1,沒在審核期間為0,后臺給的
            if([version isEqualToString:backVersion] == NO&&[[VersionDic  objectForKey:@"IOS_Index"] isEqualToString:@"0"])
            {
                dispatch_async(dispatch_get_main_queue(), ^{
                    
                    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"軟件有新版本赵哲,是否下載" message:nil preferredStyle:UIAlertControllerStyleAlert];

                    UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {
                            NSLog(@"取消更新");          
                    }];
                    UIAlertAction *otherAction = [UIAlertAction actionWithTitle:@"確定" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
                        NSString *updateUrl = [VersionDic objectForKey:@"IOS_URL"];//后臺給的
                        [[UIApplication sharedApplication]openURL:[NSURL URLWithString:updateUrl]];
                    }];
                    [alertController addAction:cancelAction];
                    [alertController addAction:otherAction];
                    
                    [self presentViewController:alertController animated:YES completion:nil];
                    
                });
                
                
            }else{
                dispatch_async(dispatch_get_main_queue(), ^{

                });
            }
        }
    }];

}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末待德,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子枫夺,更是在濱河造成了極大的恐慌将宪,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件筷屡,死亡現(xiàn)場離奇詭異涧偷,居然都是意外死亡,警方通過查閱死者的電腦和手機毙死,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門燎潮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人扼倘,你說我怎么就攤上這事确封。” “怎么了再菊?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵爪喘,是天一觀的道長。 經(jīng)常有香客問我纠拔,道長秉剑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任稠诲,我火速辦了婚禮侦鹏,結果婚禮上,老公的妹妹穿的比我還像新娘臀叙。我一直安慰自己略水,他們只是感情好,可當我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布劝萤。 她就那樣靜靜地躺著渊涝,像睡著了一般。 火紅的嫁衣襯著肌膚如雪床嫌。 梳的紋絲不亂的頭發(fā)上跨释,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天,我揣著相機與錄音厌处,去河邊找鬼煤傍。 笑死,一個胖子當著我的面吹牛嘱蛋,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼洒敏,長吁一口氣:“原來是場噩夢啊……” “哼龄恋!你這毒婦竟也來了?” 一聲冷哼從身側響起凶伙,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤郭毕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后函荣,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體显押,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年傻挂,在試婚紗的時候發(fā)現(xiàn)自己被綠了乘碑。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡金拒,死狀恐怖兽肤,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情绪抛,我是刑警寧澤资铡,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站幢码,受9級特大地震影響笤休,放射性物質發(fā)生泄漏。R本人自食惡果不足惜症副,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一店雅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧瓦糕,春花似錦底洗、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至圣勒,卻和暖如春费变,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背圣贸。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工挚歧, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人吁峻。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓滑负,卻偏偏與公主長得像在张,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子矮慕,可洞房花燭夜當晚...
    茶點故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內容