檢測版本更新

如果我們要檢測app版本的更新,那么我們必須獲取當前運行app版本的版本信息和appstore 上發布的最新版本的信息。


當前運行版本信息可以通過info.plist文件中的bundle version中獲取:

?

[cpp]?view plaincopy
  1. NSDictionary?*infoDic?=?[[NSBundle?mainBundle]?infoDictionary];??
  2. ];??

?

這樣就獲取到當前運行的app的版本了


要獲取當前app store上的最新的版本,有兩種方法,

一、在某特定的服務器上,發布和存儲app最新的版本信息,需要的時候向該服務器請求查詢。


二、從app store上查詢,可以獲取到app的作者,連接,版本等。官方相關文檔

www.apple.com/itunes/affiliates/resources/documentation/itunes-store-web-service-search-api.htm


具體步驟如下:
1,用 POST 方式發送請求:
http://itunes.apple.com/search?term=你的應用程序名稱&entity=software

更加精準的做法是根據 app 的 id 來查找:
http://itunes.apple.com/lookup?id=你的應用程序的ID

#define APP_URL?http://itunes.apple.com/lookup?id=你的應用程序的ID

你的應用程序的ID 是 itunes connect里的 Apple ID

2,從獲得的 response 數據中解析需要的數據。因為從 appstore 查詢得到的信息是 JSON 格式的,所以需要經過解析。解析之后得到的原始數據就是如下這個樣子的:
{??
????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;?
??????}??
????);??
}??

然后從中取得 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]]; ?


代碼如下:

?

-(void)onCheckVersion

{

? ??NSDictionary?*infoDic = [[NSBundle?mainBundle]?infoDictionary];

? ??//CFShow((__bridge CFTypeRef)(infoDic));

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


? ??NSString?*URL =?@"http://itunes.apple.com/lookup?id=你的應用程序的ID";

? ??NSMutableURLRequest?*request = [[NSMutableURLRequest?alloc]?init];

? ? [request?setURL:[NSURL?URLWithString:URL]];

? ? [request?setHTTPMethod:@"POST"];

? ??NSHTTPURLResponse?*urlResponse =?nil;

? ??NSError?*error =?nil;

? ??NSData?*recervedData = [NSURLConnection?sendSynchronousRequest:request?returningResponse:&urlResponseerror:&error];

?? ?

? ??NSString?*results = [[NSString?alloc]?initWithBytes:[recervedData?bytes]?length:[recervedData?length]encoding:NSUTF8StringEncoding];

? ??NSDictionary?*dic = [results?JSONValue];

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

? ??if?([infoArray?count]) {

? ? ? ??NSDictionary?*releaseInfo = [infoArray?objectAtIndex:0];

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

?? ? ? ?

? ? ? ??if?(![lastVersion?isEqualToString:currentVersion]) {

? ? ? ? ? ??//trackViewURL = [releaseInfo objectForKey:@"trackVireUrl"];

? ? ? ? ? ??UIAlertView?*alert = [[UIAlertView?alloc]?initWithTitle:@"更新"?message:@"有新的版本更新,是否前往更新?"delegate:self?cancelButtonTitle:@"關閉"?otherButtonTitles:@"更新",?nil];

? ? ? ? ? ? alert.tag?=?10000;

? ? ? ? ? ? [alert?show];

? ? ? ? }

? ? ? ??else

? ? ? ? {

? ? ? ? ? ??UIAlertView?*alert = [[UIAlertView?alloc]?initWithTitle:@"更新"?message:@"此版本為最新版本"?delegate:selfcancelButtonTitle:@"確定"?otherButtonTitles:nil,?nil];

? ? ? ? ? ? alert.tag?=?10001;

? ? ? ? ? ? [alert?show];

? ? ? ? }

? ? }

}

- (void)alertView:(UIAlertView?*)alertView clickedButtonAtIndex:(NSInteger)buttonIndex

