ios实现弹窗提醒用户更新版本

作者: qingchen91 | 来源:发表于2016-12-08 12:11 被阅读4933次

前言

  • 第一次写简书,不好的地方还请担待
  • 现在AppStore官方审核不允许提示更新升级的字样,但是我下面所用的方法可以通过审核,可以放心的使用

版本更新的实现的效果

屏幕快照 2016-12-08 11.30.21.png
  • 我这里就写了一个按钮,所以用户不能取消,如果不升级,每次打开都会有这个弹框
  • 当然也可以设置一个取消的按钮,但是我们公司的要求的相当于强制更新,我只能写一个按钮

版本更新实现的思路

  • 获取自身的版本号
  • 获取AppStore的版本号
  • 自身的版本号和AppStore的比较
  • 弹窗提示

所需数据的获取的方式

1.获取自身的版本号

WechatIMG56.jpeg

2.AppStore的版本号

WechatIMG58.jpeg

具体实现的代码

  • 网络请求app的信息
-(void)VersonUpdate{
    //定义的app的地址
    NSString *urld = [NSString stringWithFormat:@"http://itunes.apple.com/lookup?id=%@",@"你的APPID"];
    
    //网络请求app的信息,主要是取得我说需要的Version
    NSURL *url = [NSURL URLWithString:urld];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url
                                                           cachePolicy:NSURLRequestReloadIgnoringCacheData
                                                       timeoutInterval:10];
    [request setHTTPMethod:@"POST"];
    
    NSURLSession *session = [NSURLSession sharedSession];
    
    NSURLSessionDataTask *task = [session dataTaskWithURL:url 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];
}
  • 获取自身的版本号并与AppStore比较
-(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];
                }
            }
        }
    }
}
  • 根据比较的结果,实现弹窗
-(void)updateVersion{
    NSString *msg = [NSString stringWithFormat:@"更新最新版本,优惠信息提前知"];
    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"升级提示" message:msg preferredStyle:UIAlertControllerStyleAlert];
   UIAlertAction *otherAction = [UIAlertAction actionWithTitle:@"现在升级"style:UIAlertActionStyleDestructive handler:^(UIAlertAction*action) {
        
        NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"你的app在商店的下载地址"]];
        [[UIApplication sharedApplication]openURL:url];
    }];
   [alertController addAction:otherAction];
   [self.window.rootViewController presentViewController:alertController animated:YES completion:nil];
    
}

温馨提示

  • 我这种实现的方式是根据自身的版本和线上版本,比较大小来实现的弹窗,如果比线上的版本小,就会弹窗,具体的比较看上面的代码。这样上线可以瞒天过海。
  • 当你想实现提醒更新的时候,直接的把我上面的代码,copy到AppDelegate里面即可,当然还要换上你自己的appid,具体的获取方式,上面已经写明。
  • 如果想模拟器测试效果,只要把version改的比线上的版本小就可以。
  • 我的弹窗比较“简陋”,具体的好看的效果,还需要自己去改变了。

相关文章

网友评论

  • 不暗_黑夜:你好,这个方法只有在APP上架以后才能用嘛?我的项目现在在testFlight上测试,用你的方法请求,返回的数据是空的
  • darkengine:从app store查询信息的http请求是get不是post吧?
  • cjjjjjj:你好,检查版本之后弹框提醒的功能要在启动页面出现,应该把这个方法写在哪里?
    我写在didFinishLaunchingWithOptions里面会有警告whose view is not in the window hierarchy!然后页没有弹框出来
  • 沙子LOVE:现在 你这个是持续弹框的吧,每一次进来都会进行弹框升级提醒, 要是我现在想这样 ,只有在一个账号只提醒一次 弹框,附加什么条件实现呢
    li二彩:@索马里11 嗯嗯 对的 已经摆平 谢谢你::pray:
    qingchen91:@li二彩 这个的话,你可以记录一下是不是第一次打开,本地的记录,判断一下就好了
    li二彩:我也有这个需求,不知道您是怎么解决的
  • 佛前一粒沙:按照你的方法模拟器测试是可以的,我想真机测试一下 ,这个的话是不是必须要上线以后才能测试!
  • 素酥:你好。。我想問下。。我想使用你的更新辦法,但是我在“只要把version改的比线上的版本小就可以”你這句話就迷惑了,版本不是越來越大的嗎?我是真正上線的那種。。還是直接copy你的代碼就可以了。。其他的都不用改的尼
    qingchen91:@素酥 客气了:smile::smile:
    素酥:好的⋯⋯谢谢你
    qingchen91:@素酥 我是说本地测试的时候,你肯定要比线上的版本低的啊,所以把项目中的改一小一下就行了,等真的上线的时候,改成老板要的正常的就行了。如果直接用我的代码,只要填上自己的app的那两个数据就行了,其它不用改动的

本文标题:ios实现弹窗提醒用户更新版本

本文链接:https://www.haomeiwen.com/subject/pxbrmttx.html