環(huán)境
由于公司的項(xiàng)目屬于不好上架到App Store的項(xiàng)目,所以之前一直用企業(yè)簽名的形式分發(fā)應(yīng)用,但由于種種原因,現(xiàn)需要上線到App Store。
問題
用戶已經(jīng)習(xí)慣了在官網(wǎng)下載APP,并且用戶量特別大,萬級別的,每一個動作都必須小心謹(jǐn)慎,要上線到App Store的話就有兩個來源了。此時最難處理的一個點(diǎn)是版本更新!有時候強(qiáng)制更新有時候不強(qiáng)制,初始化的時候調(diào)用版本更新相關(guān)接口。
方案
1.直接源碼上線,不做代碼修改。當(dāng)有新版本的時候用戶點(diǎn)擊更新一致跳轉(zhuǎn)到官網(wǎng)下載頁,在下載頁分離出一個App Store入口,用戶也可以選擇跟以前一樣直接下載企業(yè)簽名版本。
問題:
a.兩個版本不會兼容,如果此前下載的是企業(yè)版本,想要更新App Store版本*應(yīng)該*是必須先卸載的,反之一樣;
b.企業(yè)版上線了,可能App Store還沒審核通過,帶來諸多需要解決的問題比如什么時候提示用戶版本更新。
2.修改bundle ID分離APP,就變成了兩個APP,用戶通過不同渠道可以同時安裝兩個APP,App Store版本的不再調(diào)用后臺版本更新接口,直接從App Store獲取新版本。
問題:
a.有些使用bundle ID注冊的第三方(目前就分享)將不可正常使用,唯一的解決辦法就是從那些三方網(wǎng)站申請一個全新的id對應(yīng)。如此賬號就會越來越多,分離工作也越來越復(fù)雜,不太推薦。
b.其實(shí)還是需要調(diào)用后臺特定更新接口,因?yàn)椴恢朗欠裥枰獜?qiáng)制更新。
3.修改APP名稱,通過APP名稱(也可以是別的標(biāo)識,具體可用哪些方案后面給思路)判斷是否企業(yè)版。此時bundle ID一樣還是同一個APP,分別對企業(yè)簽名版和App Store版本做不同的更新處理。
問題: 這就是我選擇的方案,問題大同小異,只是對用戶來說體驗(yàn)更好。
下面說具體做法
//獲取當(dāng)前版本號
let infoDictionary = Bundle.main.infoDictionary
let appShortVersion = infoDictionary!["CFBundleShortVersionString"] as! String
/*
這里注意下CFBundleShortVersionString與CFBundleVersion的區(qū)別,之前我們用CFBundleVersion作為版本升級的依據(jù),
現(xiàn)在發(fā)現(xiàn)通過App Store獲取的版本信息沒有這個數(shù)據(jù),所以改為用前者。
*/
獲取App Store版本的接口為http://itunes.apple.com/lookup?id=********,下面是返回扥數(shù)據(jù)結(jié)構(gòu)和部分?jǐn)?shù)據(jù)
//App Store版本更新model
struct AppStoreVersionModel: HandyJSON {
var results: [ResultsVersionModel] = [ResultsVersionModel]()
var resultCount: NSInteger = 0
}
struct ResultsVersionModel: HandyJSON {
var releaseNotes: String = ""http://版本更新內(nèi)容
var version: String = "" //版本號
var bundleId: String = ""
var releaseDate: String = "" //發(fā)布時間 年月日時分秒
var trackName: String = "" //應(yīng)用程序名稱
var screenshotUrls: [String] = [String]() //展示介紹圖
var sellerName: String = ""http://開發(fā)者或公司
}
我會先請求后臺的版本接口,不過只拿到其中的是否強(qiáng)制更新的數(shù)據(jù),先判斷是否需要更新-->需要更新-->判斷是否App Store版本-->是-->請求上面接口,順便把是否強(qiáng)制更新傳過去,其余的版本介紹等都直接拿App Store的數(shù)據(jù)-->點(diǎn)擊更新的時候直接open https://itunes.apple.com/app/id*******就自動跳到App Store下載頁了。反之就是跳官網(wǎng)愛怎么處理就怎么處理。
這樣做的結(jié)果就是當(dāng)有版本更新的時候,企業(yè)簽名版本的會直接安裝更新,App Store版本的還需要獲取App Store的版本信息,有新版本才會彈出更新提示。
***另外,我上線的是大陸外的App Store區(qū)域,所以http://itunes.apple.com/lookup?id=******** 或者 https://itunes.apple.com/app/id*******/com后面要不要加上/cn需要看自己的需求。
***判斷是否是企業(yè)版的思路:我們可以通過本地的包獲得APP的名字,自然可以獲得其它更多信息,在打包的時候也可以做很多處理,比如plist新增一些標(biāo)識字段等,其實(shí)是變相的改了代碼。