iOS開發之獲取App Store的上架信息(包括版本號)並實現檢查更新


由於iOS app不允許檢查更新,凡是app在上架審核時出現“檢查更新”字樣的都有可能被打回,而檢查更新功能是產品經理最念念不忘的重要功能(內心一萬個草泥馬。。。),作為攻城獅的我們自然要想方設法實現這一功能。

既然ios在審核時不允許檢查更新,那我們何不抓住審核漏洞,也即在審核時不出現檢查更新而在實際使用時出現呢。答案就是獲取當前app在App Store上的版本信息,並將此版本號與提交審核的app作對比,由於App Store上的版本號必然低於每次提交審核(新版本)的版本號,那么app在審核過程中不可能出現“檢查更新”字樣,此時用戶在使用比App Store上的版本低的app時則相應會提示有新版本更新,並讓用戶選擇跳轉App Store進行更新。那么廢話不多說,上代碼:

 (void)requestLookup {
    [YTHttpTool POST:YTSystemToolAppStoreLookupURL params:@{@"id": kAppStoreId} success:^(NSURLSessionDataTask *task, id responseObject) {
        NSArray *resultArr = responseObject[@"results"];
        NSDictionary *resultDic = resultArr.firstObject;
        NSString *appCurrentVersion = [YTSystemTool getAppVersion];
        NSString *appStoreVersion = resultDic[@"version"];
        if ([appCurrentVersion compare:appStoreVersion options:NSNumericSearch] == NSOrderedAscending) {
            UINavigationController *rootNC = (UINavigationController *)self.window.rootViewController;
            UIViewController *rootVC = rootNC.viewControllers.firstObject;
            [YTAlertTool alertTwoActionWithVC:rootVC title:[NSString stringWithFormat:@"您有新版本更新(%@)", appStoreVersion] message:@"" cancelTitle:@"我再看看" cancelHandler:nil defaultTitle:@"現在更新" defaultHandler:^(UIAlertAction * _Nonnull action) {
                [YTSystemTool jumpToAppStoreApp];
            } completion:nil];
        }
    } fail:nil];
}

該段代碼是寫在APPDelegate.m文件中用於檢查更新的私有方法,YTHttpTool類是我封裝的網絡請求類,YTAlertTool是我封裝的提示框類,YTSystemTool是我封裝的各種系統工具類,此處使用的跳轉App Store的工具方法,但是重點在於YTSystemToolAppStoreLookupURL和kAppStoreId這兩個常量。YTSystemToolAppStoreLookupURL是請求查詢app在App Store的上架信息,固定為@"https://itunes.apple.com/lookup",官方文檔說明。需要注意的是舊版本的請求網址是@"http://itunes.apple.com/lookup",自從蘋果在iOS 10后使用了https協議,網址便改成了https,以前那些類似的博客均為http;kAppStoreId為app上架App Store時分配每個app的id,例如我的上架app是@"1197227551",獲取方法見下圖:

這里寫圖片描述
觸摸板右鍵選擇“拷貝鏈接”得到當前app在App Store上的完整網址,如我的是:https://itunes.apple.com/us/app/眾駕租車/id1197227551?mt=8,截取其中的id即可。至此,調用查詢請求的完整URL(POST請求)為https://itunes.apple.com/lookup?id=1197227551,請求url后台打印結果如下:

url:https://itunes.apple.com/lookup params:{
id = 1197227551;
} response:{
resultCount = 1;
results = (
{
advisories = (
);
appletvScreenshotUrls = (
);
artistId = 1197227550;
artistName = "\U6b66\U6c49\U55bb\U5929\U79d1\U6280\U6709\U9650\U516c\U53f8";
artistViewUrl = "https://itunes.apple.com/us/developer/武漢喻天科技有限公司/id1197227550?uo=4";
artworkUrl100 = "http://is1.mzstatic.com/image/thumb/Purple111/v4/d8/93/9f/d8939fc1-c834-b461-aafb-d87de4b549b6/source/100x100bb.jpg";
artworkUrl512 = "http://is1.mzstatic.com/image/thumb/Purple111/v4/d8/93/9f/d8939fc1-c834-b461-aafb-d87de4b549b6/source/512x512bb.jpg";
artworkUrl60 = "http://is1.mzstatic.com/image/thumb/Purple111/v4/d8/93/9f/d8939fc1-c834-b461-aafb-d87de4b549b6/source/60x60bb.jpg";
bundleId = "com.YTTimeRent.027hb";
contentAdvisoryRating = "4+";
currency = USD;
currentVersionReleaseDate = "2017-03-03T02:55:24Z";
description = "\U4f17\U9a7e\U79df\U8f66\U4e13\U6ce8\U4e8e\U65b0\U80fd\U6e90\U6c7d\U8f66\U7684\U5206\U65f6\U79df\U8d41\Uff0c\U81f4\U529b\U4e8e\U901a\U8fc7\U7535\U52a8\U6c7d\U8f66\U5171\U4eab\U6765\U89e3\U51b3\U57ce\U5e02\U51fa\U884c\U96be\U9898\Uff0c\U4ee5\U79fb\U52a8\U4e92\U8054\U7f51\U4e3a\U57fa\U7840\Uff0c\U7ed3\U5408\U5404\U9879\U804c\U80fd\U6280\U672f\Uff0c\U6765\U5b9e\U73b0\U7528\U6237\U5feb\U901f\U627e\U8f66\Uff0cAPP\U5f00\U95e8\U5173\U95e8\Uff0c\U8fd8\U8f66\U7684\U5168\U7a0b\U81ea\U52a8\U5316\U3002\U6309\U7167\U65f6\U95f4\U7684\U8ba1\U8d39\U65b9\U5f0f\Uff0c\U4e3a\U7528\U6237\U63d0\U4f9b\U7eff\U8272\U3001\U7ecf\U6d4e\U3001\U4fbf\U6377\U7684\U51fa\U884c\U89e3\U51b3\U65b9\U6848\U3002";
features = (
);
fileSizeBytes = 46412800;
formattedPrice = Free;
genreIds = (
6003
);
genres = (
Travel
);
ipadScreenshotUrls = (
);
isGameCenterEnabled = 0;
isVppDeviceBasedLicensingEnabled = 1;
kind = software;
languageCodesISO2A = (
ZH
);
minimumOsVersion = "8.0";
price = 0;
primaryGenreId = 6003;
primaryGenreName = Travel;
releaseDate = "2017-02-03T17:20:52Z";
releaseNotes = "(\U4fee\U6539)\U4fee\U6539\U7528\U6237\U534f\U8bae\U5185\U5bb9\n(\U4f18\U5316)\U4f18\U5316\U8d26\U5355\U754c\U9762\U4ee3\U7801\n(\U4fee\U590d)\U4fee\U590d\U4f18\U60e0\U5238\U4e0d\U53ef\U7528\U95ee\U9898\n(\U4f18\U5316)\U4f18\U5316\U641c\U7d22\U6846\n(\U589e\U52a0)\U5730\U56fe\U754c\U9762\U8fdb\U5165\U540e\U53f0\U65b0\U589e\U524d\U53f0\U81ea\U52a8\U5237\U65b0\U529f\U80fd";
screenshotUrls = (
"http://a2.mzstatic.com/us/r30/Purple122/v4/87/32/4f/87324f3a-d512-9c42-db11-3535b42d71c2/screen696x696.jpeg",
"http://a4.mzstatic.com/us/r30/Purple111/v4/9d/6e/93/9d6e93a5-651d-b6dc-078f-29f4f1d3e307/screen696x696.jpeg",
"http://a3.mzstatic.com/us/r30/Purple122/v4/2e/da/6c/2eda6c1e-c87e-f907-a414-1a7e31ec969e/screen696x696.jpeg",
"http://a2.mzstatic.com/us/r30/Purple122/v4/12/0e/af/120eaf86-a637-b9d8-5299-46087bbeabe2/screen696x696.jpeg"
);
sellerName = "YOU-TURN TECHNOLOGY CO.,LTD";
sellerUrl = "http://www.027hb.cn/";
supportedDevices = (
"iPad2Wifi-iPad2Wifi",
"iPad23G-iPad23G",
"iPhone4S-iPhone4S",
"iPadThirdGen-iPadThirdGen",
"iPadThirdGen4G-iPadThirdGen4G",
"iPhone5-iPhone5",
"iPodTouchFifthGen-iPodTouchFifthGen",
"iPadFourthGen-iPadFourthGen",
"iPadFourthGen4G-iPadFourthGen4G",
"iPadMini-iPadMini",
"iPadMini4G-iPadMini4G",
"iPhone5c-iPhone5c",
"iPhone5s-iPhone5s",
"iPadAir-iPadAir",
"iPadAirCellular-iPadAirCellular",
"iPadMiniRetina-iPadMiniRetina",
"iPadMiniRetinaCellular-iPadMiniRetinaCellular",
"iPhone6-iPhone6",
"iPhone6Plus-iPhone6Plus",
"iPadAir2-iPadAir2",
"iPadAir2Cellular-iPadAir2Cellular",
"iPadMini3-iPadMini3",
"iPadMini3Cellular-iPadMini3Cellular",
"iPodTouchSixthGen-iPodTouchSixthGen",
"iPhone6s-iPhone6s",
"iPhone6sPlus-iPhone6sPlus",
"iPadMini4-iPadMini4",
"iPadMini4Cellular-iPadMini4Cellular",
"iPadPro-iPadPro",
"iPadProCellular-iPadProCellular",
"iPadPro97-iPadPro97",
"iPadPro97Cellular-iPadPro97Cellular",
"iPhoneSE-iPhoneSE",
"iPhone7-iPhone7",
"iPhone7Plus-iPhone7Plus"
);
trackCensoredName = "\U4f17\U9a7e\U79df\U8f66";
trackContentRating = "4+";
trackId = 1197227551;
trackName = "\U4f17\U9a7e\U79df\U8f66";
trackViewUrl = "https://itunes.apple.com/us/app/眾駕租車/id1197227551?mt=8&uo=4";
version = "1.0.9";
wrapperType = software;
}
);
}

