`
反求诸己
  • 浏览: 543388 次
  • 性别: Icon_minigender_1
  • 来自: 湖南娄底
社区版块
存档分类
最新评论

转载:移动互联网服务客户端开发技巧 ( Webview及正则)

 
阅读更多

转载自:http://www.cnblogs.com/pengyingh/articles/2341067.html

 

随着微博、LBS 等移动互联网服务的火爆普及,越来越多的苹果开发者希望制作各网络服务的 iPhone 客户端。CocoaChina 会员 “qdvictory” 的《基于网络的客户端开发技巧》系列文章详细介绍了 iPhone 客户端应用的开发思路和注意事项,希望对苹果开发者们有所帮助。

    一、做一个程序之前,要明确你要做的是什么。这之间道道不少,不仅仅要实现功能,还要考虑到程序功能之间是如何链接,用户如何交互。在这个基础上,才能和 美工一起配合,把程序的设计做好,而仅仅的 UI,已经不能称得上是完整的设计了。利用 API 扩展是必需的,Open API 不是你自家的 API,所以肯定是有局限性的,如何将 API 与产品良好的结合,是重点,抓细节,是重点。每条微博就是一个少量信息,所以客户端要做的就是快,清楚,友好,稳定。

  • 快,不用说,加载速度快,浏览的速度快。
  • 清楚,UI 布局的可识别性,一个页面,不同的排版,字体的颜色,都将影响到用户看这个页面的速度。
  • 友好,不需要太炫的效果,也不需要很酷的动画,就算再简单的 UI,也足以满足用户的需求,就看你如何做。不要烂加,有必要再加。
  • 稳定,这个要好好说说了。客户端,毕竟不是单方面数据了,很有可能客户端缓存与数据库信息不统一,或者网络问题导致接收数据出错,这些都是需要做 处理,多 测试,否则 crash 很杯具。前几天同事给我看 Weico 在官方清空了短信息,然后再回来 weico 客户端,直接导致 weico 持续 crash,必须重装,不知目前修正没有。总得来说,多测试,尤其是在数据差异的方面。   

    二、就目前而言,主流的微博特效就不再多说了,以后有可能细讲,基本上都有开源的了。

    三、目前大多展示都是用的 tableview。这里就要多说说了。tableview 的使用方式有好多,下拉刷新,即可以将展示放到 tableview 的 subview 上,也可以放到 tableview cell 上,这 2 种有啥区别呢?目前没有发现实质上的区别,只是在计算的时候放在外面比较好算。
正常来说,展示的步骤为:

  • 访问api,获取数据
  • 将数据存入数据
  • 在 tableview 上展示数据,并载入相关的默认图片。(像新浪微博客户端是用的 Webview 来展示的图片,这个又可以叨叨一阵了,下次再说。。。)
  • 自己封装也好,用线程也罢,将下载的图片保存到本地,并刷新 tableview cell。这里又要注意2点:
        1、保存到本地的文件名,像这种公共数据,建议存放在同一文件夹中,像头像,可以以用户 id 为文件名存放,这样做多账号的时候可以直接利用到。关于与当前账号 有关的数据存于单独文件夹(例如以 dir_ID 为名的文件夹)。以当前账号为文件名我认为是不太安全的。像 weico,上次无意中发现,他的缓存都是用我的登录名,不知最新版本修改了没有。
        2、更新 cell 的时候,有不少方法是利用 path 和 tag 来确定修改哪个 imageview,button,但是当 tag 被占用时就相当郁闷,这时就要继承一个子类。所以我比较建议直接用 tableview cell 的 reload cell 方法来刷新,这样还可以刷新行高之类,相当有用。
  • 微博一般都是多行,sizeWithFont 确实比较慢,我能做的也只有在获取了数据之后把所有的行高算出来保存,不知有没有更好的方法会效率高一些。

    四、特色功能。想做出与众不同的产品,目前在我看来,只有特色功能。像微博的展示,lbs的签到,再怎么做,也已经大体定型,就算你做的再认真,也是别的 程序换一套皮肤,在我看来,投入成本还是换一个方面的好。想一些实用的功能,扩展一下,在完成基本功能的同时,可以给用户一个使用自己程序的理由。

    五、照片处理特效。现在基本都是用开源库,主流的开源库不说了,基本都是 C、C++的,只要能编译成功,基本没啥使用难度了。问题在于处理图片的效率上。

    六、安全性。像我们公司为了加强用户密码的安全性,特意买了SSL,为的就是让用户的账号更安全。而 Open API 使得我们没法控制,所以最好使用 oauth 认证,以及不要将用户的账号暴露在缓存之中,这些都会增加风险。

 

第二章:Webview及正则

    目前微博客户端基本都使用Webview,这篇就详细讲解一下使用利用Webview展示微博的技巧。当然,主要以代码为主。Demo暂时就不提供了。之前也有几篇博文提到相关的,这里简单总结一下。

    为什么要用webview来展示呢,就我目前的经验来看,为了文字链接图片混排比较方便。所以既然要混排,又不能让人觉得这是webview,首先就要禁止bounces,也就是边缘滚动。方法如下:

[(UIScrollView *)[[webview subviews] objectAtIndex:0] setBounces:NO];

    webview的各种复制,全选禁止方法:

document.documentElement.style.webkitTouchCallout = “none”; //禁止弹出菜单

 

document.documentElement.style.webkitUserSelect = “none”;//禁止选中

    具体代码可以看下

http://www.minroad.com/?p=275

http://www.minroad.com/?p=266

    webview使用起来注意的问题有:

  1. loadhtml相当慢,所以要做到良好的展示效果,想办法预加载吧。当然用JS也可以。
  2. 使用js的时候千万要外部导入js,不然会调试到头大都调试不好。。各种转义字符
  3. 对于iPhone4,记得图片尺寸要双倍。
  4. webview的html里面尽量用\”而不是’ 比如<img width=\”20\”>而不是<img width=’20′>

    下面说一下正则,将链接替换的方法,用的RegexKitLite:

- (NSString *)replacePersonLink:(NSString *)_str

 

{

NSString *regexString       = @"@\\b(\\w+)\\b";

NSString *replaceWithString = @"<a href=\"at:$1\">@$1</a>";

NSString *replacedString    = NULL;

replacedString = [_str stringByReplacingOccurrencesOfRegex:regexString withString:replaceWithString];

NSLog(@"%@",replacedString);

return replacedString;

}

    提取链接的方法:

NSString *linkString = [NSString stringWithFormat:@"%@ %@",[dic getWBText],[dic getWBRetweetedText]];

 

NSString *regexString  = @"\\bhttps?://[a-zA-Z0-9\\-.]+(?::(\\d+))?(?:(?:/[a-zA-Z0-9\\-._?,'+\\&%$=~*!():@\\\\]*)+)?";

NSArray *splitArray = [linkString componentsMatchedByRegex:regexString];

    解析一个字符串的方法

NSString *regexString  = @"<a href=\"([^>]+)\" rel=\"([^>]+)\">([^>]+)</a>";

NSDictionary *urlDictionary = [searchString dictionaryByMatchingRegex:regexString

withKeysAndCaptures:@"url", 1, @"followed",2,@"source",3, NULL];

if (![[urlDictionary allKeys] containsObject:@"source"]) {

NSString *regexString  = @"<a href=\"\" rel=\"([^>]+)\">([^>]+)</a>";

urlDictionary = [searchString dictionaryByMatchingRegex:regexString

withKeysAndCaptures:@"followed",1,@"source",2, NULL];

}

    source string为”<a href=\”http://t.sina.com.cn\” rel=\”nofollow\”>新浪微博</a>” 

    利用这些,基本可以完成微博上的需求。同时可以利用JS实现渐近渐现等效果,用CSS将布局处理的更合理。不会用CSS就td吧。

分享到:
评论

相关推荐

    DDoS 产业互联网安全观测:医疗行业安全风险分析 - webview.zip

    DDoS 产业互联网安全观测:医疗行业安全风险分析 - webview 访问管理 安全开发 渗透测试 防火墙 安全架构

    Android WebView中客户端与JavaScript的基本交互

    本文将详细讲解如何在Android的WebView中实现客户端(Java代码)与JavaScript的基本交互,使得两者能够相互调用方法,共享数据。 首先,我们需要在AndroidManifest.xml中为应用添加Internet权限,这是加载网络内容...

    android webview调用系统相机和图库

    android webview调用系统相机和图库支持5.0通过了小米2s(android5.0.2)小米4(android 4.4.4)还有LG的nexus(android 5.0)的测试,在三星GT-I9300I(android 4.3 在这款手机上测试的时候,拍照后有的时候在...

    com.google.android.webview

    android system webview 适配系统&gt;=5.0

    android 第三方webview cordova的集成使用

    这极大地扩展了WebView的能力,使得开发者可以用Web技术开发出具有原生性能和功能的移动应用。 **Cordova的优势** 1. **跨平台**:Cordova支持多种移动操作系统,包括Android、iOS、Windows Phone等。 2. **Web...

    android webview

    Android WebView 是一个内置组件,允许Android应用内嵌入并加载Web内容。在Android应用程序中,WebView是一个非常重要的组件,它使得开发者可以展示HTML、CSS和JavaScript等Web技术编写的页面,而无需离开应用本身。...

    webview Poc及检测

    在移动应用开发中,WebView组件是一个常见的元素,它允许开发者在原生应用内部加载和展示Web内容。WebView广泛应用于Android和iOS平台,使得混合式应用开发变得简单。然而,由于其本质是浏览器内核,因此也可能引入...

    android_webview

    android_webviewandroid_webviewandroid_webviewandroid_webviewandroid_webviewandroid_webviewandroid_webviewandroid_webviewandroid_webviewandroid_webviewandroid_webviewandroid_webviewandroid_webview...

    WebView2-20200512- WebView2Loader.dll.zip

    【WebView2Loader.dll详解】 WebView2 是微软推出的一款现代Web技术框架,用于在桌面应用程序中嵌入Web内容。它基于Chromium项目,提供了与最新Web标准兼容的浏览器内核,使得开发者可以在桌面应用中轻松集成网页...

    Android混合开发之webview的demo

    在Android应用开发中,WebView是一个非常重要的组件,它允许开发者在应用程序中嵌入网页内容,实现混合开发。WebView不仅能够加载HTML、CSS和JavaScript,还可以与Android原生代码进行交互,使得网页和应用间的沟通...

    Android Studio 开发的WebView 框架源码

    接下来,我们需要在Activity的Java代码(如`MainActivity.java`)中初始化并配置WebView: ```java import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; ...

    安卓webview的开发

    【安卓Webview的开发】 在当今的移动应用开发领域,Android Webview已经成为一个重要的组件,尤其对于那些希望利用HTML5、JavaScript以及CSS3技术来快速构建应用的开发者来说。Webview是Android系统中的一个原生...

    Android_WebView实例详解

    Android WebView 实例详解 Android WebView 是 Android 平台中一种特殊的组件,可以在应用程序中显示 web 页面。它基于 WebKit 内核浏览器,提供了一个可以在 Android 应用程序中嵌入网页浏览器的解决方案。 一、...

    com.google.android.webview.apk

    有些平板缺失加载webview所依赖的内核apk的资源文件,会导致应用加载webview报错。需要自己安装webview的apk。 webview全称叫做Android System WebView,它是Android生态系统的重要组成部分,也是Chrome浏览器的...

    GlobalWebInspect:为每个应用程序启用WebView远程检查器

    GlobalWebinspect 为所有iOS应用程序启用WebView检查器,需要越狱用法在首选项中启用WebInspector 构建并安装调整的THEOS_DEVICE_IP=localhost THEOS_DEVICE_PORT=2222 make package install 重新插入USB电缆并重新...

    Android中的WebView详细介绍

    Android中WebView的详细解释: 1. 概念: WebView(网络视图)能加载显示网页,可以将其视为一个浏览器。它使用了WebKit渲染引擎加载显示网页。 2. 使用方法: (1).实例化WebView组件: A.在Activity中实例化...

    WebViewGoogle

    WebViewGoogle设计用于与Android系统的WebView组件协同工作,特别是在Android 4.4(KitKat)及更高版本上。从Android 4.4开始,WebView作为一个单独的应用程序进行更新,这使得开发者能够通过Google Play服务来保持...

    Android WebView实现视频全屏

    在Android开发中,WebView是一个非常重要的组件,它允许我们在应用程序中内嵌网页内容,提供类似于浏览器的体验。本文将深入探讨如何在Android的WebView中实现HTML5视频的全屏播放功能,这对于创建丰富的多媒体应用...

    android开发实现的webview实例

    总的来说,Android的WebView实例是一个强大的工具,它不仅用于展示网页,还可以作为客户端与服务器交互的桥梁。在实际开发中,我们需要充分理解其工作原理,合理利用其特性,同时关注安全问题,以实现高效、安全的...

    WebView详解

    为了使应用能够通过`WebView`访问互联网及加载网页内容,必须在`AndroidManifest.xml`文件中添加以下权限: ```xml &lt;uses-permission android:name="android.permission.INTERNET" /&gt; ``` #### 类结构 `WebView`...

Global site tag (gtag.js) - Google Analytics