精华内容
下载资源
问答
  • 修改版本号还是提示更新
    千次阅读
    2019-05-01 17:15:33

           今天五一国际劳动节,依然在正常上班,就分享一个知识点呗。在iOS开发过程中,App上线之后,进行版本更新的时候,需要及时提醒用户更新最新的App版本,那么就用到了版本更新提示框的使用。本章就来介绍一下App版本更新提示框的使用方法,各取所需,仅供参考。

    一、根据第三方实现版本更新提示框的方法

            根据第三方实现App版本更新提示框,进行了封装,然后直接将AppID作为参数传进去或者直接获取应用的bundleID来使用的,把工具类拖入到项目中,只需要Appdelegate文件里面一句代码就可集成实现的方法。原创的下载链接https://github.com/emotality/ATAppUpdater 具体实现操作步骤如下所示:

    1、AppUpdater.h文件:

    #import <UIKit/UIKit.h>

    #import <SystemConfiguration/SystemConfiguration.h>

     

    @interface AppUpdater : NSObject <UIAlertViewDelegate>

    + (id)sharedUpdater;

    - (void)showUpdateWithForce;

    - (void)showUpdateWithConfirmation;

    - (void)forceOpenNewAppVersion:(BOOL)force

    __attrib

    更多相关内容
  • 主要介绍了phpcms v9后台登陆模板修改方法和程序版本更新提示修改方法,需要的朋友可以参考下
  • Xshell 提示“要继续使用此程序 您必须应用最新的更新或使用新版本”, 直接把Xshell里的这个文件替换就行
  • RN:App版本更新提示方案

    千次阅读 2021-12-23 17:46:40
    android 1、app内下载原生包并安装? 2、如何跳到对应的应用市场? 跳应用市场 没有应用市场则直接下载文件,是否跳腾讯应用宝等通用的市场 2、热更新方案选型?...目前看来热更新版本是维护在pushy后台的

    背景

    一般情况下,我们的 app 在升级新版本后,希望能提示用户去更新,那么就需要一整套的策略来提示用户更新。

    结论

    最终我们实现的效果是这样的:
    在这里插入图片描述

    • 普通弹框更新用于一般的用户提示版本升级
    • 热更新用于线上bug紧急修复

    为什么要这样做呢?
    经过我们的调研,热更新有一些限制,比如更改原生代码无法热更新,热的版本是维护在pushy后台的,不能改原生代码里的版本号

    如何知道需要更新了?

    1、普通弹框更新则由后端接口控制

    req:

    • 当前APP版本号信息:1.0.0
    • 设备型号:xiaomi、huawei
    • 设备系统类型:android、ios

    res:

    • 是否需要升级
    • 升级模式 1-去应用市场进行更新 2-直接下载新版本安装包
    • 是否强制更新
    • 新的版本号
    • 新的版本描述
    • 安装包下载地址

    这样配置的话就比较灵活了

    2、热更新则由前端通过 pushy 后台控制
    在这里插入图片描述

    普通弹框更新-相关问题

    app内下载原生包并安装?

    rn-fetch-blob:
    https://blog.csdn.net/zhenzhenzhen1705/article/details/108315739
    react-native-fs:
    https://github.com/itinance/react-native-fs
    https://github.com/cjdell/react-native-fs-test/blob/master/index.common.js
    https://www.jianshu.com/p/77e5bd98a7f1
    多个文件自定义下载:
    https://blog.csdn.net/weixin_42284466/article/details/84898859
    比较完美的方案:(目前使用的这个)
    https://github.com/songxiaoliang/react-native-app-upgrade
    https://songlcy.blog.csdn.net/article/details/77189649
    打开文件的包:
    https://github.com/huangzuizui/react-native-file-opener
    https://github.com/1556173267/react-native-apk-manager
    不好用https://github.com/jerson/react-native-updater-util
    android原生包教学:
    https://reactnative.cn/docs/native-modules-android
    原生包:
    https://github.com/feicien/android-auto-update
    https://blog.csdn.net/jiejiegua/article/details/71477378

    android app如何跳到对应的应用市场?

    这里应该通过判断机型跳转到对应的应用市场,如果非华为oppo小米,则使用方式1.1(或者跳腾讯应用宝等通用的市场)
    跳应用市场
    获取设备信息

    ios app内如何跳转appstore?

    Linking.openURL('itms-apps://itunes.apple.com/cn/app/id1587679026')
    

    热更新-相关问题

    热更新究竟能否上架?

    以下是 pushy 官网说的:https://pushy.reactnative.cn/docs/faq.html
    您可能听说过各种说法,但大量实践表明,热更新目前能够顺利上架 AppStore 和其他各种应用市场。唯一需要注意的是,在审核期间请不要发布热更新,不要让审核人员看到各种更新相关的提示和弹窗,即可顺利通过。

    热更新方案选型?

    https://github.com/reactnativecn/react-native-pushy
    https://pushy.reactnative.cn/
    选择官方推荐的pushy
    步骤:
    1、打包一个基础的android包
    2、把包上传到pushy,同时这个包分发给用户使用,此时版本为代码中写死的版本
    3、当需要更新包的时候,本地改代码后执行pushy的命令生成一个增量包上传到pushy后台,上传的时候可以命名版本,这个版本只保存在pushy后台
    4、这时用户的app就会弹框是否更新

    热更新之后版本怎么控制?

    目前看来热更新的版本是维护在pushy后台的,并不能改原生代码里的版本号.

    是否可以静默更新?

    可以的,无非就是把本来要弹的框去掉,更新的时候支持两种方式:

    • 直接重启更新
    • 下次启动更新

    每次app切换到前台(冷启动热启动)的时候,会触发检测更新,这个时候如果有更新则会静默更新,更新完成后,则看配置的是上面哪种更新模式:
    1、如果是直接重启更新,那么页面会短暂的白屏零点几秒然后恢复(因为是重新加载了 js bundle),页面将变为新版本。
    2、如果是下次启动更新,那么页面没有任何反应,除非下次冷启动的时候页面才会变为新版本。此方案是真正的无感知,但是用户感知到新版本的时机比较慢。

    如何进行热更新测试?

    因为免费版的 pushy 只能建三个应用,所以线上android ios各一个,测试只建一个 android 的。
    在这里插入图片描述
    这样的话,每次测试的时候,只需要用这个测试账号就行了。

    其他问题

    什么时候弹窗提示用户更新?

    后台切换到前台的时候(冷启动热启动)
    https://github.com/reactnativecn/react-native-pushy/blob/master/lib/simpleUpdate.js

    如何判断应用是冷启动?

    冷启动其实就是 App 层面的 useEffect

    ios获取app store版本号等信息?

    获取版本号等信息:https://itunes.apple.com/cn/lookup?bundleId=com.cmvalue.wisederma

    展开全文
  • 安卓实现APP自动检测软件版本提示更新 前言 当我们在做安卓项目的时候,客户的需求往往难免会发生变动。但是我们的产品已经上线了,却又需要修改的话我们该怎么办呢?也许很多应用商店已经集成了这个功能,只需要...

    安卓实现APP自动检测软件版本并提示更新

    前言

    当我们在做安卓项目的时候,客户的需求往往难免会发生变动。但是我们的产品已经上线了,却又需要修改的话我们该怎么办呢?也许很多应用商店已经集成了这个功能,只需要开发者上传新的APK文件即可,应用商店会自动进行提醒用户进行应用更新。可是对于那些因可能不想写申请著作权相关的文件又或着产品急于上线而无法上线到应用商店的APP又该怎么办呢?(这里提一句:绝大多数应用商店在开发者发布应用的时候需要提供软件的著作权,而申请软著则需要写一些相关的文件,然后提交上去之后还需要等待审核人员对材料进行审核,审核通过了才会给你发软件的著作权,但是这个审核期通常要大约一个月)没办法,就只能靠我们自己实现。其实自己实现也不是特别难。接下来我们来看如何对其进行实现吧。


    效果图

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    Tips:这里只改了服务器中的版本号而已,并没有放新的APK上去,所以图中显示的是 版本 1.0.1 → 1.0.1

    在这里插入图片描述


    实现思路

    其实实现的思路很简单,就是在打开APP的时候首先从服务器中去获取保存的版本号,然后再获取软件本身的版本号并与服务器版本号进行比较,若相同,则不做任何事,若不相同,则弹出版本更新的提示框去提示用户进行更新。用户如果点击更新则软件就去放在服务器中的APK资源,下载完毕后进行安装,这样我们就完成了软件的自动检测版本更新功能。

    准备事项

    ① 服务器数据库中保存服务器中的软件版本号。
    ② 返回服务器数据库中版本号的后台接口。
    ③ 服务器中tomcat中放入软件的APK文件。
    ④ APP获取软件本身版本号以及弹出版本更新弹窗并下载服务器中APK文件功能。
    接下来我们来一一实现

    ① 数据库保存版本号

    相信这个对于绝大多数人来说并不难,直接在数据库中创建一个表和一个字段即可。这里放下我自己创建的数据库表供大家参考。

    在这里插入图片描述


    ② 返回服务器数据库中版本号的后台接口

    这个对于Java程序员来说简直是易容反掌。就是返回服务器版本号Json数据的Servlet而已。相信对于大多数人来说也不难。这里也就不再详细说明了。


    ③ 服务器中tomcat中放入软件的APK文件

    这里的意思就是大家要把更新时所需的APK资源给用户准备好,以便用户在进行更新的时候能够访问并下载到最新版本的APK文件供用户安装。这里只需要大家把最新版本的APK文件放在服务器的tomcat的如下路径(Tomacat/webapps/ROOT)下即可访问地址为:服务器地址 + / + apk文件名,如图中的地址为:http://183.66.246.214:9420/BluetoothSPP.apk
    Tips:当用户访问该网址,即可进行下载该APK文件。

    在这里插入图片描述


    ④ APP获取软件本身版本号以及弹出版本更新弹窗并下载服务器中APK文件功能。

    【1】APP获取软件本身版本号

    不知道大家在写安卓软件的时候有没有注意到在项目的build.gradle文件中就包含着该项目的版本号以及版本名的内容。如下图所示:

    在这里插入图片描述
    在这里插入图片描述

    既然软件自身的版本号以及版本名都已经知道在哪里了,那么接下来的任务就是获取到它就行了。
        //获取软件版本号
        public String getVersionCode(Context context)
        {
            try {
                String pkName = context.getPackageName();
                String versionName = context.getPackageManager().getPackageInfo(
                        pkName, 0).versionName;
                int versionCode = context.getPackageManager().getPackageInfo(
                        pkName, 0).versionCode;
                return "V" + versionCode + "_" + versionName;
            }
            catch (Exception e)
            {
                Log.d(TAG, "getVersionCode: " + e.getMessage());
                e.printStackTrace();
            }
            return null;
        }
    
    
    【2】弹出版本更新弹窗并下载服务器中APK文件

    这个功能相比上一个获取版本号的功能来说相对复杂一点,但实现的不是太难。首先弹出提示窗,这个重写一下AlertDialog就能实现。并且能够制定自己想要的弹出界面。接着就是下载服务器中的APK文件,这个也不是很难,直接用一个服务(Server)进行下载即可。其实呢,这两个功能是有一些大佬早已集成在了一起,界面和功能呢也做的很成熟稳定了。所以这里我们不妨直接使用这些大佬已经弄好的接口来进行实现,这样既稳定又便捷。 在这里要感谢提供这一接口的大佬,大佬的gitHub项目地址 → 传送门
    注意:大家需要详细阅读项目下的README.md文件内容来进行使用,这样才不会出错。

    我是用的java版本的,下面给出我这部分的核心代码。
      //获取服务器保存的版本号
        public void GetServerVersionInfo()
        {
            new Thread(new Runnable() {
                @Override
                public void run() {
                //通过访问后台接口来获取保存在数据库中的版本号内容
                //将返回的json数据解析出来并进行判断处理
                    try {
                        OkHttpClient client = new OkHttpClient();
                        RequestBody requestBody = new FormBody.Builder()
                                .build();
                        Request request = new Request.Builder()
                                .url("http://183.66.246.214:9420/cloundctrl/user/getSoftware2")
                                .post(requestBody)
                                .build();
                        Response response = client.newCall(request).execute();
                        String responseData = response.body().string();
                        JSONObject jsonObject = new JSONObject(responseData);
                        //获取到返回的状态值 json数据的code项
                        String code = jsonObject.getString("code");
                        Log.d(TAG, "run: code的值为: " + code);
                        if(code.equals("200"))
                        {
                            String data = jsonObject.getString("data");
                            JSONObject dataJsonObject = new JSONObject(data);
                            Log.d(TAG, "run: data为 " + data);
                            String id = dataJsonObject.getString("id");
                            Log.d(TAG, "run: id为 " + id);
                            String versionCode = dataJsonObject.getString("versionCode");
                            Log.d(TAG, "run: versionCode为" + versionCode);
                            String versionName = dataJsonObject.getString("versionName");
                            Log.d(TAG, "run: versionName为 " + versionName);
    
                            //获取到本身的apkVersionCode和apkVersionName
                            String versionInfo = getVersionCode(MainActivity.this);
                            String serverVersionInfo = "V" + versionCode + "_" + versionName;
                            //如果俩不相等则进行提示升级
                            if(!versionInfo.equals(serverVersionInfo))
                            {
                                VarsOfUpdate.setUpdateTitle("发现新版本V" + versionName);
                                VarsOfUpdate.setVersionName("V" +versionName);
    
                                //进行升级
                                UpdateConfig updateConfig1 = new UpdateConfig();
                                updateConfig1.setCheckWifi(true);
                                updateConfig1.setNotifyImgRes(R.drawable.ic_update_logo);
                                //是否强制更新(取出取消更新按钮)
                                //updateConfig.setForce(true);
                                updateConfig1.setAlwaysShowDownLoadDialog(true);
    
                                UiConfig uiConfig1 = new UiConfig();
                                uiConfig1.setUiType(UiType.CUSTOM);
                                uiConfig1.setCustomLayoutId(R.layout.view_update_dialog_custom);
    
                                Log.d(TAG, "onClick: 运行到了这里!");
                                UpdateAppUtils
                                        .getInstance()
                                        .apkUrl(VarsOfUpdate.getApkUrl())
                                        .updateConfig(updateConfig1)
                                        .uiConfig(uiConfig1)
                                        .setOnInitUiListener(new OnInitUiListener() {
                                            @Override
                                            public void onInitUpdateUi(View view, UpdateConfig updateConfig, final UiConfig uiConfig) {
                                                TextView tv_updateTitle;
                                                TextView tv_versionName;
                                                TextView tv_updateContent;
    
                                                TextView btn_updateSure;
    
                                                ImageView imageView_updateCancel;
    
                                                tv_updateTitle = (TextView)view.findViewById(R.id.tv_update_title);
                                                tv_versionName = (TextView)view.findViewById(R.id.tv_version_name);
                                                tv_updateContent = (TextView)view.findViewById(R.id.tv_update_content);
    
    //                                            public static String apkUrl = "http://183.66.246.214:9420/BluetoothSPP.apk";
    //
    //                                            public static String updateTitle = "发现新版本V1.0.0";
    //                                            //更新内容
    //                                            public static String updateContent = "1、控制更加智能\n2、参数一目了然\n3、在线升级不是问题\n4、更多功能等你探索";
    //                                            //更新版本名称
    //                                            public static String versionName = "1.0.0";
    
                                                tv_updateTitle.setText(VarsOfUpdate.getUpdateTitle());
                                                tv_versionName.setText(VarsOfUpdate.getVersionName());
                                                tv_updateContent.setText(VarsOfUpdate.getUpdateContent());
                                            }
                                        })
                                        .update();
                            }
                        }
                    }catch (Exception e)
                    {
                        e.printStackTrace();
                        Log.d(TAG, "run: 错误信息为 :" + e.getMessage());
                        //Toast.makeText(MainActivity.this,"网络异常,检查软件更新失败!", Toast.LENGTH_SHORT).show();
                    }
                }
            }).start();
        }
    
    

    最后

    提醒大家一定要在项目的AndroidManifest.xml文件下加入如下用户权限
    <uses-permission android:name="android.permission.INTERNET" />
    
    以下是相关类库
     //更新APP库
        implementation 'com.teprinciple:updateapputils:2.3.0'
        //AndroidX
        //implementation 'com.teprinciple:updateapputilsx:2.3.0'
    
    //访问互联网需要的库
        implementation 'com.squareup.okhttp3:okhttp:4.5.0'
    
    以下是我图中的图标(感谢大佬Dome下提供的图标)
    bg_custom_update_dialog.png

    在这里插入图片描述

    bg_custom_update_dialog.9.png

    在这里插入图片描述

    展开全文
  • 解决Typora旧版本无法使用提示需要更新的问题

    参考视频:【typora】This beta version of Typora is expired 解决方法之一_哔哩哔哩_bilibili

    *使用视频方法可以成功使用,但是一开始我改了typora的设置之后下次打开不生效。

    *第二天尝试直接更改设置直接生效了。可能是因为data文件之前我设置了只读取,第二天改的时候data文件没改权限。

    *所以如果按照视频之后更改设置了下次打开软件没生效可以1-7步进行一遍,可以成功。

    *如果不需要更改设置就直接5-7步。

    1. 关闭typaro,管理员权限打开cmd,输入date,回车,把时间更改成2021年的某一天。
    2. 打开C:\Users\win10\AppData\Roaming\Typora文件路径,找到profile.data文件并删除
    3. 打开typora,把要更改的设置更改好,并且一定要取消自动更新,然后关闭typaro。
    4. 把系统时间改回去,但是还不能打开typaora。
    5. win+r输入regedit打开注册表
    6. 打开路径:计算机\HKEY_CURRENT_USER\SOFTWARE\Typora
      右击Typora文件选择“权限”
      选择最后一个用户的账户,并把控制权限全部改为拒绝
    7. 设置好之后点确定或者应用,就可以使用Typora了。

    展开全文
  • 当我们无意修改了pom文件时,maven总是自动更新,会很浪费系统资源,所以想要改成需要更新的时候,手动更新 一,正常情况下如何刷新依赖? 当我们对pom.xml进行修改后,需要点击右上角出现的m按钮进行刷新, 会...
  • 问题: 首先小程序,更新版本发布后,用户的版本一般情况下仍是旧版本;需要手动删除小程序后,在重新搜索打开才能使用新版本; 原因查看: 运营机制;更新机制; 解决办法: 小程序官方文档解决办法 ; uni-app版本...
  • Xshell 7 提示 “要继续使用此程序,您必须应用最新的更新或使用新版本
  • 2.embarrassing,浏览器因未更新,打开浏览器右上角时常提示“你的版本太旧”,灰常烦人。 解决方案:右键桌面谷歌浏览器图标,选择属性,在目标地址后添加"--disable-background-networking" 3.提示"Adobe ...
  • 如图,Xshell使用一段时间后突然弹出”要继续使用此程序 您必须应用最新的更新或使用新版本” 出现这个问题的原因是XShell配置文件中写入了强制升级时间,这个版本是2017年12月27日发布的;2018年12月25日后就必须...
  • 打开Xshell或者是Xftp 提示 “要继续使用此程序,您必须应用最新的更新或使用新版本” 解决办法一: 手动修改电脑的系统时间。右下角日期-右键“调整日期/时间(A)”-手动设置日期和时间-将日期调整到2017年...
  • Xshell 7忽然不能用,提示“”要继续使用此程序,您必须应用最新的更新或使用新版本“” 解决办法:修改电脑的系统时间。右下角日期-右键“调整日期/时间(A)”-手动设置日期和时间-将日期调整到2017年即可。 之前...
  • xshell版本 Xshell-6.0.0204p.exe 修改nslicense.dll 正常安装后修改安装路径中nslicense.dll文件 编辑软件安装插件 notepade++安装插件,插件》插件管理,找到HEX-Editor安装上 启用插件编辑配置文件 查找7f 0c ...
  • Android提示版本更新

    万次阅读 多人点赞 2014-05-07 10:43:10
    如果不是最新版,提示更新 正在下载 安装新程序        一、准备知识  在AndroidManifest.xml里定义了每个Android apk的版本标识: package="com.example.try_downloadfile_progress" ...
  • 关闭迅雷更新到新版本提示

    千次阅读 2019-01-17 08:36:39
    每次打开迅雷都会自定检查是否是最新版本,如果不是最新版本,迅雷会一直重复弹窗弹出更新到新版本提示: 解决方案 简介:迅雷提示升级是因为每次迅雷主程序启动时都会同时启动一个叫XLLiveUD.exe的程序,这个程序...
  • 如果你本地已经提前装了Xftp6那么可以直接跳转到第二步。如果本地还没有Xftp6的,可以点到下面的链接进行下载 Xftp6下载这里需要注意,dll文件不能直接用普通记事本打开编辑,需要使用高级记事本打开编辑(比如...
  • 更新到一个本地不存在、远程服务器存的新分支,最直接的办法git checkout -torigin/2.0.0能够直接新建本地分支,将远程分支提取出来。(git branch-av如果还看不到远程新的分支,本地需要先gitpull)用一个分支强制...
  • unity学习笔记-实现版本更新

    千次阅读 2022-01-18 11:05:44
    实现版本更新实现在unity调用原生app的安装器查看的资源...所以这次想实现的是在每次打开游戏的时候,第一件事就是检查是否有新版本,有的话则提示需要更新下载新版本(至于要不要开放用户可以不下载新版本的权限等到时
  • 简单明了,直接修改系统时间为软件提示之前的时间即可,可以设置到2018年去,但明显不妥,频繁的修改时间 方案二(测试不行): 先修改系统时间为2018年,启动xftp后关闭自动更新,在还原系统时间 工具——》选项...
  • 本篇文章主要讲解python旧版本更新版本的方法和说明 作者:任聪聪 适用人群:python新手 python更新共有两种常见的可以通过命令行【linux服务器、mac中】和重新安装【windows、mac、linux图形化系统中】进行更新...
  • 安装了迅雷软件后,如果不是最新版本,迅雷会一直重复弹窗弹出:更新到新版本提示。而迅雷本身又不提供关闭自动更新,或者关闭自动更新提示的功能设置。怎么办?以下以迅雷7.9版本为例进行经验分享   工具/原料...
  • Xshell 6 提示 “要继续使用此程序,您必须应用最新的更新或使用新版本” 解决办法: 使用二进制编辑器修改nslicense.dll文件 文件位置:xshell 安装根目录 具体步骤 步骤1:下载UltraEdit编辑器 步骤2:使用...
  • Python中更新pip版本的那些事

    千次阅读 2021-11-20 19:47:05
    python如何更新pip版本更新前的介绍在Settings中更新pip版本通过Terminal下载pip最新版本 更新前的介绍 在pycharm软件中打开一个项目,选择File->Settind,打开设置。 在Project->Project Interpreter中可以...
  • 每次打开vscode编辑器,顶部总会提出版本更新提示,着实有点厌烦,那该怎么关闭自动更新提示呢?下面小编简单分享下vscode关闭自动更新提示的设置方法,希望对大家有所帮助!vscode关闭自动更新提示的方法步骤1、...
  • 解决targetSdkVersion版本过低安装失败,安装apk提示版本太低,targetsdkversion修改方法 直接上解决办法: 一、打包错误 AndroidManifest.xml:1: error: No resource identifier found for attribute '...
  • 修改pom.xml,添加如下:maven-compiler-plugin3.6.11.81.8UTF-8解决maven项目update project会更改jdk版本问题一.问题描述 在Eclipse中新建了一个Maven工程, 然后更改JDK版本为1.6, 结果每次使用Maven >...
  • 禁止Xmind更新弹窗提示

    千次阅读 2021-03-05 18:48:59
    最近画思维导图比较频繁,烦人的更新提示和广告也频繁弹出,是可忍,熟不可忍!必须想办法关掉 在Xmind中,【编辑】→【首选项】未找到关闭自动检查更新的功能,使用火绒弹窗拦截又拦不住右下角的浮窗广告,手动...
  • 但今天老版本突然出现提示: This beta version of Typora is expired binggo _1.问题现象 This beta version of Typora is expired, please download and install a newer version.打开 0.11.17.0 版本 Typora 报错...
  • 1、一打开APP就检测版本更新信息,则需要在AppDelegate.mm里面添加: NSString *version = [[[NSBundle mainBundle]infoDictionary] objectForKey:@"CFBundleVersion"]; AFHTTPSessionManager *mgr = ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 360,261
精华内容 144,104
热门标签
关键字:

修改版本号还是提示更新