zoukankan      html  css  js  c++  java
  • 混合开发

    混合开发

    一、 UIWebView和JavaScript之间是怎么交互的?

    UlWebView是i〇S SDK中渲染网面的控件,在显示网页的时候,我们可以hack网页 然后显示想显示的内容。其中就要用至JavaScript的知识,而UlWebView与javascript交互的 方法就是 stringByEvaluatingJavaScriptFromString:

    有了这个方法我们可以通过objc调用javascript,可以注入javascript。

    UIWebView是iOS SDK中渲染网面的控件,在显示网页的时候,我们可以hack网页 然后显示想显示的内容。其中就要用至JavaScript的知识,而UIWebView与javascript交互的 方法就是stringByEvaluatingJavaScriptFromString,有了这个方法我们可以通过objc调用 javascript,可以注入 javascript

    Js调用〇C方法原理就是利用UIWebView重定向请求,传一些命令到我们的 UIWebView,在UIWebView的delegate的方法中接收这些命令,并根据命令执行相应的objc 方法。这样就相当于在javascript中调用objc的方法。

    在android中,我们有固有组件webview,经过设置可以让它支持我们的js的渲染,然 后在代码中设置(WebViewClient/WebChromeClient)让应用跳转页面时在本webview中跳 转,通过webview.loadurl (String str)方法可以在需要的地方加载我们前端的页面或者调用 前端所定义的方法(wv.loadUrl("javascript:sendDataToAndroid('我是来自js的呦,你看到了 吗')");),我们再通过JavascriptInterface接口设置我们前端和android通讯的标识,

    wv.addJavascriptInterface(new MJavascriptInterface(getApplicationContext()), "WebViewFunc");

    这样前端就可以在页面上调用我们的方法了,funl方法是在android中定义的 Window.WebViewFunc.fun1 ();

    总之,前端和android或者ios进行结合开发,我们称之为混合开发,原理就是在原生 的开发语言中,我们提供了一个组件webview,这个组件就是我们的原生语言的浏览器,但 是我们得自行设置让其能够完美支持我们的应用,需要设置对应的标识,然后连接起来,我 们称之为 JavascriptInterfac。

    二、 混合开发桥接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

    三、 说一下你对支付,推送(远程,本地)的理解

    消息的推送主要有两种:

    一种是本地推送,主要应用在系统的工具中,例如:闹钟,生日提醒等;实现本地推 送需要以下三个步骤,

    1. 实例化一个本地推送对象
    2. 设置通知对象的各个属性
    3. 添加本地推送对象

    一种是远程消息推送,主要应用联网设备的信息推送,例如:邮件,各种软件的广告 或优惠信息的推送。远程推送比较复杂,需要使用开发者账号进行申请证书,获得实

    现推送功能的配置文件,所以想要实现远程推送功能,必须要有开发者账号并且生成 配置文件

    1. 完成证书的申请和Xcode的配置
    2. 在Demo中注册远程服务对象,并设置其代理
    3. 找一个简单的App服务器进行消息推送(推荐使用:PushMeBaby, gitup网站上就有)
    4. 运行 PushMeBaby

    参考网址:http://blog.csdn.net/u014642572/article/details/26857717

    远程推送流程图如下

     

     四、 什么是代理和通知,写一下他们基本的实现方式

    代理:“一对一”,对同一个协议,一个对象只能设置一个代理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

    五、 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

    一、 如何调用原生的接口?

    首先你得选择一个合适的框架作为自己的基础,以Dcloud为例,页面中一定要存在一个事件,plusready, plusready实际上是原生将桥接js注入到页面中的容器,进行任何方法 调用的时候都在plusready之后。所有api方法全部都托管在了一个plus对象中。使用语法 plus.模块名称.具体方法(参数,callback)

    当我们需要打开系统相册的时候,可以这样做:

    Gallery模块管理系统相册,支持从相册中选择图片或视频文件、保存图片或视频文 件到相册等功能。通过plus.gallery获取相册管理对象。打开相册plus.gallery.pick进行打开,选取多个图片{multiple:true,maximum:9,system:false}

    二、 微信支付怎么做?说说流程

    1.申请微信公众号及支付功能申请:根据公众号申请流程申请即可。

    2.获取商户支付配置信息及支付测试配置:

    支付授权目录最多可以配置三个域名,测试授权目录只可以一个,这里需要 注意的是域名大小写必须要网站URL—致,否则会无法通过授权,提示支付请求的 URL不合法。另外,测试支付的微信号必须加到测试白名单,否则无法进行支付测 试。

    3.H5页面发起支付请求,请求生成支付订单,获取用户授权(获取用户的openid)

    4.调用统一下单API,生成预付单

    5.生成JSAPI页面调用的支付参数并签名,注意时间戳timeStamp是32位字符串

    6.返回支付参数prepay—id,paySign参数的html文本给前端。

    7.微信浏览器自动调起支付JSAPI接口支付,提示用户输入密码。

    8.确认支付,输入密码,提交支付。

    9.步通知商户支付结果,商户收到通知返回确认信息。

    10.返回支付结果,并发微信消息提示。

    11.展示支付信息给用户,跳转到支付结果页面。

    三、 混合开发的注意点

    增强WebView : 原生WebView基本是PC平台浏览器内核的移植,但对于移动场景并不完全适合,各种硬件API得不到HTML5原生支持。因此对于WebView的种种Hack、增强应运而生,甚至出现了基于增强WebView提供第三方服务的。

    路由:应用内跳转由于加入了 WebView而变得复杂起来,同时由于组件化、模块化带来的问 题,路由也成为人们讨论的重点。

    缓存:移动网络条件差,为了用户体验,必须要做资源缓存和预加载。

    通信:即HTML5和Native之间的通信。利用系统提供的桥接API可以实现,不过在应用上还 有着一些坑点和安全问题。

    四、 说说你对手机平台的安装包后缀的理解

    Android:**apk

    Ios:**ipa

    Windows:  wp7 wp8的是xap  wp8.1以后用8.1开发的是appx

  • 相关阅读:
    Java自定义注解(1)
    SpringMvc入门
    Nginx服务器简单配置
    EL和JSTL使用笔记
    JQuery笔记
    Java05 JDBC介绍及基本操作
    Java04 线程同步问题解决——线程锁(同步锁、互斥锁)
    web服务、正向代理、反向代理的一点理解
    java03 IO操作
    Docker05 Docker容器
  • 原文地址:https://www.cnblogs.com/fanlinqiang/p/7930829.html
Copyright © 2011-2022 走看看