Maison interface Web uni-app Présentation de la mise en œuvre de la mise à niveau en ligne et de la mise à jour à chaud d'Uni-App

Présentation de la mise en œuvre de la mise à niveau en ligne et de la mise à jour à chaud d'Uni-App

Jan 05, 2021 am 09:43 AM
uni-app Mise à niveau en ligne 热更新

Tutoriel de développement UniappAnalyse des colonnes de l'activité de mise à niveau d'APP

Présentation de la mise en œuvre de la mise à niveau en ligne et de la mise à jour à chaud d'Uni-App

Recommandé (gratuit) : Tutoriel de développement Uniapp

Tout d'abord, analysez l'activité de la mise à niveau de l'application

1. Lors de la première ouverture de l'application, vous devez détecter l'interface d'arrière-plan de la demande dans l'App.vue globale

2. Comparez le numéro de version pour vérifier s'il est mis à niveau

3. Identifiez qu'il s'agisse d'une mise à jour à chaud ou d'une mise à niveau en ligne, et gère différents services. Le package de téléchargement de mise à jour à chaud utilise l'API officielle pour mettre à niveau (jugé en fonction du champ de retour réel de l'interface)

4. mise à niveau forcée ou mise à niveau non forcée. Une boîte contextuelle rappelle à l'utilisateur

5. Identifiez s'il s'agit d'une mise à niveau IOS ou Android. L'utilisateur clique pour passer à la mise à niveau

Deuxièmement, écrivez le code

1. Entrez APP.vue au lancement

2 Écrivez le code de mise à niveau selon l'analyse commerciale