截取其中字段”version“即獲取當前在App Store的版本號。

下面介紹獲取當前app提交審核的版本號,在YTSystemTool.m文件中的代碼如下:

+ (NSString *)getAppVersion {
    NSDictionary *infoDic = [[NSBundle mainBundle]infoDictionary];
    NSString *appCurVersion = [infoDic objectForKey:kAppCurrentVersion];
    return appCurVersion;
}

其中kAppCurrentVersion表示info.plist文件中版本號的字段名,為固定常量@"CFBundleShortVersionString"

獲取后將兩個版本號進行比較,比較過程調用了系統NSString的API:- (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask,該方法可以比較任意版本號的大小,方法返回比較結果枚舉NSComparisonResult。

比較完成后彈出版本更新提示框,如下圖:
這里寫圖片描述
接下來介紹更新跳轉的代碼實現:同樣是在YTSystemTool.m文件中,代碼如下:

+ (void)jumpToAppStoreApp {
    NSString *appStoreURLStr = kAppStoreURLString;
    NSURL *appStoreURL = [NSURL URLWithString:appStoreURLStr];
    if ([[UIApplication sharedApplication]canOpenURL:appStoreURL]) {
        if ([UIDevice currentDevice].systemVersion.doubleValue >= 10.0) {
            [[UIApplication sharedApplication] openURL:appStoreURL options:@{UIApplicationOpenURLOptionsAnnotationKey: @"YES"} completionHandler:nil];
        } else {
            [[UIApplication sharedApplication] openURL:appStoreURL];
        }
    }
}

其中kAppStoreURLString表示App Store應用間通信的URL字符串常量,這里為@"itms-apps://itunes.apple.com/us/app/zhong-jia-zu-che/id1197227551?mt=8",打開iTunes應用,搜索當前app獲取方法如下圖:
這里寫圖片描述
點擊上圖中的尖尖號,並在彈出的視圖中選擇Copy Link,如圖:
這里寫圖片描述
我獲取到的URL為 https://itunes.apple.com/us/app/眾駕租車/id1197227551?mt=8,此時將“https”替換為“itms-apps”即可實現跳轉。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM