uniapp開發中遇到的plus.runtime.appid問題

寒冰射手楊百億發表於2020-11-14

今天接手一個別人的專案,看程式碼看了一天,有個地方我很費解,上圖
plus.runtime.appid 我尋思這是個啥?
在這裡插入圖片描述
列印輸出的結果 如下
在這裡插入圖片描述
我把plus給列印了 結果如下,看不懂 很費解
在這裡插入圖片描述
文字版如下 這是給人看的東西嗎??

[native code] }","11":"function() { [native code] }","12":"function() { [native
code] }","13":"function() { [native code] }","14":"function() { [native code]
}","15":"function() { [native code] }","16":"function() { [native code]
}","17":"function() { [native code] }","18":"function() { [native code]
}","19":"function() { [native code]
}"},"hooks":{}}},"documentElement":{"ref":"_documentElement","type":"document","attr":{},"style":{}},"__$automator__":false,"__$compiler__":"uni-app"},"requireModule":"function()
{ [native code] }","importScript":"function() { [native code]
}","isRegisteredModule":"function() { [native code]
}","isRegisteredComponent":"function() { [native code]
}"},"weexBridge":{"preloadReady":"function() { [native code]
}","postMessage":"function() { [native code] }","execSync":"function() { [native
code] }","getConfigInfo":"function() { [native code]
}","evalJSFiles":"function() { [native code] }","uniReady":"function() { [native
code] }","removeAllEventListeners":"function() { [native code]
}","sendNativeEvent":"function() { [native code] }","pushDebugData":"function()
{ [native code] }","exec":"function() { [native code] }","getValue":"function()
{ [native code] }","getDotData":"function() { [native code]
}","addEventListener":"function() { [native code]
}","getRedirectInfo":"function() { [native code] }","log":"function() { [native
code] }","setDefaultFontSize":"function() { [native code]
}"},"globalEvent":{"addEventListener":"function() { [native code]
}","removeAllEventListeners":"function() { [native code]
}","removeEventListener":"function() { [native code]
}"},"tools":{"__UUID__":3,"UNKNOWN":-1,"IOS":0,"ANDROID":1,"platform":1,"debug":true,"UUID":"function()
{ [native code] }","extend":"function() { [native code]
}","typeName":"function() { [native code] }","isDate":"function() { [native
code] }","isArray":"function() { [native code] }","isDebug":"function() {
[native code] }","stringify":"function() { [native code]
}","isNumber":"function() { [native code]
}","getElementOffsetInWebview"

遂開始面向百度程式設計 這個東西是跟app的升級更新有關 其實我現在還是沒有整太明白,但是有時候不怕百度就怕不知道咋百度,所以把我遇到的問題分享給大家,希望對你有幫助

貼上原文如下————

uni-app 整包升級/更新方案

w微涼半秋

2019.10.31 21:40:00

注意:plus.runtime.appid,plus.runtime.version, plus.runtime.openURL()
在真機環境下才有效

使用 uni-app 開發,可將程式碼編譯到iOS、Android、微信小程式等多個平臺,升級時也需考慮多平臺同步升級。

uni-app釋出為小程式的升級模式較簡單,只需將開發完的程式碼提交小程式後臺,待稽核通過後使用者將自動升級 iOS/Android App
的升級需開發者自己處理,本文主要簡介 App 的整包升級模式。 App
的資源熱更新另見文件:http://ask.dcloud.net.cn/article/35667 介面約定
如下資料介面約定僅為示例,開發者可以自定義介面引數。 請求地址:https://www.example.com/update

請求方法:GET

請求資料:

    "appid": plus.runtime.appid,  
    "version": plus.runtime.version   }   ```

響應資料:

```javascript {  
    "status":1,//升級標誌,1:需要升級;0:無需升級  
    "note": "修復bug1;\n修復bug2;",//release notes  
    "url": "http://www.example.com/uniapp.apk" //更新包下載地址   }  ```

客戶端實現 App啟動時,向服務端上報當前版本號,服務端判斷是否提示升級。

在App.vue的onLaunch中,發起升級檢測請求,如下:

```javascript onLaunch: function () {  
    //#ifdef APP-PLUS  
    var server = "https://www.example.com/update"; //檢查更新地址  
    var req = { //升級檢測資料  
        "appid": plus.runtime.appid,  
        "version": plus.runtime.version  
    };  
    uni.request({  
        url: server,  
        data: req,  
        success: (res) => {  
            if (res.statusCode == 200 && res.data.status === 1) {  
                uni.showModal({ //提醒使用者更新  
                    title: "更新提示",  
                    content: res.data.note,  
                    success: (res) => {  
                        if (res.confirm) {  
                            plus.runtime.openURL(res.data.url);  
                        }  
                    }  
                })  
            }  
        }  
    })  
    //#endif   }   ```

注意:App的升級檢測程式碼必須使用條件編譯,否則在微信環境由於不存在plus相關API,將會報錯。

服務端實現 根據客戶端上報的版本號,比對服務端最新版本號,決定是否需要升級,若需升級則返回升級資訊(rease notes、更新包地址等)

開發者可以根據服務端開發語言,自己實現升級檢測邏輯,如下是一個php示例程式碼:

```javascript header("Content-type:text/json");   $appid =
$_GET["appid"];   $version = $_GET["version"]; //客戶端版本號   $rsp =
array("status" => 0); //預設返回值,不需要升級   if (isset($appid) &&
isset($version)) {  
    if ($appid === "__UNI__123456") { //校驗appid  
        if ($version !== "1.0.1") { //這裡是示例程式碼,真實業務上,最新版本號及relase notes可以儲存在資料庫或檔案中  
            $rsp["status"] = 1;  
            $rsp["note"] = "修復bug1;\n修復bug2;"; //release notes  
            $rsp["url"] = "http://www.example.com/uniapp.apk"; //應用升級包下載地址  
        }  
    }   }    echo json_encode($rsp);   exit;   ```

常見問題 版本檢測需要打包app,真機執行基座無法測試。因為真機執行的plus.runtime.version是固定值。

原文地址:https://ask.dcloud.net.cn/article/34972


順便把評論也貼上過來

Han濤_ 205.06 17:43 我這樣給後端傳過去,後端拿到的資料一直是null

w微涼半秋
05.06 18:51 你取的前端有取到資料嗎

Han濤_
05.07 13:43 @w晚風 發現問題了,後端設定的問題,謝謝

相關文章