整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          為什么選擇HTML5Plus這《土土》的技術

          改造一個項目上 Google Play 與 App Store 時候,選擇了 H5+,就是數字天堂、UniAPP、HBuilder 那家的技術方案。

          這里總結下原因分享給大家做個參考,同時把相關的坑也跟大家說下,希望可以在某個時候幫到各位。

          背景說明

          選擇這個方案原因后來想想其實很簡單,就是這個應用是先有了 H5 版本,即移動端瀏覽器版本,然后想要復刻到 APP 端,在應用市場售賣。

          請注意,“先有 H5 版本”,然后想要轉成APP,不是從零開始哦。

          選型與說明

          其實參考的技術方案有很多,比如 React Native(Taro),Vue(UniAPP),甚至是 ionic、NativeScript 都簡單試過,當然還有類似的 Cordova。

          其實像 React Native(Taro)、Vue(UniAPP)以及 NativeScript 被砍掉其實很簡單,背景就決定除非完全重構,否則這幾個方案就是浪費生命,幾乎等于重寫一遍。這么說的原因有二:

          1、H5 版本有的情況下,不論是 DOM 寫法,還是虛擬 DOM 的組件,都是不通用的,比如你無法把 div 直接當做 view 來用,同時也不能將 button 當做 button 用……

          2、H5 的 API 與移動端不通用,比如 video 的 API,在 H5 與移動端根本就是兩個東西。

          然后就是 ionic 與 Cordova 的排除原因,很簡單:文檔與環境。

          1、ionic 與 Cordova 的文檔在國內網絡環境下不好找,出問題很難搞,尤其大概率我這個玩意兒要寫插件……我都寫插件了,那干脆上 OC 和 Java 算了。

          2、再就是環境,沒錯,這倆都需要 XCode 與 Android Studio 在你的設備上。雖說我是都有,但是我的目的很單純,就是把 H5 套殼啊,費那么大勁干嘛?一點都不環保。

          剩下我還知道且用過的就是 html5plus 與 apicloud 了,后者已經賣身就算了,只剩下 html5plus。

          其實吧,這個“土土”的,還是意外的好用的。

          關于過程中的坑分享

          這玩意兒怎么用就不介紹了,基本有手就能用。

          下載——創建5+項目——把 H5 代碼整進去——運行即可。

          這里著重說說遇到的坑。

          對了,先看下原來的 H5 效果,避免不知道是干嘛的。

          簡單來說,就是通過瀏覽器(或 APP 內置瀏覽器)加載 3D 模型,同時調用攝像頭的圖像,將 3D 模型與攝像頭的拍攝一起繪制出一張圖片,用來演示用。比如做工程的工程模型,在現場比劃比劃就可以大概看出來效果,不需要把場景也建模了。嗯,大概就這么個東西。

          H5 端的技術就是 three.js + video + 攝像頭,比較簡單,安卓瀏覽器兼容性良好,蘋果腎8沒問題,其他劉海設備沒測(后面打包成 APP 發現有點問題)。

          好了,可以說問題了:

          1、瀏覽器可以直接從 a 標簽下載圖片,APP 不行,需要解決授權問題。

          2、蘋果設備默認的 video 層級問題。

          3、iOS 設備在 APP 內 video 自動播放權限問題。

          4、iOS 設備加載本地路徑文件問題。

          上面幾個是比較坑的,就是那種想不到卻發生的……

          問題1,這個需要把原本 a 標簽下載的 base64 內容,通過原生的 bitmap 進行轉換,最終再將 bitmap 存到相冊。

          問題2,先說問題是啥樣的,就是 iOS 會把 video 全屏,且層級賊高,與上面圖完全不同,就只能看到一個帶有“直播”字樣的 video。解決方案很簡單,給 video 標簽添加“webkit-playsinline playsinline”屬性,即可要求同層渲染。

          問題3,這個就是老生常談的問題了,屬于想不到,但是遇到有會“果然如此”的問題。沒啥好辦法,不用原生化處理,就只能產品層面變更,所以給加上了“播放”與“停止”的按鈕……

          問題4,這個最粗暴,直接把本地地址全部換成遠程 URL 就好了,因為本來就是讓用戶自己傳遠程 URL 的,之前是想要本地演示加載快,所以用了本地地址。

          還有就是一些具體的代碼怎么寫,比如如何獲取 Android 與 iOS 的權限狀態與申請權限,這種百度搜下就有了。

          請注意,還真得用百度……“土土”的,國內還得是百度。

          總結

          其實現在用 H5 開發一些東西還是很簡單,畢竟很多功能 H5 基本都能實現了(不考慮兼容性的話),可以看下這個網站,我比較喜歡去,可以定期學習新東西,強烈推薦收藏:What Web Can Do Today

          別的沒了,歡迎大家溝通方案,我是被坑的挺難受的,尤其是 iOS……


          一階段:
          HTML+CSS:
          HTML進階、CSS進階、div+css布局、HTML+css整站開發、
          JavaScript基礎:
          Js基礎教程、js內置對象常用方法、常見DOM樹操作大全、ECMAscript、DOM、BOM、定時器和焦點圖。
          JS基本特效:
          常見特效、例如:tab、導航、整頁滾動、輪播圖、JS制作幻燈片、彈出層、手風琴菜單、瀑布流布局、滾動事件、滾差視圖。
          JS高級特征:
          正則表達式、排序算法、遞歸算法、閉包、函數節流、作用域鏈、基于距離運動框架、面向對象基礎、
          JQuery:基礎使用
          懸著器、DOM操作、特效和動畫、方法鏈、拖拽、變形、JQueryUI組件基本使用。

          第二階段:
          HTML5和移動Web開發
          HTML5:
          HTML5新語義標簽、HTML5表單、音頻和視頻、離線和本地存儲、SVG、WebSocket、Canvas.
          CSS3:
          CSS3新選擇器、偽元素、臉色表示法、邊框、陰影、background系列屬性改變、Transition、動畫、景深和深透、3D效果制作、Velocity.js框架、元素進場、出場策略、炫酷CSS3網頁制作。
          Bootstrap:
          響應式概念、媒體查詢、響應式網站制作、刪格系統、刪格系統原理、Bootstrap常用模板、LESS和SASS。
          移動Web開發:
          跨終端WEB和主流設備簡介、視口、流式布局、彈性盒子、rem、移動終端JavaScript事件、手機中常見JS效果制作、Zepto.js、手機聚劃算頁面、手機滾屏。

          第三階段:
          HTTP服務和AJAX編程
          WEB服務器基礎:
          服務器基礎知識、Apache服務器和其他WEB服務器介紹、Apache服務器搭建、HTTP介紹。
          PHP基礎:
          PHP基礎語法、使用PHP處理簡單的GET或者POST請求、
          AJAX上篇:
          Ajax簡介和異步的概念、Ajax框架的封裝、XMLHttpRequest對象詳細介紹方法、兼容性處理方法、Ajax框架的封裝、Ajax中緩存問題、XML介紹和使用。
          AJAX下篇:
          JSON和JSON解析、數據綁定和模板技術、JSONP、跨域技術、圖片預讀取和lazy-load技術、JQuery框架中的AjaxAPI、使用Ajax實現爆布流案例額。

          第四階段:
          面向對象進階
          面向對象終極篇:
          從內存角度到理解JS面向對象、基本類型、復雜類型、原型鏈、ES6中的面向對象、屬性讀寫權限、設置器、訪問器。
          面向對象三大特征:
          繼承性、多態性、封裝性、接口。
          設計模式:
          面向對象編程思維、單例模式、工廠模式、策略模式、觀察者模式、模板方法模式、代理模式、裝飾者模式、適配器模式、面向切面編程。

          第五階段:
          封裝一個屬于自己的框架
          框架封裝基礎:
          事件流、冒泡、捕獲、事件對象、事件框架、選擇框架。
          框架封裝中級:
          運動原理、單物體運動框架、多物體運動框架、運動框架面向對象封裝。
          框架封裝高級和補充:
          JQuery框架雛形、可擴展性、模塊化、封裝屬于傳智自己的框架。

          第六階段:
          模塊化組件開發
          面向組件編程:
          面向組件編程的方式、面向組件編程的實現原理、面向組件編程實戰、基于組件化思想開發網站應用程序。
          面向模塊編程:
          AMD設計規范、CMD設計規范、RequireJS,LoadJS、淘寶的SeaJS。

          第七階段:
          主流的流行框架
          Web開發工作流:
          GIT/SVN、Yeoman腳手架、NPM/Bower依賴管理工具、Grunt/Gulp/Webpack。
          MVC/MVVM/MVW框架:
          Angular.js、Backbone.js、Knockout/Ember。
          常用庫:
          React.js、Vue.js、Zepto.js。

          第八階段:
          HTML5原生移動應用開發
          Cordova:
          WebApp/NativeApp/HybirdApp簡介、Cordova簡介、與PhoneGap之間的關系、開發環境搭建、Cordova實戰(創建項目,配置,編譯,調試,部署發布)。
          Ionic:
          Ionic簡介和同類對比、模板項目解析、常見組件及使用、結合Angular構建APP、常見效果(下拉刷新,上拉加載,側滑導航,選項卡)。
          ReactNative:
          ReactNative簡介、ReactNative環境配置、創建項目,配置,編譯,調試,部署發布、原生模塊和UI組件、原生常用API。
          HTML5+:
          HTML5+中國產業聯盟、HTML5PlusRuntime環境、HBuilder開發工具、MUI框架、H5+開發和部署。

          第九階段:
          Node.js全棧開發:
          快速入門:
          Node.js發展、生態圈、Io.js、Linux/Windows/OSX環境配置、REPL環境和控制臺程序、異步編程,非阻塞I/O、模塊概念,模塊管理工具、開發流程,調試,測試。
          核心模塊和對象:
          全局對象global,process,console,util、事件驅動,事件發射器、加密解密,路徑操作,序列化和反序列化、文件流操作、HTTP服務端與客戶端。
          Web開發基礎:
          HTTP協議,請求響應處理過程、關系型數據庫操作和數據訪問、非關系型數據庫操作和數據訪問、原生的Node.js開發Web應用程序、Web開發工作流、Node.js開發Blog案例。
          快速開發框架:
          Express簡介+MVC簡介、Express常用API、Express路由模塊、Jade/Ejs模板引擎、使用Express重構Blog案例、Koa等其他常見MVC框架。
          希望對您有所幫助!~

          lus.runtime.openURL()

          http://www.html5plus.org/doc/zh_cn/runtime.html

          打開第三方程序

          plus.runtime.openURL( url, errorCB, identity ); 
          url: ( String ) 必選 要打開的URL地址
          字符串類型,各平臺支持的地址類型存在差異,參考平臺URL支持表。
          errorCB: ( OpenErrorCallback ) 可選 打開URL地址失敗的回調
          打開指定URL地址失敗時回調,并返回失敗信息。
          identity: ( String ) 可選 指定打開URL地址的程序名稱
          在iOS平臺此參數被忽略,在Android平臺為程序包名,如果指定的包名不存在,則打開URL地址失敗。
          <template>  
                  <view>  
                      <button class="button" type="primary" @click="open(0)">使用第三方程序打開指定URL</button>  
                  </view>  
          </template> 
          <script>  
          export default {  
              data() {  
                  return {  
                      url: 'https://uniapp.dcloud.io/'  
                  };  
              },  
              onLoad(op) {},  
              methods: {  
                  open(types) {  
                          plus.runtime.openURL(this.url, function(res) {  
                              console.log(res);  
                          });  
                  }  
              }  
          };  
          </script>  

          調用第三方程序

          plus.runtime.launchApplication( appInf, errorCB );

          appInf: ( ApplicationInf ) 必選 要啟動第三方程序的描述信息

          errorCB: ( LaunchErrorCallback ) 必選 啟動第三方程序操作失敗的回調函數
          啟動第三方程序失敗時回調,并返回失敗信息。

           <template>  
                  <view>  
                      <button class="button" type="primary" @click="launchApp">打開淘寶</button>  
                  </view>  
           </template> 
          <script>  
          export default {  
              data() {  
                  return {  
                      url: 'https://uniapp.dcloud.io/'  
                  };  
              },  
              onLoad(op) {},  
              methods: {  
                  launchApp() {  
                      let _this = this;  
                      // 判斷平臺  
                      if (plus.os.name == 'Android') {  
                          plus.runtime.launchApplication(  
                              {  
                                  pname: 'com.taobao.taobao'  
                              },  
                              function(e) {  
                                  console.log('Open system default browser failed: ' + e.message);  
                              }  
                          );  
                      } else if (plus.os.name == 'iOS') {  
                          plus.runtime.launchApplication({ action: 'taobao://' }, function(e) {  
                              console.log('Open system default browser failed: ' + e.message);  
                          });  
                      }  
          
                  }  
              }  
          };  
          </script>  

          常用URLscheme

          [  
              // 只在 ios 中生效  
              {  
                  name: 'App Store',  
                  scheme: 'itms-apps://'  
              },  
              {  
                  name: '支付寶',  
                  pname: 'com.eg.android.AlipayGphone',  
                  scheme: 'alipay://'  
              },  
              {  
                  name: '淘寶',  
                  pname: 'com.taobao.taobao',  
                  scheme: 'taobao://'  
              },  
              {  
                  name: 'QQ',  
                  pname: 'com.tencent.mobileqq',  
                  scheme: 'mqq://'  
              },  
              {  
                  name: '微信',  
                  pname: 'com.tencent.mm',  
                  scheme: 'weixin://'  
              },  
              {  
                  name: '京東',  
                  pname: 'com.jingdong.app.mall',  
                  scheme: 'openApp.jdMobile://'  
              },  
              {  
                  name: '新浪微博',  
                  pname: 'com.sina.weibo',  
                  scheme: 'sinaweibo://'  
              },  
              {  
                  name: '優酷',  
                  pname: 'com.youku.phone',  
                  scheme: 'youku://'  
              }  
          ]  

          例子


          主站蜘蛛池模板: 日韩一区二区三区在线观看| 亚洲性无码一区二区三区| 无码AⅤ精品一区二区三区| 好爽毛片一区二区三区四| 久久精品一区二区三区日韩| 午夜视频久久久久一区 | 一区二区三区高清| 日本一区高清视频| 一区二区亚洲精品精华液| 无码AV天堂一区二区三区| 美女视频免费看一区二区| 国产色欲AV一区二区三区| 另类ts人妖一区二区三区| 精品国产一区二区三区麻豆| 少妇激情一区二区三区视频 | 国产福利一区二区三区视频在线| 精品国产一区二区三区2021| 日本视频一区二区三区| 四虎精品亚洲一区二区三区| 国产三级一区二区三区| 内射白浆一区二区在线观看| 无码人妻啪啪一区二区| 国产精品视频一区| 国产福利一区视频| 一区免费在线观看| 日本一区二区三区高清| 亚洲乱码国产一区三区| 久久一本一区二区三区| 精品一区二区视频在线观看| 国产精品一区视频| 国产在线一区二区三区av| 一区二区三区免费在线观看| 一区二区三区在线观看视频| 亚洲熟女一区二区三区| 精品人妻码一区二区三区 | 国内精品一区二区三区在线观看| 精品国产一区在线观看 | 国产精品丝袜一区二区三区 | 国产一区二区三区美女| 无码毛片一区二区三区中文字幕| 国产福利电影一区二区三区久久老子无码午夜伦不 |