混合開發javascript
1、 UIWebView和JavaScript之間是怎麼交互的?html
UlWebView是i〇S SDK中渲染網面的控件,在顯示網頁的時候,咱們能夠hack網頁 而後顯示想顯示的內容。其中就要用至JavaScript的知識,而UlWebView與javascript交互的 方法就是 stringByEvaluatingJavaScriptFromString:前端
有了這個方法咱們能夠經過objc調用javascript,能夠注入javascript。java
UIWebView是iOS SDK中渲染網面的控件,在顯示網頁的時候,咱們能夠hack網頁 而後顯示想顯示的內容。其中就要用至JavaScript的知識,而UIWebView與javascript交互的 方法就是stringByEvaluatingJavaScriptFromString,有了這個方法咱們能夠經過objc調用 javascript,能夠注入 javascriptandroid
Js調用〇C方法原理就是利用UIWebView重定向請求,傳一些命令到咱們的 UIWebView,在UIWebView的delegate的方法中接收這些命令,並根據命令執行相應的objc 方法。這樣就至關於在javascript中調用objc的方法。ios
在android中,咱們有固有組件webview,通過設置可讓它支持咱們的js的渲染,然 後在代碼中設置(WebViewClient/WebChromeClient)讓應用跳轉頁面時在本webview中跳 轉,經過webview.loadurl (String str)方法能夠在須要的地方加載咱們前端的頁面或者調用 前端所定義的方法(wv.loadUrl("javascript:sendDataToAndroid('我是來自js的呦,你看到了 嗎')");),咱們再經過JavascriptInterface接口設置咱們前端和android通信的標識,git
wv.addJavascriptInterface(new MJavascriptInterface(getApplicationContext()), "WebViewFunc");web
這樣前端就能夠在頁面上調用咱們的方法了,funl方法是在android中定義的 Window.WebViewFunc.fun1 ();編程
總之,前端和android或者ios進行結合開發,咱們稱之爲混合開發,原理就是在原生 的開發語言中,咱們提供了一個組件webview,這個組件就是咱們的原生語言的瀏覽器,但 是咱們得自行設置讓其可以完美支持咱們的應用,須要設置對應的標識,而後鏈接起來,我 們稱之爲 JavascriptInterfac。api
2、 混合開發橋接api是怎麼調用的,須要引入類庫嘛? 調用的對象是什麼?
Hybrid框架結構
HyBrid App = H5 App + Native 框架
H5App用來實現功能邏輯和頁面渲染 Native框架提供WebView和設備接口供H5調用
方案一重混合應用,在開發原生應用的基礎上,嵌入WebView可是總體的架構使用 原生應用提供,通常這樣的開發由Native開發人員和Web前端開發人員組成。Native開發人
員會寫好基本的架構以及API讓Web開發人員開發界面以及大部分的渲染。保證到交互設 計,以及開發都有一個比較折中的效果出來,優化得好也會有很棒的效果。
Hybrid App技術發展的早期,Web的運行性能成爲主要瓶頸!
爲解決性能問題Hybrid App走向‘‘重混」。
經過多WebView:實現流暢的多頁加載和專場動畫。
使用Navtive UI組件:框架、菜單、日期等。
‘‘重混」的優缺點 優勢:
一提高了運行性能 一加強了交互體驗
缺點一
一Web和Native技術交叉混雜 一須要同時掌握Web和Native技術,學習難度增長 一一個頁面有Web組件也有Native組件,編程調試困難
須要引入各自須要的各類依賴工具
方案二:輕混合應用,使用PhoneGap、AppCan之類的中間件,以WebView做爲用 戶界面層,以Javascript做爲基本邏輯,以及和中間件通信,再由中間件訪問底層API的方 式,進行應用開發。這種架構通常會很是依賴WebView層的性能。
隨着時代的發展,手機硬件、瀏覽器技術、無線網絡技術都獲得了大幅的提高,H5已經可 以支持複雜應用,並擁有良好的運行性能。使用輕混方案的App也愈來愈多。
目前咱們要學習的Hybrid App開發就是方案二,使用H5+Js+Native框架開發當前輕 混合應用。
Phonegap 引入phonegap.js 或者 cordova.js,對象爲 navigator Dcloud引入引入mui.js或者其餘的js組件,對象爲plus apiloud引入各類第三方插件,對象爲api
順變提一下,2012年8月,微信公衆平臺的上線,從新定義了移動應用:移動應用 =Iphone App + Android App + 微信 App
3、 說一下你對支付,推送(遠程,本地)的理解
消息的推送主要有兩種:
一種是本地推送,主要應用在系統的工具中,例如:鬧鐘,生日提醒等;實現本地推 送須要如下三個步驟,
一種是遠程消息推送,主要應用聯網設備的信息推送,例如:郵件,各類軟件的廣告 或優惠信息的推送。遠程推送比較複雜,須要使用開發者帳號進行申請證書,得到實
現推送功能的配置文件,因此想要實現遠程推送功能,必需要有開發者帳號而且生成 配置文件
參考網址:http://blog.csdn.net/u014642572/article/details/26857717
遠程推送流程圖以下
4、 什麼是代理和通知,寫一下他們基本的實現方式
代理:「一對一」,對同一個協議,一個對象只能設置一個代理delegate
六個步驟:
1.聲明一個協議,定義代理方法
2.遵循協議
3.設置一個代理對象
4.調用代理方法
5.給代理賦值
6.實現代理方法
注意事項:
1.單例對象不能用代理;
2.代理執行協議方法時要使用respondsToSelector檢查其代理是否符合
3.協議(檢查對象可否響應指定的消息),以免代理在回調時由於沒有實現方法而形成程序崩潰
使用場景:
公共接口,方法較多也選擇用delegate進行解耦 iOS最經常使用tableViewDelegate, textViewDelegate iOS有不少例子好比經常使用的網絡庫AFNetwork,ASIHTTP庫, UlAlertView 類。
通知:一對一 一對多 傳值
四個步驟:
1.發送通知
2.建立監聽者
3.接收通知
4.移除監聽者
使用場景:
1一不少控制器都須要知道一個事件,應該用通知;
2 一相隔多層的兩個控制器之間跳轉
注意事項:
1.一旦接收消息的對象多了,就難以控制了,可能有你不但願的對象接收了消息並作了處理
2.建立了觀察者,在dealloc裏面必定要移除;
Block : Block是i〇S4.0+和Mac OS X 10.6+引進的對C語言的擴展,用來實現匿名函數的特性。Blocks語法塊代碼以閉包得形式將各類內容進行傳遞,能夠是代碼,能夠是數組 無所不能。閉包就是可以讀取其它函數內部變量的函數。就是在一段請求連續代碼中能夠看 到調用參數(如發送請求)和響應結果。因此採用Block技術可以抽象出不少共用函數,提 高了代碼的可讀性,可維護性,封裝性。
使用場景:
—: 動畫
二:數據請求回調
三:枚舉回調
四:多線程gcd
注意事項:Iblock須要注意防止循環引用
參考網址:http://www.cnblogs.com/wenboliu/articles/5422033.html
5、 UIViewController 的生命週期
1.經過alloc init分配內存,初始化controller.
2.loadView (loadView方法默認實現[super loadView]
若是在初始化controller吋指定了xib文件名,就會根據傳入的xib文件名加載對應的xib文件,若是 沒傳xib文件名,默認會加載跟controller同名的xib文件,若是沒找到相關聯的xib文件,就會建立一個空白的UIView,而後賦給controller的view)
3.viewDidLoad (當loadView建立完view以後,此吋view已經完成加載了,會調用 viewDidLoad方法;通常我會在這裏作界面上的初始化操做,好比添加按鈕,子視圖,等等.)
4.viewWillAppear (當view在load完以後,將要顯示在屏幕以前會調用這個方法,在重寫這些方法吋候最好先調用一下系統的方法以後在作操做。)
5.viewDidAppear (當view已經在屏幕上顯示出來以後,會調用這個方法,當一個視圖被移除屏幕而且銷燬的吋候)
6.viewWillDisappear (當視圖將要從屏幕上移除吋候調用 )
7.viewDidDisappear (當視圖已經從屏幕上移除吋候調用 )
8.Dealloc (view被銷燬吋候調用,若是是手動管理內存的話,須要釋放掉以前在init和 viewDidLoad中分配的內存(相似alloc,new,copy) ; dealloc方法不能甶咱們主動調用,必須等引用計數爲0吋候甶系統調用.)
9.參考網址: http://www.cnblogs.eom/wujy/p/5822329.html
1、 如何調用原生的接口?
首先你得選擇一個合適的框架做爲本身的基礎,以Dcloud爲例,頁面中必定要存在一個事件,plusready, plusready其實是原生將橋接js注入到頁面中的容器,進行任何方法 調用的時候都在plusready以後。全部api方法所有都託管在了一個plus對象中。使用語法 plus.模塊名稱.具體方法(參數,callback)
當咱們須要打開系統相冊的時候,能夠這樣作:
Gallery模塊管理系統相冊,支持從相冊中選擇圖片或視頻文件、保存圖片或視頻文 件到相冊等功能。經過plus.gallery獲取相冊管理對象。打開相冊plus.gallery.pick進行打開,選取多個圖片{multiple:true,maximum:9,system:false}
2、 微信支付怎麼作?說說流程
1.申請微信公衆號及支付功能申請:根據公衆號申請流程申請便可。
2.獲取商戶支付配置信息及支付測試配置:
支付受權目錄最多能夠配置三個域名,測試受權目錄只能夠一個,這裏須要 注意的是域名大小寫必需要網站URL—致,不然會沒法經過受權,提示支付請求的 URL不合法。另外,測試支付的微信號必須加到測試白名單,不然沒法進行支付測 試。
3.H5頁面發起支付請求,請求生成支付訂單,獲取用戶受權(獲取用戶的openid)
4.調用統一下單API,生成預付單
5.生成JSAPI頁面調用的支付參數並簽名,注意時間戳timeStamp是32位字符串
6.返回支付參數prepay—id,paySign參數的html文本給前端。
7.微信瀏覽器自動調起支付JSAPI接口支付,提示用戶輸入密碼。
8.確認支付,輸入密碼,提交支付。
9.步通知商戶支付結果,商戶收到通知返回確認信息。
10.返回支付結果,併發微信消息提示。
11.展現支付信息給用戶,跳轉到支付結果頁面。
3、 混合開發的注意點
加強WebView : 原生WebView基本是PC平臺瀏覽器內核的移植,但對於移動場景並不徹底適合,各類硬件API得不到HTML5原生支持。所以對於WebView的種種Hack、加強應運而生,甚至出現了基於加強WebView提供第三方服務的。
路由:應用內跳轉因爲加入了 WebView而變得複雜起來,同時因爲組件化、模塊化帶來的問 題,路由也成爲人們討論的重點。
緩存:移動網絡條件差,爲了用戶體驗,必需要作資源緩存和預加載。
通訊:即HTML5和Native之間的通訊。利用系統提供的橋接API能夠實現,不過在應用上還 有着一些坑點和安全問題。
4、 說說你對手機平臺的安裝包後綴的理解
Android:**apk
Ios:**ipa
Windows: wp7 wp8的是xap wp8.1之後用8.1開發的是appx