APP更新方案

前端小菜鸡美哥發表於2024-05-29

注意!!!後端返回資料要求 欄位如下

url: 'http://127.0.0.1:8088/edition_manage/get_edition', //示例介面
傳參data: {
           edition_type: plus.runtime.appid,
           version_type: uni.getSystemInfoSync().platform, //android或者ios
            edition_number: inf.versionCode // 打包時manifest設定的版本號 
         },

返參data:{
    // 版本更新內容 支援<br>自動換行
    describe: '1. 修復已知問題<br>2. 最佳化使用者體驗', 
    edition_url: '', //apk、wgt包下載地址或者應用市場地址  安卓應用市market://details?id=xxxx 蘋果store itms-apps://itunes.apple.com/cn/app/xxxxxx
    edition_force: 0, //是否強制更新 0代表否 1代表是
    package_type: 1, //0是整包升級(apk或者appstore或者安卓應用市場) 1是wgt升級
    edition_issue:1, //是否發行  0否 1是 為了控制上架應用市場稽核時不能彈出熱更新框
    edition_number:100, //版本號 最重要的manifest裡的版本號 (檢查更新主要以伺服器返回的edition_number版本號是否大於當前app的版本號來實現是否更新)
    edition_name:'1.0.0',// 版本名稱 manifest裡的版本名稱
    edition_silence:0, // 是否靜默更新 0代表否 1代表是
}

後端注意!!!

edition_number傳這個引數是為了解決部分使用者app長期不使用,第一次開啟伺服器查到的版本是最新的是wgt包,但是之前app有過整包更新,如果直接更新最新wgt的話,會出現以前的整包新增的原生模組或者安卓許可權無法使用,所以後端查詢版本必須返回大於當前edition_number版本的最新的整包apk地址或者是應用市場地址,如果沒有大於edition_number的整包,就返回最新的wgt包地址就行

import silenceUpdate from '@/uni_modules/rt-uni-update/js_sdk/silence-update.js' //引入靜默更新

//#ifdef APP-PLUS 

// 獲取本地應用資源版本號
        plus.runtime.getProperty(plus.runtime.appid, (inf) => {
            //獲取伺服器的版本號
            uni.request({
                url: 'http://127.0.0.1:8088/edition_manage/get_edition', //示例介面
                data: {
                    edition_type: plus.runtime.appid,
                    version_type: uni.getSystemInfoSync().platform, //android或者ios
                    edition_number: inf.versionCode // 打包時manifest設定的版本號 
                },
                success: (res) => {
                    //res.data.xxx根據後臺返回的資料決定(我這裡後端返回的是data),所以是res.data.data 
                    //判斷後臺返回版本號是否大於當前應用版本號 && 是否發行 (上架應用市場時一定不能彈出更新提示)
                    if (Number(res.data.data.edition_number) > Number(inf.versionCode) && res
                        .data.data.edition_issue == 1) {

                        //如果是wgt升級,並且是靜默更新 (注意!!! 如果是手動檢查新版本,就不用判斷靜默更新,請直接跳轉更新頁,不然點選檢查新版本後會沒反應)
                        if (res.data.data.package_type == 1 && res.data.data.edition_silence == 1) {

                            //呼叫靜默更新方法 傳入下載地址
                            silenceUpdate(res.data.data.edition_url)

                        } else {
                            //跳轉更新頁面 (注意!!!如果pages.json第一頁的程式碼裡有一開啟就跳轉其他頁面的操作,下面這行程式碼最好寫在setTimeout裡面設定延時3到5秒再執行)
                            uni.navigateTo({
                                url: '/uni_modules/rt-uni-update/components/rt-uni-update/rt-uni-update?obj=' +
                                    JSON.stringify(res.data.data)
                            });
                        }
                    } else {

                        // 如果是手動檢查新版本 需開啟以下注釋
                        /* uni.showModal({
                            title: '提示',
                            content: '已是最新版本',
                            showCancel: false
                        }) */
                    }
                }

            })

        });

        //#endif    

相關文章