之前項目需要用到app自動更新的功能,現(xiàn)將實現(xiàn)方案分享出來。
iOS程序自動提示更新的實現(xiàn)方案大致分為兩種:
- 自己服務器提供一個接口狮暑,告知相關app的當前版本甲葬,是否需要更新廊勃,以及更新的地址等信息 。
- 就是利用蘋果的appstore 提供的相關api進行查詢更新经窖。
由于此前沒有找到iOS程序更新的方法坡垫,就用了第一種方式,但后來發(fā)現(xiàn)了一些問題钠至,自己提供服務器葛虐,需要維護,程序提交更新后棉钧,由于蘋果需要審核屿脐,中間會有時間差,這個時間不好把握宪卿。后臺就找蘋果的相關文檔的诵,終于找到了。
http://www.apple.com/itunes/affiliates/resources/documentation/itunes-store-web-service-search-api.html
實現(xiàn)機制:
#define APP_URL @"http://itunes.apple.com/lookup?id=你程序的appId"
ASIFormDataRequest *formRequst = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:APP_URL]];
請求網(wǎng)絡數(shù)據(jù),返回的大致數(shù)據(jù)如下佑钾,其他還有好多數(shù)據(jù)西疤,我們把關鍵的給截取出來
{
resultCount = 1;
results = (
{
artistId = 開發(fā)者 ID;
artistName = 開發(fā)者名稱;
price = 0;
isGameCenterEnabled = 0;
kind = software;
languageCodesISO2A = (
EN
);
trackCensoredName = 審查名稱;
trackContentRating = 評級;
trackId = 應用程序 ID;
trackName = 應用程序名稱";
trackViewUrl = 應用程序介紹網(wǎng)址;
userRatingCount = 用戶評級;
userRatingCountForCurrentVersion = 1;
version = 版本號;
wrapperType = software;
}
);
}
取得這些數(shù)據(jù)后關鍵的信息就是“ version”最新版本號和“ trackViewUrl”程序地址。然后與本地程序的版本比較即可休溶。
上面的build 對應info.plist文件里的“Bundle version”字段代赁,供程序調(diào)試用,即內(nèi)部調(diào)試版本號兽掰,不是顯示在appstore上面的
version 對應info.plist文件里的“Bundle versions string, short”字段芭碍,這才是真正的版本號,顯示在appstore上的孽尽。由于之前學習的時候窖壕,上網(wǎng)查資料,有好多人老是把這兩個給弄混了,我也糾結(jié)了一會瞻讽,特此說明一下鸳吸,以備記憶。
//獲取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);