精华内容
下载资源
问答
  • App版本更新

    2016-11-03 11:43:42
    Android中App版本升级更新下载的封装工具类,简单实用。几行代码轻松搞定升级安装!
  • app版本更新

    2017-05-09 16:46:23
    Android实现App版本自动更新 本文为转载文章(留着备用),尊重原创:原创地址:http://blog.csdn.NET/u013718120/article/details/53018801 现在很多的App中都会有一个检查版本的功能。例如斗鱼TV App的设置...

    Android实现App版本自动更新

    本文为转载文章(留着备用),尊重原创:

    原创地址:

    http://blog.csdn.NET/u013718120/article/details/53018801

    现在很多的App中都会有一个检查版本的功能。例如斗鱼TV App的设置界面下:

                     

    当我们点击检查更新的时候,就会向服务器发起版本检测的请求。一般的处理方式是:服务器返回的App版本与当前手机安装的版本号进行对比。

    (1)如果服务器所返回的版本号大于当前App版本号那么此时手机所安装的App不是最新版。可以提示用户升级。

    (2)如果不大于当前版本号,可以提示用户为最新版本:

                   

    版本升级,也分为两种处理方式:

    (1)跳转到App某市场(例如:360手机助手),然后根据包名在市场定位到该App,通过市场下载更新安装。

    (2)在本App中实现Apk下载,下载完成后更新安装。

    本篇博客的内容将围绕如何实现Apk下载,下载完成后更新安装来展开。

    下面我将内容大致分为以下几个部分:

    (1)App版本检测

    (2)Apk下载

    (3)Apk更新安装

    (4)对以上功能进行封装

    基于以上4部分,我们逐一展开。

    1.App版本检测:

    要实现App的更新下载,我们上面介绍了,前提是服务器要保存一个App的版本号(通常的方式是保存versionCode,当然你要对比versionName也没关系)。当用户去手动检测版本,或者进入首页自动检测时,第一步是需要请求服务器的版本号,拿到版本号之后与当前App版本号(当前版本号可通过PackageInfo获取)进行对比。服务器返回的版本号大于当前App版本号,证明App已经有更新,那么进入第2步。

    2.Apk下载

    Apk文件是保存在服务器的。我们可以通过Http流将其下载到本地手机,然后更新安装。Android中下载的方式很多种:HttpUrlConnection,Retrofit,okHttp,以及Android原生的下载工具类DownLoadManager 等等。我们采用的方式是Google推荐的下载工具类DownLoadManager。关于DownLoadManager的使用其实很简单,简单概括如下:

    (1)通过getSystemService获取DownLoadManager。

    (2)初始化DownLoadManager的Request,构建下载请求。

    (3)调用DownLoadManager的enqueue异步发起请求,该方法返回值为标识当前下载任务的id,即downloadId。

    (4)当下载完成后,系统会发出条件为android.intent.action.DOWNLOAD_COMPLETE的广播,我们可以自定义广播接受器,然后在onReceive中处理下载完成的逻辑即可。

    详细使用方式大家可以参考网上的教程,此处就不再赘述。

    上面通过下载啰嗦了一堆。此时我们要想一个问题:当我们下载完成后,并没有安装。当用户再次进入App时该如何操作?

    有朋友会说,那就再去下载一次,然后继续执行更新安装呀!哈哈,这种方式是没有错误的,但是如果用户恶意行为,每次下载完成都不安装,那我们岂不是每次都要去下载100次,1000次。。(然后手机boom!!!)这种方式肯定是不能采用的。那么我们该如何解决呢?

    很简单,当我们在下载之前,先去指定的文件夹下查看有木有已经下载好的Apk,并且该Apk的版本是高于本App的版本,此时我们就去执行安装操作。如果上面条件不成立,此时再去执行下载操作。

    3.Apk更新安装

    相信大家对于如何安装一个Apk都比较熟悉吧,原理也是比较简单的。

    (1)通过downloadId获取下载的Uri。

    (2)将Uri设置到Itent的setDataAndType作为启动条件。

    (3)调用startActivity启动对应Intent即可。

    以上3步,即可完成App的更新功能。

    整体的流程很清晰:

    版本检测 → Apk下载 (检查是否存在未安装的Apk) → Apk安装 → 完成更新

    下面,通过代码来具体分析整个流程:

    关于App版本检测其实就是一个Http请求,不再多说。我们从Apk下载开始:

    上面我们提到,在下载之前需要去检测是否存在已经下载的Apk。通过什么获取呢?没错,肯定是downloadId了。

    1> 如果存在downloadId,那么我们通过downloadId获取当前下载的状态status。status分为成功,失败两种状态。

    (1)当status为成功状态时,即已经下载完成,我们就通过downloadId获取下载文件的Uri。然后可以通过Uri获取PackageInfo,与当前App进行包名和版本号的对比,当包名相同,并且当前版本号是小于下载的Apk版本号两个条件同时成立时,直接执行安装操作。否则,执行remove,通过downloadId删除下载任务以及文件,继续执行下载。

    (2)当status为失败状态时,即下载未完成,我们就直接执行重新下载即可。

    2> 如果不存在downloadId,即没有下载过Apk,执行下载即可。

    核心代码如下:

    下载完成后,系统会发出广播,在广播中,我们对比downloadId是否相同,相同情况下,直接通过downloadId获取Uri,然后跳转到安装界面,提示用户安装即可:


    所以,别忘了在下载之前要先将该大喇叭(广播接受器)注册。

    最后,当我们安装完成后,再次进入App,就将其已下载的Apk文件进行删除(将该方法放在onCreate生命周期中即可):


    上面通过downloadApk获取下载文件的地址。downloadApk地址是在下载完成后广播接收器中保存的。

    通过上面的步骤,我们就完成了App更新下载安装的全部工作。相信大家也有了更深的认识和理解。

    本篇博客的内容就到此为止了,有问题的朋友可以留言给我。

    源码下载


    展开全文
  • APP版本更新

    2015-03-10 14:23:04
    如果我们要检测app版本更新,那么我们必须获取当前运行app版本的版本信息和appstore 上发布的最新版本的信息。 当前运行版本信息可以通过info.plist文件中的bundle version中获取: [cpp] ...

    如果我们要检测app版本的更新,那么我们必须获取当前运行app版本的版本信息和appstore 上发布的最新版本的信息。


    当前运行版本信息可以通过info.plist文件中的bundle version中获取:

    1. NSDictionary *infoDic = [[NSBundle mainBundle] infoDictionary];  
    2.     CFShow(infoDic);  
    3.       
    4.     NSString *appVersion = [infoDic objectForKey:@"CFBundleVersion"];  

    这样就获取到当前运行的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 mainBundleinfoDictionary];

        //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:&urlResponse error:&error];

        

        NSString *results = [[NSString allocinitWithBytes:[recervedData byteslength:[recervedData lengthencoding: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 allocinitWithTitle:@"更新" message:@"有新的版本更新,是否前往更新?" delegate:self cancelButtonTitle:@"关闭" otherButtonTitles:@"更新"nil];

                alert.tag = 10000;

                [alert show];

            }

            else

            {

                UIAlertView *alert = [[UIAlertView allocinitWithTitle:@"更新" message:@"此版本为最新版本"delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nilnil];

                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];

            }

        }

    }

    展开全文
  • uni-app版本更新

    2020-11-25 16:20:49
    uni-app版本更新js文件;省去自己写布局及进度条。通过这个js直接生成更新弹窗,且可配置是否强制更新,也可看到更新的进度
  • APP版本更新
  • Android APP版本更新源码

    千次下载 热门讨论 2015-06-04 07:57:10
    Android APP版本更新源码,利用进度条实时显示下载进度。
  • uniapp实现app版本更新

    千次阅读 2020-07-31 14:56:49
    app版本更新实现

    app 版本更新弹框提示

    <!-- uview 模态框 -->
    <u-modal v-model="show" :content="content" title="升级提示" @confirm="confirm"></u-modal>
    

    js 实现过程

    <script>
    	//此文件在下边
    	import { isEmpty } from "../../common/util";
    	export default {
    		data() {
    			return {
    				show: false,
    				content: '',
    				downloadUrl: ''
    			}
    		},
    		onLoad() {
    			this.checkAppVersion()
    		},
    		methods: {
    			async checkAppVersion() {
    				//检测更新
    				//#ifdef APP-PLUS
    				this.show = false
    				this.downloadUrl = ''
    				let params = {
    					appId: plus.runtime.appid,
    					version: plus.runtime.version
    				}
    				//版本更新接口
    				await this.$api.api.home.getAppUpdate(params).then(res => {
    					if (!isEmpty(res.body)) {
    						//有更新时将下载链接存入缓存并隐藏tabbar
    						uni.hideTabBar()
    						this.show = true;
    						this.content = res.body.note
    						this.downloadUrl = res.body.downloadUrl
    					}
    				})
    				//#endif
    			},
    			confirm() {
    				if (!isEmpty(this.downloadUrl)) {
    					plus.runtime.openURL(this.downloadUrl)
    				}
    				uni.showTabBar()
    				this.show = false;
    			},
    		}
    	}
    </script>
    

    util 文件封装内容

    export const isEmpty = function(val) {
    	// null or undefined
    	if (val == null) return true;
    	if (typeof val === 'boolean') return false;
    	if (typeof val === 'number') return !val;
    	if (val instanceof Error) return val.message === '';
    	switch (Object.prototype.toString.call(val)) {
    		// String or Array
    		case '[object String]':
    		case '[object Array]':
    		return !val.length;
    		// Map or Set or File
    		case '[object File]':
    		case '[object Map]':
    		case '[object Set]': {
    			return !val.size;
    		}
    		// Plain Object
    		case '[object Object]': {
    			return !Object.keys(val).length;
    		}
    	}
    	return false;
    };
    
    展开全文
  • Anroid app版本更新

    千次阅读 2018-06-03 10:40:17
    1.前言 Android app更新是app必须拥有的功能,上线之后,可以强制用户更新也可以提示用户有新版,之所以写这篇文章,是为了介绍app版本更新的思路,内容还是比较简单的。 有人可能会说,现在比较了流行Hotfix也...
    1.前言

       Android app更新是app必须拥有的功能,上线之后,可以强制用户更新也可以提示用户有新版,之所以写这篇文章,是为了介绍app版本更新的思路,内容还是比较简单的。

      有人可能会说,现在比较了流行Hotfix也就是热更新技术,无论是阿里的Sophix、还是微信的Tinker,热更新主要通过推送补丁的方式,为已经上线的app推送补丁,用户不需要重新安装,可以自动拉取补丁,解决线上的一些bug,但是目前热修复技术都不支持新增四大组件,我们只能在应用内微调,基本无法满足版本的更新,如果哪一天热修复技术支持新增四大组件了,那估计web app的优势又少了一个。

    2. app 版本更新思路

       app版本检测更新,可以让用户点击版本更新检测,也可以启动app时自动检测更新,视应用需求而定。

       启动app时,获取当前app版本名称和版本号,与数据库中的版本名称对比,如果数据库中的版本号大于当前应用的版本号,则说明当前版本待更新,也就是说,当我们发布一个新的版本之后,需要在数据库中录入最新版本的版本号以及下载地址。

    3.数据库设计

      建立一张数据库版本信息表(顺便吐槽一下,自从正式进入公司做了Android开发,几乎接触不到后台的东西,所以建议之前前后台独立开发的小伙伴继续坚持下去,否则路会越走越窄)


    version是版本号,url是最新app下载地址,content是更新内容

    4.获取当前应用版本号

     

     请求服务端数据,判断当前是否为最新版本,这里给出简易服务端代码,网络请求框架大家选个自己喜欢的。


    获取最新的一条版本记录,客户端接收与当前版本对比,如果不一致则通过最新url下载最新的(最好有个对话框弹出提示)相信这部分代码对大家而言都很简单了,现在才发现自己的这部分代码当初是用的volley网络请求和kotlin语言实现的,就只贴图了:



    5.下载最新apk并自动安装

    showUpdateDialog()方法是显示一个对话框提示用户有新版本更新,用户点击确定后,下载apk然后自动安装,这里具体说下载和自动安装:

    这里下载使用的是xutils下载


    然后最主要的自动安装apk文件


       

    至此版本更新就完成了,这部分代码使用的是kotlin,对于习惯java开发的可能不是特别友好,这里主要提供一种思路,如有不足之处,请多多指教。


    展开全文
  • App版本更新功能源码

    2016-12-09 11:24:28
    使用retrofit+rxjava,以及自定义Dialog实现app版本更新的功能,从服务器上下载apk后,自定打开安装。
  • APP版本更新后打开app

    2017-06-26 10:29:15
    一般情况下我们APP版本更新完后,会自动将新下载的安装包替换旧的安装包,安装完毕后就将app关闭了,但是这样子想使用app的话,还要重新手动点开,用户体验上会比较差 ,那我们能不能在版本更新完后,给个提示,...
  • APP版本更新功能

    2018-09-07 13:46:00
    基于Hbuilder、mui 新增APP版本更新功能 参考地址:HBuilder打包成apk之后,如何让版本检测自动更新 //检查版本并更新 function checkversion(){ mui.ajax(mui.check.url, {//需要从接口中获取最新版本信息,...
  • ionic2 app版本更新

    千次阅读 2017-04-18 14:58:26
    ionic2 app版本更新
  • iOS app版本更新升级图文教程文档,2018ios升级教程,跟初次上架有些差别,可以参考参考。
  • 检测app版本更新根据AppStore
  • iOS app版本更新和版本号的比较

    千次阅读 2017-07-12 14:46:57
    iOS app版本更新和版本号的比较
  • 后台如何实现对App版本更新的管理?本文中梳理了两种App版本更新的实现策略,分别以历史版本和最新版本为更新依据进行展开介绍,供大家参考讨论。 App升级更新方式包括:强制更新、非强制提示更新、非强制不提示...
  • app版本更新问题

    2015-10-28 16:21:53
    今天遇到一个app版本更新时的问题,当我下载新版本的apk,安装的时候,会提示安装了签名不一致的同名安装包,大致原因,就是签名不同。但是我们是用的同一个签名,后来发现,原因是挂在在服务器上的apk的名字,和...
  • iOSApp版本更新Demo

    2016-12-18 17:44:32
    关于APP版本更新的Demo
  • App 版本更新 versionUpdate

    千次阅读 2015-08-03 13:13:05
    App 版本更新步骤: 1、checkUpdate()//检测版本是否需要更新 2、downLoadAPK()//下载新版本的APP 3、installAPK()//安装新版本 APP分析: ......
  • 搞定APP版本更新控制

    2017-05-08 17:09:54
    app版本更新是不能自己来检测的,否则上线的话会被拒;那如果还想自己控制版本更新的提醒怎么办呢,我用到了两种方法来解决这个问题:一种是完全由前端自己控制,首先获取到当前工程项目的版本号currentVersion,...
  • PHP检测APP版本更新

    2018-04-25 11:02:15
    整理的一个PHP检测APP版本是否有更新的方法,下载后请按自己需求修改
  • APP版本更新通知流程图

    千次阅读 2018-01-30 17:58:00
    一、APP版本更新通知流程图如下: 二、测试注意点:  1、Android更新直接下载APK,IOS引导至APP Store更新页面;  强制更新------只有“立即更新”  1、一般“强制更新”的机制不常用,除非涉及到APP的紧急...
  • app 版本更新审核 一直 正在审核 也不报错 已经6天了,怎么办要等下去吗? 可经理一直催啊,
  • Android App 版本更新完美适配7.0、8.0 兼容Android7.0 兼容Android8.0
  • app版本更新的四种实现方式

    万次阅读 2015-11-06 10:04:07
    1.app负责单版本检测测与更新(自己实现版本更新); 2.通过苹果商店的自动更新机制进行自动更新(相当与自己不更新,靠苹果商店自己的自动更新机制更新,这个是苹果提倡的升级机制,但是app几乎都不采用); 3.通过第三...
  • 1.首先 ,app版本更新分为强制更新和不强制可选择更新。 2.当前版本若是强制更新的版本,直接提示前端,用户无法进行下一步操作,只能更新app。 一、Filter的代码 /** * @Author: Lynne * @Describleption: ...
  • iOS app版本更新CheckVersion_Swift 前言 CheckVersion_Swift是一款轻量级的Swift版本的框架,框架功能:根据Apple提供的API去请求JSON,根据JSON中的版本号决定是否去更新原生App。更新提示的内容可以自定义,也...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,701
精华内容 4,280
关键字:

app版本更新