检测版本更新

如果我们要检测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 allocinit];

    [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.mzph.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的一个素数环。 这题在进行判断…