//#ifdef APP-PLUS
			// APP检测更新 具体打包流程可以参考:https://ask.dcloud.net.cn/article/35667
			plus.screen.lockOrientation('portrait-primary'); //竖屏正方向锁定
            //获取是否热更新过
			const updated = uni.getStorageSync('updated'); // 尝试读取storage

			if (updated.completed === true) {
				// 如果上次刚更新过
				// 删除安装包及安装记录
				console.log('安装记录被删除,更新成功');
				uni.removeSavedFile({
					filePath: updated.packgePath,
					success: res => {
						uni.removeStorageSync('updated');
					}
				});
			} else if (updated.completed === false) {
				uni.removeStorageSync('updated');
				plus.runtime.install(updated.packgePath, {
					force: true
				});
				uni.setStorage({
					key: 'updated',
					data: {
						completed: true,
						packgePath: updated.packgePath
					},
					success: res => {
						console.log('成功安装上次的更新,应用需要重启才能继续完成');
					}
				});
				uni.showModal({
					title: '提示',
					content: '应用将重启以完成更新',
					showCancel: false,
					complete: () => {
						plus.runtime.restart();
					}
				});
			} else {
				//获取当前系统版本信息
				plus.runtime.getProperty(plus.runtime.appid, widgetInfo => {
					//请求后台接口 解析数据 对比版本
					this.$Request.getT('/appinfo/').then(res => {
						res = res.data[0];
						if (res.wgtUrl && widgetInfo.version < res.version) {
							let downloadLink = &#39;&#39;;
							let androidLink = res.androidWgtUrl;
							let iosLink = res.iosWgtUrl;
							let ready = false;
							//校验是是不是热更新
							if (res.wgtUrl.match(RegExp(/.wgt/))) {
								// 判断系统类型
								if (plus.os.name.toLowerCase() === &#39;android&#39;) {
									console.log(&#39;安卓系统&#39;);
									if (androidLink && androidLink !== &#39;#&#39;) {
										// 我这里默认#也是没有地址,请根据业务自行修改
										console.log(&#39;发现下载地址&#39;);
										// 安卓:创建下载任务
										if (androidLink.match(RegExp(/.wgt/))) {
											console.log(&#39;确认wgt热更新包&#39;);
											downloadLink = androidLink;
											ready = true;
										} else {
											console.log(&#39;安卓推荐.wgt强制更新,.apk的强制更新请您自行修改程序&#39;);
										}
									} else {
										console.log(&#39;下载地址是空的,无法继续&#39;);
									}
								} else {
									console.log(&#39;苹果系统&#39;);
									if (iosLink && iosLink !== &#39;#&#39;) {
										// 我这里默认#也是没有地址,请根据业务自行修改
										console.log(&#39;发现下载地址&#39;);
										// 苹果(A):进行热更新(如果iosLink是wgt更新包的下载地址)判断文件名中是否含有.wgt
										if (iosLink.match(RegExp(/.wgt/))) {
											console.log(&#39;确认wgt热更新包&#39;);
											downloadLink = iosLink;
											ready = true;
										} else {
											console.log(&#39;苹果只支持.wgt强制更新&#39;);
										}
									} else {
										console.log(&#39;下载地址是空的,无法继续&#39;);
									}
								}
								if (ready) {
									console.log(&#39;任务开始&#39;);
									let downloadTask = uni.downloadFile({
										url: downloadLink,
										success: res => {
											if (res.statusCode === 200) {
												// 保存下载的安装包
												console.log(&#39;保存安装包&#39;);
												uni.saveFile({
													tempFilePath: res.tempFilePath,
													success: res => {
														const packgePath = res.savedFilePath;
														// 保存更新记录到stroage,下次启动app时安装更新
														uni.setStorage({
															key: &#39;updated&#39;,
															data: {
																completed: false,
																packgePath: packgePath
															},
															success: () => {
																console.log(&#39;成功保存记录&#39;);
															}
														});
														// 任务完成,关闭下载任务
														console.log(&#39;任务完成,关闭下载任务,下一次启动应用时将安装更新&#39;);
														downloadTask.abort();
														downloadTask = null;
													}
												});
											}
										}
									});
								} else {
									console.log(&#39;下载地址未准备,无法开启下载任务&#39;);
								}
							} else {
								//不是热更新是在线更新 校验是否强制升级
								if (res.method == &#39;true&#39;) {
									uni.showModal({
										showCancel: false,
										confirmText: &#39;立即更新&#39;,
										title: &#39;发现新版本&#39;,
										content: res.des,
										success: res => {
											if (res.confirm) {
												this.$queue.showLoading(&#39;下载中...&#39;);
												if (uni.getSystemInfoSync().platform == &#39;android&#39;) {
													uni.downloadFile({
														url: androidLink,
														success: downloadResult => {
															if (downloadResult.statusCode === 200) {
																plus.runtime.install(
																	downloadResult.tempFilePath, {
																		force: false
																	},
																	d => {
																		console.log(&#39;install success...&#39;);
																		plus.runtime.restart();
																	},
																	e => {
																		console.error(&#39;install fail...&#39;);
																	}
																);
															}
														}
													});
												}
												if (uni.getSystemInfoSync().platform == &#39;ios&#39;) {
													plus.runtime.openURL(iosLink, function(res) {});
												}
											} else if (res.cancel) {
												console.log(&#39;取消&#39;);
											}
										}
									});
								} else {
									uni.showModal({
										title: &#39;发现新版本&#39;,
										confirmText: &#39;立即更新&#39;,
										cancelText: &#39;下次更新&#39;,
										content: res.des,
										success: res => {
											if (res.confirm) {
												this.$queue.showLoading(&#39;下载中...&#39;);
												if (uni.getSystemInfoSync().platform == &#39;android&#39;) {
													uni.downloadFile({
														url: androidLink,
														success: downloadResult => {
															if (downloadResult.statusCode === 200) {
																plus.runtime.install(
																	downloadResult.tempFilePath, {
																		force: false
																	},
																	d => {
																		console.log(&#39;install success...&#39;);
																		plus.runtime.restart();
																	},
																	e => {
																		console.error(&#39;install fail...&#39;);
																	}
																);
															}
														}
													});
												}
												if (uni.getSystemInfoSync().platform == &#39;ios&#39;) {
													plus.runtime.openURL(iosLink, function(res) {});
												}
											} else if (res.cancel) {
												console.log(&#39;取消&#39;);
											}
										}
									});
								}
							}
						}
					});
				});
			}

			//#endif
Copier après la connexion
.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment développer uni-app en VSCode ? (Partage du tutoriel) Comment développer uni-app en VSCode ? (Partage du tutoriel) May 13, 2022 pm 08:11 PM

Comment développer uni-app en VSCode ? L'article suivant partagera avec vous un didacticiel sur le développement d'uni-app dans VSCode. Il s'agit peut-être du didacticiel le meilleur et le plus détaillé. Venez jeter un oeil !

Utilisez uniapp pour développer une navigation cartographique simple Utilisez uniapp pour développer une navigation cartographique simple Jun 09, 2022 pm 07:46 PM

Comment utiliser Uniapp pour développer une navigation cartographique simple ? Cet article vous donnera une idée pour créer une carte simple. J'espère qu'il vous sera utile !

Parlons de la façon d'utiliser Uniapp pour développer un jeu de serpent ! Parlons de la façon d'utiliser Uniapp pour développer un jeu de serpent ! May 20, 2022 pm 07:56 PM

Comment utiliser Uniapp pour développer un jeu de serpent ? L'article suivant vous guidera étape par étape dans la mise en œuvre du jeu Snake dans uniapp. J'espère qu'il vous sera utile !

Comment encapsuler la demande d'interface Uni-App Vue3 Comment encapsuler la demande d'interface Uni-App Vue3 May 11, 2023 pm 07:28 PM

interface uni-app, encapsulation de méthode globale 1. Créez un fichier API dans le répertoire racine, créez les fichiers api.js, baseUrl.js et http.js dans le dossier api 2.code de fichier baseUrl.js exportdefault"https://XXXX .test03.qcw800.com/api/"3.http.js fonction d'exportation du code de fichierhttps(opts,data){lethttpDefaultOpts={url:opts.url,data:data,method:opts.method

Exemples pour expliquer comment uniapp implémente la fonction de sélection totale des boîtes à sélection multiple Exemples pour expliquer comment uniapp implémente la fonction de sélection totale des boîtes à sélection multiple Jun 22, 2022 am 11:57 AM

Cet article vous apporte des connaissances pertinentes sur uniapp, qui organise principalement les problèmes liés à l'implémentation de la fonction de sélection de tout de la boîte à sélection multiple. La raison pour laquelle la fonction de sélection de tout ne peut pas être implémentée est que lorsque le champ coché de la case à cocher est. modifié dynamiquement, le statut sur l'interface peut changer en temps réel, mais l'événement de changement de checkbox-group ne peut pas être déclenché. Jetons-y un coup d'œil, j'espère que cela sera utile à tout le monde.

Vous guide pas à pas pour développer un plug-in de calendrier Uni-App (et le publier) Vous guide pas à pas pour développer un plug-in de calendrier Uni-App (et le publier) Jun 30, 2022 pm 08:13 PM

Cet article vous guidera étape par étape dans le développement d'un plug-in de calendrier uni-app et vous présentera comment le prochain plug-in de calendrier est développé, du développement à la sortie. J'espère qu'il vous sera utile !

Révéler le principe de la mise à jour à chaud dans Golang : explication privilégiée du chargement et du rechargement dynamiques Révéler le principe de la mise à jour à chaud dans Golang : explication privilégiée du chargement et du rechargement dynamiques Jan 20, 2024 am 10:09 AM

Explorer le principe de Golang Hot Update : Le mystère du chargement et du rechargement dynamiques Introduction : Dans le domaine du développement logiciel, les programmeurs espèrent souvent pouvoir modifier et mettre à jour le code sans redémarrer l'application. De telles exigences sont d’une grande importance tant pour l’efficacité du développement que pour la fiabilité du fonctionnement du système. En tant que langage de programmation moderne, Golang fournit aux développeurs de nombreux mécanismes pratiques pour implémenter des mises à jour à chaud. Cet article approfondira les principes de la mise à jour à chaud de Golang, en particulier les mystères du chargement et du rechargement dynamiques, et le combinera avec des exemples de code spécifiques.

Parlons du chargement déroulant de la vue déroulante d'Uniapp Parlons du chargement déroulant de la vue déroulante d'Uniapp Jul 14, 2022 pm 09:07 PM

Comment uniapp implémente-t-il le chargement déroulant de la vue déroulante ? L'article suivant parle du chargement déroulant de la vue déroulante de l'applet uniapp WeChat. J'espère que cela sera utile à tout le monde !

See all articles