iOS自動檢測版本更新

雖然蘋果官方是不允許應用自動檢測更新,提示用戶下載,因爲蘋果會提示你有多少個軟件需要更新,但是有的時候提示用戶一下有新版還是很有必要的。

 

首先說一下原理:

每個上架的蘋果應用程序,都會有一個應用程序的ID,根據這個ID我們就可以獲取到當前程序的最新版本號,然後和自己的版本號作比較,如果一樣的話就是最新版,反之就不是新版,就可以提示用戶來手動下載最新版的程序。因爲有ID所以就可以定位到這個APP,點擊下載即可。

 

源碼:

一般建議檢測更新的代碼放到主頁控制器裏。

首先還要導入一個頭文件用來打開AppStore下載更新

//AppStore
#import <StoreKit/StoreKit.h>

接着還有代理

SKStoreProductViewControllerDelegate

然後開始檢測更新

    //檢測版本,版本更新
    NSError *error;
    NSString *urlStr = @"http://itunes.apple.com/lookup?id=上架AppID";
    NSURL *url = [NSURL URLWithString:urlStr];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    NSDictionary *appInfoDict = [NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingMutableLeaves error:&error];
    if (error)
    {        return;
    }
    NSArray *resultArray = [appInfoDict objectForKey:@"results"]; 
    if (![resultArray count])
    {        return;
    }
    
    NSDictionary *infoDict = [resultArray objectAtIndex:0];    //獲取服務器上應用的最新版本號
    NSArray* arr=[infoDict[@"version"] componentsSeparatedByString:@"."];
    NSInteger updateVersion=0;   
    for (int i=0; i<arr.count; i++)
    {       
         if(i==0)
        {
            updateVersion+=[arr[i] integerValue]*1000;
        }        else if (i==1)
        {
            updateVersion+=[arr[i] integerValue]*100;
        }        else if (i==2)
        {
            updateVersion+=[arr[i] integerValue]*10;
        }        else if (i==3)
        {
            updateVersion+=[arr[i] integerValue]*1;
        }
    }
    NSString *trackName = infoDict[@"trackName"];
    _trackViewUrl = infoDict[@"trackViewUrl"];//獲取當前設備中應用的版本號
    NSDictionary *infoDic = [[NSBundle mainBundle] infoDictionary];
    NSArray* arr2=[[infoDic objectForKey:@"CFBundleShortVersionString"] componentsSeparatedByString:@"."];
    NSInteger currentVersion=0;    
    for (int i=0; i<arr2.count; i++)
    {        if(i==0)
        {
            currentVersion+=[arr2[i] integerValue]*1000;
        }        else if (i==1)
        {
            currentVersion+=[arr2[i] integerValue]*100;
        }        else if (i==2)
        {
            currentVersion+=[arr2[i] integerValue]*10;
        }        else if (i==3)
        {
            currentVersion+=[arr2[i] integerValue]*1;
        }
    }    
    //判斷兩個版本是否相同
    if (currentVersion < updateVersion)
    {
        NSString *titleStr = [NSString stringWithFormat:@"檢查更新:%@", trackName];
        NSString *messageStr = [NSString stringWithFormat:@"發現新版本%@,是否更新", infoDict[@"version"]];
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:titleStr message:messageStr delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"升級", nil];
     //爲了區分其他彈出框而已
        alert.tag = 1112427256;
        [alert show];
        
    }

 

接着就是用戶更不更的問題了

 

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {    
    if (alertView.tag == 1112427256)
    {        if (buttonIndex == 1)
        {            //點擊”升級“按鈕,就從打開app store上應用的詳情頁面
            SKStoreProductViewController *storeProductVC = [[SKStoreProductViewController alloc] init];
            storeProductVC.delegate = self;
            NSDictionary *dict = [NSDictionary dictionaryWithObject:@"上架AppID" forKey:SKStoreProductParameterITunesItemIdentifier];
            [storeProductVC loadProductWithParameters:dict completionBlock:^(BOOL result, NSError *error)
             {                 if (result)
                 {
                     [self presentViewController:storeProductVC animated:YES completion:nil];
                 }
             }];
        }
    }
}

還有就是用戶打開AppStore但是沒有下載就返回回來的狀況

- (void)productViewControllerDidFinish:(SKStoreProductViewController *)viewController
{
    [viewController dismissViewControllerAnimated:YES completion:nil];
}

OK到這裏就結束了。這樣的話就可以檢測App是不是最新版了,而且用戶也能實時看到,最關鍵的是蘋果審覈還能通過。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章