Month: 四月 2012

一个简单的基于PhoneGap的开源微博客户端

因为新浪云的一些变更,下边这种获取Token的方式已经不能用了,建议大家用新方案 https://github.com/qhm123/tinybo

 

有人说PhoneGap做不了复杂的东西,比如微博客户端。这话对,也不对。因为光是用PhoneGap的标准接口是没办法做OAuth认证的,页面转换几次就不知道跳到哪里了;但是别忘了,PhoneGap拥有强大的插件系统。在GitHub上的PhoneGap插件库中,就有Facebook之类的OAuth2插件。

从4月18日起,新浪移动云的打包器和调试器开始支持微博插件,这让微博客户端开发变得异常简单。

于是我做了一个特别简单的微博客户端(只有登录和读取Feed和@我),然后把它放到了GitHub上

先放个视频看看效果

这篇文章主要讲怎样把这个简单的客户端换成你的key,让它工作起来,然后你可以以它为基础,修改成你想要的各种客户端。

在继续之前,请更新你的云窗调试器到最新版本。(目前只支持Android,iOS版本测试中)

创建微博开放平台应用

首先进入微博开放平台,创建一个客户端应用。

填好基本信息后,就可以创建一个移动客户端应用了。

创建成功后,进入应用的【基本信息】页面,可以看到app key和app secret。

因为PhoneGap打出来的包很容易被人反向工程,找到里边的key,所以新浪移动云的微博插件里边不直接使用这两个key。

新开一个窗口,进入云窗key加密页面。(稍后这个页面会整合到SAE去)

输入appname,和微博应用【基本信息】页面的两个key值,可以得到新的两个key。把它们记下来。稍后会用到。

然后回到微博开放平台,进入应用的【高级设置】,在【回调地址】页面填上http://appname.sinaapp.com

这个步骤非常重要,很多同学都是因为忘了填写而导致授权失败。

三个必须的东西:

  1. 加密后的App Key
  2. 加密后的App Secret
  3. 填到应用高级信息里边的回调地址

创建SAE移动应用

进入SAE,创建一个移动应用,代码模板选择【默认模板】。

成功创建以后,代码目录会出现一个client文件夹。

获取代码

你可以通过git或者下载链接获取最新的Demo代码,然后打开js/app.js文件,将129行开始的内容换成前文中得到的对应的值。

修改完成后,将Demo代码传到SAE代码目录的client文件夹,然后你就可以通过【云窗调试器】进行调试了。

插件接口简介

这里简单的说下微博插件用法。微博插件在js中的对象为CDV.WB,它有6个方法,分别是:

  1. CDV.WB.init – 初始化
  2. CDV.WB.login – 登录
  3. CDV.WB.logout – 终止会话
  4. CDV.WB.get – get请求
  5. CDV.WB.post – post请求
  6. CDV.WB.upload – 带文件的post请求

详细的范例可以查看【简微】客户端中js/app.js。SAE的官方说明文档已经放出,点这里

 常见问题

1 如果点击登录按钮,没有出现loading… 提示信息的,请确认使用了本文里边提供的【云窗调试器】。其他地方的可能不是最新的,包括sae页面上的。

2 如果提示  /oauth2/authorize”, error_code: 10001, error: system error , 其实就是appkey和appsecret错误,请再次检查app.js中输入的加密后的appkey和appsecret,以及appname是否正确。

3 如果提示 invalid redirect url,是因为app.js中的回调地址和open.weibo.com的应用高级信息页面中的回调地址不一致。

4 如果提示 sorry  that page not exists ,也是因为回调地址的问题,记得要加 http://。

5 如果授权后进入微博列表页面,load后又跳回登录页面了,那是因为你的微博应用没通过审核只能用应用创建人的微博账号测试,要用别人的账号需要在open.weibo.com的应用高级信息页面添加测试用户。

 …

PhoneGap开发不可或缺的五件装备

PhoneGap是一种介于WebApp和NativeApp之间的解决方案,它为每种移动客户端提供一个Native的壳,这种壳里边包着一个Web应用。借助于壳,Web应用可以被安装,可以被发布到各大市场。同样的,借助于壳和设备之间的通信,壳内的Web应用可以轻松调用设备硬件。虽然目前想用PhoneGap开发商业应用还有很多的坑要填,但其跨平台和低学习成本的特性决定了未来它在移动互联网领域必有一席之地。

1 轻量级的JQuery兼容库

JQuery已经成长的得非常强大了,但在移动设备上有些臃肿。如果你的应用只运行在WebKit内核的机器上,那么我强烈建议你换用移动版本的JQuery兼容库。

