zoukankan      html  css  js  c++  java
  • iOS自动更新如何实现

         APP检测更新可以使用两种方法。第一种是和安卓等系统一样,获取自己服务器的APP版本号与已安装的APP版本号比较;第二种是根据已发布到app store上的应用版本号与已安装的APP版本号比较更新。第一种检测更新方法的优点是:检测更新速度快、检测稳定;缺点是:和app store上的应用版本号不同步(app上架需要审核时间,不确定什么时候成功更新到app store上)。第二种方法检测更新方法的优点是:检测版本号是实时同步的;缺点是:苹果网络不稳定,检测更新延时严重,部分APP获取不到任何参数。第一种,只需要后台服务器根据app store上架版本号手动修改数据就行了,APP版本号格式也可以自己定义。

     

    iOS程序自动提示更新的实现方案大致分为两种:
    第一种,自己服务器提供一个接口,告知相关app的当前版本,是否需要更新,以及更新的地址等信息 。
    第二种,就是利用苹果的appstore 提供的相关api进行查询更新。
     
    由于此前没有找到iOS程序更新的方法,就用了第一种方式,但后来发现了一些问题,自己提供服务器,需要维护,程序提交更新后,由于苹果需要审核,中间会有时间差,这个时间不好把握。后台就找苹果的相关文档,终于找到了。
    http://www.apple.com/itunes/affiliates/resources/documentation/itunes-store-web-service-search-api.html
     
    实现机制:
     
    #define APP_URL @"http://itunes.apple.com/lookup?id=你程序的appId"
     
      ASIFormDataRequest *formRequst = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:APP_URL]];


    请求网络数据,返回的大致数据如下,其他还有好多数据,我们把关键的给截取出来

    {  
        resultCount = 1;  
        results =     (  
                    {  
                artistId = 开发者 ID;  
                artistName = 开发者名称; 
                price = 0; 
                isGameCenterEnabled = 0;  
                kind = software;  
                languageCodesISO2A =             (  
                    EN  
                ); 
                trackCensoredName = 审查名称;  
                trackContentRating = 评级;  
                trackId = 应用程序 ID;  
                trackName = 应用程序名称";  
                trackViewUrl = 应用程序介绍网址;  
                userRatingCount = 用户评级;  
                userRatingCountForCurrentVersion = 1;  
                version = 版本号;  
                wrapperType = software; 
          }  
        );  
    }  

    取得这些数据后关键的信息就是“ version”最新版本号和“ trackViewUrl”程序地址。然后与本地程序的版本比较即可。




    上面的build 对应info.plist文件里的“Bundle version”字段,供程序调试用,即内部调试版本号,不是显示在appstore上面的

    version 对应info.plist文件里的“Bundle versions string, short”字段,这才是真正的版本号,显示在appstore上的。由于之前学习的时候,上网查资料,有好多人老是把这两个给弄混了,我也纠结了一会,特此说明一下,以备记忆。

    //获取appstore最新的版本号
    NSString *newVersion = [rightDic objectForKey:@"version"];
        
    //获取应用程序的地址        
     NSString *newURL = [rightDic objectForKey:@"trackViewUrl"];
             
    //取得本地程序的版本号    
    NSDictionary *localDic =[[NSBundle mainBundle] infoDictionary];
                 NSString *localVersion =[localDic objectForKey:@"CFBundleShortVersionString"];
                
                CCLog(@"appStore 版本号为:%@ 本地版本号为:%@",newVersion,localVersion);

    然后便是比较,这两个版本号是否一致来决定是否更新。

     

    如果我们需要实现版本的 app 自动更新,那么我们需要获取当前运行程序的版本信息和 appstore 里发布的最新版本信息。

    当前运行程序的版本信息,可以在 mainBundle 里面获取:

    NSDictionary *infoDict = [[NSBundle mainBundle] infoDictionary];

    NSString *currentVersion = [infoDict objectForKey:@"CFBundleVersion"];

    而 appstore 里发布的最新版本信息获取稍微复杂一些,有两种方案,思路都是一样的:

    其一:在某个服务器上存储最新发布的版本信息,需要的时候向该服务器查询;

    其二:在需要的时候向 appstore 查询;

    在这里介绍第二种方法:向 appstore 查询应用程序信息,包括作者,版本,app 介绍页面地址等信息。

    英文好的同学可以参考 apple 的文档:www.apple.com/itunes/affiliates/resources/documentation/itunes-store-web-service-search-api.html

    具体步骤如下:

    1,用 POST 方式发送请求:

    http://itunes.apple.com/search?term=你的应用程序名称&entity=software

    更加精准的做法是根据 app 的 id 来查找:

    http://itunes.apple.com/lookup?id=你的应用程序的ID

    如果是中国地区的程序,用这个:http://itunes.apple.com/cn/lookup?id=

    2,从获得的 response 数据中解析需要的数据。因为从 appstore 查询得到的信息是 JSON 格式的,所以需要经过解析。解析之后得到的原始数据就是如下这个样子的:

    {

    resultCount = 1;

    results = (

    {

    artistId = 301724683;

    artistName = Citibank;

    artistViewUrl = "http://itunes.apple.com/us/artist/citibank/id301724683?uo=4";

    artworkUrl100 = "http://a5.mzstatic.com/us/r1000/117/Purple/a1/85/a9/mzl.hvwnfdkw.png";

    artworkUrl512 = "http://a5.mzstatic.com/us/r1000/117/Purple/a1/85/a9/mzl.hvwnfdkw.png";

    artworkUrl60 = "http://a2.mzstatic.com/us/r1000/099/Purple/67/86/7e/mzi.utfdvrgy.png";

    averageUserRating = "3.5";

    averageUserRatingForCurrentVersion = 5;

    contentAdvisoryRating = "4+";

    currency = USD;

    description = "Description of you app.";

    features = (

    iosUniversal

    );

    fileSizeBytes = 4141195;

    genreIds = (

    6015

    );

    genres = (

    Finance

    );

    ipadScreenshotUrls = (

    "http://a1.mzstatic.com/us/r1000/095/Purple/e0/a6/17/mzl.pbbxcjzt.1024x1024-65.jpg",

    "http://a3.mzstatic.com/us/r1000/036/Purple/cc/14/98/mzl.dyairego.1024x1024-65.jpg"

    );

    isGameCenterEnabled = 0;

    kind = software;

    languageCodesISO2A = (

    EN

    );

    price = 0;

    primaryGenreId = 6015;

    primaryGenreName = Finance;

    releaseDate = "2011-01-24T06:14:35Z";

    releaseNotes = "* View Real-time streaming prices for U.S. Treasuries * Open and Save your Citi Research in your favorite PDF Reader and Library such as iBooks * Search for your favorite videos";

    screenshotUrls = (

    "http://a3.mzstatic.com/us/r1000/066/Purple/17/51/fb/mzl.zywiavgn.png",

    "http://a5.mzstatic.com/us/r1000/026/Purple/73/85/97/mzl.csmdtndk.png"

    );

    sellerName = "Citibank, N.A.";

    sellerUrl = "http://";

    supportedDevices = (

    all

    );

    trackCensoredName = "Citi Velocity";

    trackContentRating = "4+";

    trackId = 414697122;

    trackName = "Citi Velocity";

    trackViewUrl = "http://itunes.apple.com/us/app/citi-velocity/id414697122?mt=8&uo=4";

    userRatingCount = 5;

    userRatingCountForCurrentVersion = 1;

    version = "1.4";

    wrapperType = software;

    }

    );

    }

    然后从中取得 results 数组即可,具体代码如下所示:

    NSDictionary *jsonData = [dataPayload JSONValue];

    NSArray *infoArray = [jsonData objectForKey:@"results"];

    NSDictionary *releaseInfo = [infoArray objectAtIndex:0];

    NSString *latestVersion = [releaseInfo objectForKey:@"version"];

    NSString *trackViewUrl = [releaseInfo objectForKey:@"trackViewUrl"];

    如果你拷贝 trackViewUrl 的实际地址,然后在浏览器中打开,就会打开你的应用程序在 appstore 中的介绍页面。当然我们也可以在代码中调用 safari 来打开它。

    UIApplication *application = [UIApplication sharedApplication];

    [application openURL:[NSURL URLWithString:trackViewUrl]];

    这是评论的地址:

    在iPhone应用里直接打开app store 评论页面的方法:

    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"itms-apps://ax.itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?type=Purple+Software&id=abc"]];

    复制代码

    更换下id号就可以。

    如果想要打开下载页面,把url改为

    itms-apps://phobos.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=40461254

    更换下id号就可以。

  • 相关阅读:
    机器学习(01)——机器学习简介
    Harbor本地镜像库安装与使用
    大数据高可用集群环境安装与配置(10)——安装Kafka高可用集群
    大数据高可用集群环境安装与配置(09)——安装Spark高可用集群
    大数据高可用集群环境安装与配置(08)——安装Ganglia监控集群
    大数据高可用集群环境安装与配置(07)——安装HBase高可用集群
    大数据高可用集群环境安装与配置(06)——安装Hadoop高可用集群
    大数据高可用集群环境安装与配置(05)——安装zookeeper集群
    大数据高可用集群环境安装与配置(04)——安装JAVA运行环境
    大数据高可用集群环境安装与配置(03)——设置SSH免密登录
  • 原文地址:https://www.cnblogs.com/gongyuhonglou/p/10311617.html
Copyright © 2011-2022 走看看