在使用 uni-app 開發的時候,遇到了一個很棘手的問題。即獲取設備參數的時候 uni-app 並沒有相關方法,而安卓開發是可以做到的,因為接的是三方推廣,所以功能必須實現,所以求助了安卓的大佬幫我們寫了一個插件。
uni-app 提供了以下方式來調用原生插件
我們可以通過這個方法來獲取到插件,並且調用他。官方示例
const dcRichAlert = uni.requireNativePlugin('DCloud-RichAlert')
so far so good,and then something bad happen。
what?公司的項目是禁止上傳的,怎么破?
后來老大研究了一下官方的示例,找到了使用原生插件本地打包的方法。
首先需要在本地打包的文件夾下配置 dcloud_uniplugins.json 文件
在文件內部聲名自己調用的原生插件
{ "nativePlugins": [ { "plugins": [ { "type": "module", "name": "PhoneInfo",//調用插件的名稱 "class": "com.app.uniplugin_appinfo.PhoneInfo"//插件方法全稱 } ] } ] }
然后在 libs 文件夾放入安卓寫的插件
現在,插件的基本部署已經完成了,開始調用吧。
const plungin = uni.requireNativePlugin('PhoneInfo'); // PluginName 為原生插件名稱
plungin.getDeviceId('1',function(result){ deviceid=result; $HttpPost(url, {deviceid,ptype}, res => { if (res.data.code != 200 || res.statusCode != 200) { $Toast('系統錯誤,請重試!'); return; } SetStorage('webviewUrl', res.data.data.Url); uni.navigateTo({ url: "/pages/web-view/web-view" }) }) })
上面就完成了插件的調用,因為安卓的大佬第一次寫 uni-app 的原生插件,所以完全照搬的官方示例的寫法給我定義的方法,本來我只是需要一個返回值的,期待的是下面這種,得到的是上面這種。欸……心塞
deviceid=plungin.getDeviceId;