ZeptoJQ.mobi都是专门为移动设备优化后的JQ兼容库。

 

Zepto我不是特别熟悉,JQ.mobi我用得比较多,官方提供的数据称,JQ.mobi比JQueryMobile快3倍以上。

相比于JQueryMobile悲催的定导航底导航固定功能,JQ.mobi也提供了自己的UI。虽然和JQM差不多丑,但不会出现万恶的导航栏闪动问题。如果你自己不想构建UI框架,那么还是推荐用JQ.mobi的UI库,换换配色和背景,也能看起来蛮专业的。

另外JQ.mobi还提供了一系列的插件,但是都没有提供文档 。里边的scroll插件不如iScroll4给力,模板插件还可以用。这里讲下用法。

要使用JQMobi的插件,只需要简单的用script载入对应的文件就行。

JQ.Mobi的模板来自这里(这个链接要从源代码中才能翻出来,藏那么好干嘛啊…)是一个使用%号进行标记的系统。

模板部分采用script标签包含:

从上边的例子中可以看到,这套模板可以轻松支持 if/for/else等语法;数组和对象也没有什么问题,可以满足绝大部分需求。

它采用$.tmpl函数将数据传入模板,得到渲染后的html。需要注意的地方是传数据时要以对象的方式来传,同时为传入的数据指定变量名。

2 滚动效果专家:iScroll4

虽然现在JQ.mobi已经解决了导航栏固定和滚动的问题,但是iScroll4依然是非常值得使用的。

在使用iScroll时有几个需要注意的地方。

首先,iScroll采用css的top和bottom值固定了顶导航条和底导航条的高度,可以修改css来调整。

其次,iScroll是静态的,就是说,它并没有随时查看scroll里边的内容是否增加,这就要求我们在动态加入内容后,显示调用scroll对象的refresh方法。

最后,iScroll4能很好的实现iOS用得很多的下拉刷新效果,这个页面上有完整的代码。

3 现代浏览器:Safari/Chrome

在手机浏览器上调试之前,先在电脑浏览器上开发会快很多,建议用safari或者Chrome。这东西虽然大家都有,但有些细节还是潜藏很深的。

比如用Chrome调试的时候你可能会遇到跨域的问题,只要在启动Chrome.exe时加上一个参数就可以了。

chrome.exe –disable-web-security

另外有些同学可能不知道,PhoneGap API页面上的LocalStorage和Indexed DB 其实是Html5的标准接口,所以Chrome和Safari中的自带的调试工具就能很好的管理。

打开Developer tools,选择 Resources Tab页就能看到数据库,本地存储等选项 。( 当初我找了好久Chrome的Sqlite管理插件…)

4 PhoneGap实时调试工具:云窗调试器

虽然有点夸张,但不少网友是用PhoneGap神器来形容它的。

本质上来讲,云窗调试器就是一个支持PhoneGap Javascript接口的移动浏览器。

它和新浪SAE的云平台紧密结合,需要用SAE账号登录,这样当你在SAE上创建一个移动应用后,就能直接在云窗调试器的应用列表页面看见。

点击应用名称后,就可以开始调试应用了。由于代码放置在SAE平台上,我一般用浏览器上的在线编辑器修改代码,Ctrl+S后直接在手机上看效果。

一次变更两秒看到最终结果,比起本地编译,差不多一次能节省半分钟的时间。

云窗调试器iOS版本支持iPhone和iPad,不过还没发布到App Store,如果你的设备已经越狱,可以直接在设备的safari里 点这个链接进行安装

5 在线打包工具:PhoneGap:Build

作为一个跨平台方案,PhoneGap也提供了一个云打包器,利用它我们可以不用安装任何开发环境,直接将HTML打包成iOS,Android,Windows Phone,WebOS,塞班和黑莓6个手机系统的安装包。

PhoneGap:Build 的使用很简单,注册一个PhoneGap账号然后上传代码的Zip包就可以。当然,你也可以直接从git/svn取代码。

需要注意的是PhoneGap:Build的打包是收费服务,对private app有个数限制(我暂时还没遇到,不过看官方的说明是有限制的)。另外PhoneGap:Build上iOS的打包需要上传证书,否则不能打包。

如果你只是需要打Apk包的话,也可以使用SAE提供的在线打包器,这个打包器是完全免费的。另据小道消息,iOS无证书打包器已经在调试中了,预计月底上线。

最后提供一个懒人福利:文章中提到的东东打包下载