{

? ??if?(alertView.tag==10000) {

? ? ? ??if?(buttonIndex==1) {

? ? ? ? ? ??NSURL?*url = [NSURL?URLWithString:@"https://itunes.apple.com"];

? ? ? ? ? ? [[UIApplication?sharedApplication]openURL:url];

? ? ? ? }

? ? }

}

轉載于:https://www.cnblogs.com/wlcc/p/3907136.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/376749.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/376749.shtml
英文地址,請注明出處:http://en.pswp.cn/news/376749.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

linux 啟動/關閉多個py腳本

后臺運行腳本 需求:很多時候我們會在 linux 服務器上執行 python 腳本,然而腳本程序執行的時間可能比較長,當耗時過長的情況下,我們使用 ssh 遠程登錄到 linux 服務器上容易造成超時自動斷開連接,當用戶注銷時&#x…

在熟練使用2B鉛筆前,請不要打開Axure

在互聯網產品領域,Axure已成為產品經理、產品設計師以及交互設計師的必備工具,從某種程度講,Axure幫助我們建立低保真模型,便于與用戶的需求驗證,也幫助我們構思交互細節,使前端和開發人員更容易理解我們的…

啟用isqlplus

iSQL*Plus是sqlplus基于web方式發布的,要使用它只要在服務器上開啟即可: [oraclelocalhost ~]$ isqlplusctl start perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE (unset), LC_ALL (unset)…

YUI 的模塊信息配置優先級關系梳理

背景 YUI的配置參數較多, 可以在好幾個地方配置一個module的相關信息, 如: //在全局配置, 所以YUI實例共享 YUI_config {modules: {w-autcomplete: {requires: [module1],path: test1.js,}},groups: {modules: {w-autocomplete: …

echarts 怎么知道鼠標點擊的哪根柱子

有個需求,點擊柱子,然后得到該柱子的信息,然后展示這個機房的時序圖。 第一步卡住了,就是不知道如何獲取柱子的序號。后參考:https://blog.csdn.net/zt_fucker/article/details/72461572?utm_sourceblogxgwz1 得到思路…

Oracle經典sql語句總結@sql-plus重點函數串講與sql語句案例@中文排序詳講).doc

1.經典的select sql語句 //注意:包含空值的數學表達式求出的結果為空值 SQL> select salcomm from emp; //連接員工編號與員工姓名這兩個字段 SQL> select empno||ename as "員工編號和員工姓名" from emp; //查詢去掉重復行的員工部門編號 SQL>…

C++模板簡單分析與舉例

C模板簡單分析與舉例 #pragma once #include <iostream> /*/ C 模板 /*/ /* --- 函數模板 --- */ /// 聲明 template <typename T1, typename T2> void TFunc(T1, T2); /// 一般定義 template <typename T1, typename T2> void TFunc(T1, T2) { std::cout &l…

flash builder4.7 for Mac升級AIRSDK詳解

使用flash builder 打包ANE時或者打包ipa時候常常會遇到AIRSDK版本低的問題&#xff0c;然而flash builder4.7默認使用的AIRSDK是3.4而flash builder4.7 中 Flex SDK中默認的AIRSDK是3.1,大家可能有疑問怎么有二個AIRSDK。我的理解是Flex SDK中的AIRSDK是低版本&#xff0c;低版…

echarts formatter鼠標懸停顯示信息

由于echarts中柱狀圖&#xff0c;鼠標放上去默認顯示的是x軸名稱以及y軸值。 而我現在需要再添加一些顯示信息。 下面是操作&#xff1a; 在tooltip對象中補充trigger: “axis”,屬性&#xff0c;然后再設置formatter。 tooltip : {formatter: function (params) {// do some …

codeforces 261 D

題目鏈接&#xff1a; 解題報告&#xff1a;給出一個序列a1,a2,a3.........an&#xff0c;f(i , j ,x) ak 等于x的個數(i < k < j)&#xff0c;令i < j&#xff0c;求有多少對 i 和 j 使得 f(1,i,ai) > f(j,n,aj)。 從左往右掃一遍這個序列&#xff0c;num1[i] 等于…

javascript下漢字和Unicode編碼互轉代碼

