当前位置: 首页 > 后端技术 > PHP

App多版本兼容

时间:2023-03-29 15:05:13 PHP

开发语言:PHP7+开发框架:Laravel之前也对接过app。每次更新版本,都没有考虑与之前版本的兼容性。当有新的版本更新时,直接强制客户端更新。否则它会退出。我刚接手的app有这个需求,需要保留之前的版本,这样对不想更新的用户体验会更友好。多个版本有很多解决方案。我直接使用laravel框架写出了自己的解决方案,供大家参考。一般需要改4个地方。在routes文件夹下添加规则作为路由文件,如app_1.php、app_2.php。在Controllers文件夹下添加V1和V2文件夹获取客户端自定义header头域X-version-code修改RouteServiceProvider文件写到这里,相信大家应该明白我的思路了,下面开始一步步讲解。新建路由文件新建路由文件api_1.php,内容如下Route::group(['namespace'=>'V1'],function(){//在这里写路由});namespaceV1对应controllerV1文件夹,这样当有请求时,会自动查找指定版本的controller,确定客户端版本号X-version-code为客户端自定义字段,表示当前客户端版本号。版本号由服务器返回给客户端。在RouteServiceProvider保护函数mapApiRoutes()的mapApiRoutes方法中添加如下代码~~~~{$versionCode=request()->header('X-version-code')??AppService::getLatestRoute();$路由文件=!$版本代码?'api_1.php':('api_'.$versionCode.'.php');Route::prefix('api')->middleware('api')->namespace($this->namespace)->group(base_path('routes/'.$routeFile));}$versionCode是从header中获取的版本号;如果客户端没有及时更新,那么我们可以直接获取header中的X-version-code如果是第一次下载,我们需要获取最新版本的app,即最新的路由文件:见2AppService::getLatestRoute()方法获取最新版本号//AppService.phppublicstaticfunctiongetLatestRoute(){$files=glob(base_path('routes').'/api*.php');//获取路由文件的文件名$tmp=array_map(function($item){returnpathinfo($item)['filename']??'';},$files);//倒序排列数组中的文件名rsort($tmp);返回爆炸('_',当前($tmp))[1]??'';}如何返回版本号每次有新版本发布,将发布的版本记录存入数据库定义一个返回app最新版本号的接口。客户端每次启动时查询接口的最新版本号。假设界面中的版本号为A,客户端本地保存的版本号为B,如果A>B,则表示需要更新。