<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在工作中,有時候會遇到需要開發app的情況,但是公司又沒有andriond、ios,這個時候如果不想外包,就要前端上場了,本文介紹使用uinapp+webview做一個app殼子,然後整個app使用內嵌h5的方式來開發APP.
uniapp是沒有企業賬號的,所以申請個公共郵箱註冊一下就行
登入註冊地址: https://dev.dcloud.net.cn/
連結:https://www.dcloud.io/hbuilderx.html
檔案->新建->專案
因為我們不是真的要開發一個app,只是要一個webview,所以選擇預設模板就行
我們把webview要開啟的連結放在某臺確認的伺服器上面,方便更新已經放一些設定,使用webview的@message來監聽h5回傳的訊息,可以做一些原生操作,如開啟攝像頭,請求開啟藍芽等。
<template> <view> <web-view :src="url" @message="getMessage"></web-view> </view> </template> <script> export default { data() { return { url: '' } }, onLoad(options) { uni.request({ // new Date().getTime()是為了確保不用快取 url: 'https://存放設定的伺服器/config.json?t=' + new Date().getTime(), complete: (res)=> { let url = "預設連結"; if(res.statusCode == 200){ url = res.data.url; } // 可以獲取使用者裝置號 let pinf = plus.push.getClientInfo(); let cid = pinf && pinf.clientid || ''; // 處理伺服器設定的連結 let d = url.indexOf('?') > -1? '&' : '?'; this.url = `${url}${d}t=${new Date().getTime()}&cid=${cid}` } }); }, methods: { // 可以把開啟藍芽、定位等原生操作放在webview訊息裡面回傳 getMessage(event) { let data = event.detail.data; if(data.action){ uni[data.action](data.options) } } } } </script> <style> </style>
首先是id跟包名這些
然後是app的圖示,準備一個1024x1024的圖示,hbuilder會自動幫轉解析度
app模組設定,作者只用過推播功能,要額外看uniapp檔案,很容易踩坑。但是uniapp也提供技術支援,不過人家是收費的。個人開發者也可以在上面回答問題賺點外快,嘿嘿嘿
然後就是許可權,一般就是定位功能、攝像頭功能。怎麼知道設定項是哪個呢?其實命名很清楚了,camera(相機)、capture_audio_output(捕獲音訊輸出),然後再到uniapp官網上搜尋確認一下會保險一點
原生打包太麻煩了,直接使用雲打包
然後把證書填一填,證書生成教學
注意:
1、快速安心打包可能有問題,用傳統打包
2、注意儲存好證書跟密碼,最好上傳到git
3、ios的還得申請ios的開發賬號,教學
4、其實打包面板上就有“如何生成證書”的按鈕,教學就在裡面
5、包名很重要,不能隨便改的,一開始就要起好名字
既然用uniapp,那作者肯定是用vue的了
官網提供了cdn,可以自己下載下來放到本地或者自己公司的cdn
<script src="static/js/uniapp-sdk.js"></script>
因為是整個app就是一個殼子套了h5,所以後退按鈕就會存在退不出頁面的問題,所以需要用uniapp-sdk來呼叫原生的後退方法
作者自己寫個簡單的路由控制
const control = { // 在這些頁面上後退按鈕點兩次會退出app homePaths: ['/index','/login'], state: [], vueObj: null, init(vueObj){ this.vueObj = vueObj; this.addListener(); return this; }, // 判斷是否首頁(需要後退能退出app的頁面) isHome(path) { return this.homePaths.includes(path); }, // 在beforeEnter裡面加上它,把路由狀態儲存起來 pushState(path) { if(path!==this.state[this.state.length-1]){ this.state.push(path); } }, // 頁面在後退的地方呼叫它 back() { // 在首頁等需要退出app的地方直接後退 if(this.isHome(this.vueObj.$route.path)){ window.uni.navigateBack(); return } // 如果在非app環境重新整理了頁面 if(this.state.length){ // 自己的路由狀態儲存 this.state.pop(); // 這裡這麼寫是因為有些手機後退,頁面狀態會很奇怪,所有即使直接push上一個頁面進來 this.vueObj.$router.push({ path: this.state[this.state.length-1] }); } else { history.go(-1); } }, // 監聽後退按鈕 addListener(){ // 本地開發的時候不用監聽後退 if(typeof window.plus === 'undefined'){ console.log("當前不是app環境"); return; } const _this = this; document.addEventListener('UniAppJSBridgeReady', function() { var webview = window.plus.webview.currentWebview(); window.plus.key.addEventListener('backbutton', function() { webview.canBack(function(e) { if (e.canBack) { _this.back(); } else { window.uni.navigateBack(); } }) }); }) } }; export default control;
使用自己的路由控制
在vue的main.js中注入
import Vue from 'vue'; import VueRouter from 'vue-router'; import HistoryCtrl from "static/js/history-ctrl"; const router = new VueRouter({ routes: routerConfig }); router.beforeEach(async (to, from, next) => { // 自己的路由 HistoryCtrl.pushState(to.path); next(); }); const vueObj = new Vue({ el: "#app", router, store }); // 把自己做的前進後退掛載到vue裡面方便呼叫 Vue.prototype.$historyctrl = HistoryCtrl.init(vueObj); // 解決彈窗遮罩滑動穿透的問題 document.querySelector('body').addEventListener('touchmove', function(e) { e.preventDefault(); })
在頁面中只要使用後退的時候
this.$historyctrl.back();
說實話這麼做的app就不適合上架,太low了,基本上就是發包做給客戶私用的。
如果要上架,需要到每個手機廠商上都註冊企業開發者。上傳營業執照是最基礎的,有些要法人身份證,尤其是vivo最噁心,需要法人手持身份證,所以只適合很小的公司,有點規模的公司只能是另想辦法了,所以我們在看到一些app的開發商的時候,經常是一個不知名的公司(你懂的)。
這裡只是忍不住吐槽一下,上架照著各個手機廠商的教學操作就行,傻瓜式操作。
到此這篇關於利用uni-app開發App的文章就介紹到這了,更多相關uni-app開發App內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45