近日在為網站做一資料功能&#xff0c;這些顯示在頁面上面的文字數據都是存放在js文件裏面的&#xff0c;由於這些js文件裏面的中文都是經過unicode編碼的&#xff0c;頁面上顯示是沒有問題的&#xff0c;問題是我做的網站是繁體中文&#xff0c;而js文件裏面的中文數據是簡體中…

python 線程異步執行踩坑

有個需求&#xff0c;一個線程在得到n個數據之后&#xff0c;異步地執行一個子線程函數&#xff0c;在子線程函數中完成數據庫的打開、寫入數據、關閉操作。在子線程函數返回前父線程先返回結果。 在此之前&#xff0c;先導入我們需要的模塊&#xff1a; from concurrent.futu…

關于window.history.back()后退問題

Windows下的window.history.back()后退后返回的不僅僅是前一個頁而是前一個頁的狀態。假設一個頁我改動了3次那必須后退3次才干回到前一個頁。并且數據庫中刪除的數據依舊顯示在上面感覺很的不有用。 解決的方法&#xff1a;history.back()后再加一個reload()這樣就能夠回到刷新…

每日英語:Smog Levels in Hong Kong Hit Highs

Hong Kong’s pollution levels hit nearly decade-level highs this week, sending locals scurrying inside and obscuring the city’s skyline behind a blanket of white. scurry&#xff1a;急跑&#xff0c;急趕    In the city’s central business district, road…

轉載 | pymysql.err.InterfaceError: (0, ‘‘)解決辦法

導致這個錯誤的原因是通過pymysql連接MySQL&#xff0c;沒有關閉連接的操作&#xff0c;所以短時間內不會出問題&#xff0c;長時間保持這個連接會出現連接混亂。雖然看著自己的代碼沒錯&#xff0c;還是會報 pymysql.err.InterfaceError: (0, ‘’)錯誤。所以這個連接要么連上…

不使用物理引擎,自己動手做真實物理的模擬投籃游戲

最近打算做一個2D投籃游戲&#xff0c;由于對于BOX2D等物理引擎并不熟悉&#xff0c;加之一開始低估了游戲所需要的碰撞檢測復雜度&#xff0c;認為僅僅涉及4面墻&#xff0c;籃球&#xff0c;籃板&#xff0c;籃筐&#xff0c;籃網的碰撞檢測并不復雜。因此決定自己實現所需要…

GoldenGate DDL雙向復制

繼續上一篇的實驗。 節點說明&#xff1a; dd1(源庫)--->>kf2(目標庫) dd1(目標庫)<<---kf2(源庫) 在配置反向復制過程中&#xff0c;可暫時把源庫和目標庫調換位置&#xff0c;配置基本上雷同。 但在官網上有說明要注意的一個地方&#xff1a; Do ei…

轉載|pymysql.err.InternalError: Packet sequence number wrong - got 45 expected 0

原文鏈接&#xff1a;https://www.cnblogs.com/heiao10duan/p/9373237.html 原因&#xff1a; 使用了多線程&#xff0c;多線程共享了同一個數據庫連接&#xff0c;但每個execute前沒有加上互斥鎖 方法&#xff1a; 方法一&#xff1a;每個execute前加上互斥鎖 lock.acquire…

JSF入門

1. 簡介 JSF技術是Sun公司在2004年發布的用于開發Web應用的框架。當前版本是2.2&#xff0c;由JSR344規范定義。它是Java EE 7推薦的Web標準框架。Mojarra(https://javaserverfaces.java.net/)是Oracle官方采用的JSF的參考實現&#xff0c;其他的參考實現還有Apache基金的MyFac…

nyist 488 素數環

有一個整數n&#xff0c;把從1到n的數字無重復的排列成環&#xff0c;且使每相鄰兩個數&#xff08;包括首尾&#xff09;的和都為素數&#xff0c;稱為素數環。 為了簡便起見&#xff0c;我們規定每個素數環都從1開始。例如&#xff0c;下圖就是6的一個素數環。 這題在進行判斷…