版本更新(強制更新)

通常 iOS系統(tǒng)默認在WIFI條件下,且網(wǎng)絡狀態(tài)良好的情況下,自動更新應用,但如果用戶設置了關閉自動更新,而我們的app出現(xiàn)了重要版本更新,或者有在有新版本的情況下必須更新的需求,這時候我們就需要對app版本進行檢測、更新。
我們目前的這個項目就有這種需求,當有版本更新時,必須強制用戶更新,否則不允許用戶使用app。下面我們來看看具體的實現(xiàn)方法。
要想實現(xiàn)版本更新,首先需要我們進行版本檢測,也就說,我們需要獲取到當前app的版本號以及目前App Store上的版本號,將兩者進行對比判斷,是否需要更新,如果需要我們在進行下一步操作。

首先我們先來獲取本地版本:

//獲取當前APP的版本號
NSDictionary *infomation = [[NSBundle mainBundle] infoDictionary];
NSString *currentVersion = infomation[@"CFBundleShortVersionString"];

下面我們來看看如何獲取到App Store上的版本號。獲取App Store上的版本號需要我們和App Store進行數(shù)據(jù)通信,App Store給我們提供了相應的接口,我們只需要發(fā)送一個Get請求就能輕松獲取到App Store上的版本號。下面我們來看一下demo
#pragma mark 檢測更新
#define APP_URL [NSString stringWithFormat:@"http://itunes.apple.com/cn/lookup?id=%@",APP_ID]
- (void)examineSystemUpdate
{
AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
[mgr GET:APP_URL parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {

        NSLog(@"response = %@",responseObject);
        //App Store返回的數(shù)據(jù)
        NSDictionary *dict = [responseObject[@"results"] objectAtIndex:0];
        //獲取App Store上的版本號
        NSString *appStoreVersion = dict[@"version"];

        //獲取當前APP的版本號
        NSDictionary *infomation = [[NSBundle mainBundle] infoDictionary];
        NSString *currentVersion = infomation[@"CFBundleShortVersionString"];
        //比較版本號判斷是否更新(這里的比較方法直接用的字符串之間的比較,利用NSNumericSearch屬性,會忽略字符串按位比較字符串中的數(shù)字)
        NSComparisonResult result = [currentVersion compare:appStoreVersion options:NSNumericSearch];
        //如果當前版本低,就更新
        if (result == NSOrderedAscending) {
            //更新方法
            [self alertUpdateMessage:dict];
        } 

    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"error = %@",error.localizedDescription);
    }];
}

這里我們講一下,從App Store上獲取到的版本信息有很多,但是對于這個功能來說大部分是沒有用的,我們用到的就兩個,一個是version當前版本號,返回的是一個字符串,另一個是trackViewUrl應用程序在App Store中的下載地址,有了這個地址我們之間調(diào)用[[UIApplication sharedApplication] openURL:downLoadUrl];方法就可以跳轉(zhuǎn)到App Store中進行下載。

下面我們來看一下如何跳轉(zhuǎn)到App Store中,方法很簡單,直接上demo

/**
 跳轉(zhuǎn)到App Store的方法

 @param dict 從App Store獲取到的版本信息字典
 */
- (void)alertUpdateMessage:(NSDictionary *)dict
{
    NSString *messageStr = [NSString stringWithFormat:@"發(fā)現(xiàn)新版本%@,需要更新,請前往App Store更新應用!",dict[@"version"]];
    UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"更新" message:messageStr preferredStyle:UIAlertControllerStyleAlert];
    UIAlertAction *sure = [UIAlertAction actionWithTitle:@"確定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {

        NSURL *downLoadUrl = [NSURL URLWithString:dict[@"trackViewUrl"]];
        [[UIApplication sharedApplication] openURL:downLoadUrl];

    }];
    [alert addAction:sure];
    [self.window.rootViewController presentViewController:alert animated:YES completion:nil];
}

以上我們已經(jīng)實現(xiàn)了主體方法,我們只需要在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法中調(diào)用一下- (void)examineSystemUpdate方法即可實現(xiàn),當有新版本時會彈出提示更新,點擊確定會跳轉(zhuǎn)到App Store。但這樣并不會直接進行下載更新,還需要用戶手動點擊下載,如果用戶沒有下載,又直接打開app,這時候app是又可以使用了的。
如果我們想讓他不管什么時候進入app,只要不是最新版本,都彈出更新提示,直到他下載了新版本為止。這個想法有點流氓,但是不排除會有這樣流氓的客戶會提出這種流氓的需求,那我們需要怎么做呢?
其實也很簡單,我們只需要在- (void)applicationWillEnterForeground:(UIApplication *)application;方法中,再調(diào)用一次檢測版本更新的方法- (void)examineSystemUpdate就OK了。這樣不管是app啟動,還是從后臺進入到前臺,都會進行版本檢測,只要不是最新版本,都會提示更新,直到更新至最新版本為止。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容