App Store 自动更新 itunes

之前项目需要用到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自动更新的功能,现将实现方案分享出来。

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);



以下便是比较,这两个版本号是否一致来决定是否更新,简单,故略之。