谢作如
开设App Inventor课程一段时间后,学生的学习热情被点燃了,开发了各种各样的App。当然,很多新的问题和新的想法也提出来了,如我开发的App能不能实时获取网络上的天气预报等问题大都和Web应用有关。其实大部分手机App都具有将信息上传到Web,或者从Web中获取信息的功能。App Inventor中提供了Web组件,也能够实现上述的功能。App和Web的互动,其原理和现在很流行的“云计算”、“云服务”是一样的。
● 项目描述
设计一款App小游戏,用户能够将游戏得分上传到网络,并且和其他玩这款App的用户比较,统计出“击败**%的用户”的提示,增加游戏的互动性。
● 项目分析
要完成这个项目,我们首先需要一个专用的Web服务,这一Web服务的数据库能存储App提交的信息,并且能返回相关的统计信息。Web服务要提供API接口,App Inventor的连接组件中提供了Web组件,可以通过这一组件与Web服务的API接口进行互动,流程如图1所示。
实际上,连接Web服务的手机App远远不只是一个,而是N个,构成了云服务的模型。
目前网络上似乎还没有哪家服务商提供了类似的云服务,尤其是能够让App Inventor的Web控件简单访问的云服务。为了能让学生们开发的App具有云服务的功能,我使用动态语言Asp,开发了一个“手机App云用户管理系统”,上传到学校的服务器,供学生使用。
“手机App云用户管理系统”是一个多用户的系统,支持多个App应用同时使用,能够实现用户注册、用户登录、更新密码、更新得分和综合查询等功能。系统提供了一个简单的Api接口,通过这个接口与手机App互动。Api文件的具体使用说明的地址为:http://www.wzms.cn/tot/reg/index.asp。
1.接口参数
本接口支持POST和GET两种形式提交参数,参数分为appid、action、regname、regpass、newregpass、score等六个。接口文件地址和各种参数合并为一个完成的URL地址后,通过Web组件提交,即可获取返回的信息。具体的参数说明如下页表。
2.数据返回格式
前两个字符为ok或者no,后面则为其他具体的信息,如统计信息,分别用“;”分隔。
3.使用范例
因为这一系统提供给更多的学生使用,支持多个App同时使用,所以设计了appid参数来区分。下面以appid等于1为例进行说明。
①将用户xzr的分数更新为99。
需要的参数为:appid、action、regname、score。URL为:http://www.wzms.cn/tot/reg/ index.asp?appid=1®name=xzr&score=99&action=5。
返回信息为:True:ok,更新成功!名次:1;有效分数:4;最高:99;最低:30;平均:79.25。
注:用户如果不存在,就自动添加密码为“123456”的用户,同时返回上述的信息。
②统计Appid为1的应用程序注册用户情况。
需要的参数为:appid、action。URL为:http://www.wzms.cn/tot/reg/index.asp?appid=1&action=6。
返回信息为:True:ok,注册人数:4;有效分数:4;最高:99;最低:30;平均:79.25。
注:如果appid不存在,系统则输出:ok,注册人数:0;有效分数:0;最高:;最低:;平均:,如果需要详细的使用文档,请访问http://www.wzms.cn/tot/reg/index.htm。
● 编程实现
有了手机App云用户管理系统的支持,App Inventor端的编程主要是通过Web组件提交参数,然后使用文本组件的各种函数,在返回信息中找到需要的数据。
我找了一个打地鼠的学生作品,这个小游戏已经能够通过TinyDB组件来存储并且读取最高的游戏成绩。我在这一基础上增加了Web组件,使其支持通过Web存储用户的游戏得分,还能比较不同的游戏用户的得分情况,输出统计结果,如“击败90%的用户”之类。
1.程序界面
Web和TinyDB都是为非可视组件。Web组件位于“连接组件”区域,这一组件的作用为发送HTTP的GET、POST、PUT及DELETE请求(如图2)。
图2
2.生成随机用户名
为了更容易理解,我将程序中与生成、读取用户名无关的代码去除。程序在第一次时要生成一个随机用户,并存储在TinyDB中。变量(Tag)score存储的是游戏得分,regname存储的是用户名。如果从TingDB中读出的regname为0,则会生成一个以5位的数字组成的用户名(如图3)。
3.提交成绩到网络
游戏结束的时候,将成绩提交到网络。geturl是自定义的过程,在游戏结束的时候调用这一过程,需要提交的参数为regname和score(如下页图4)。
4.编写geturl过程
geturl过程的功能仅仅为给Web组件设置Url地址,然后调用Get方法(如下页图5)。Web组件收到返回的信息时,会触发GotText事件。
5.编写GotText事件
最核心的工作就是在GotText事件中处理返回的信息,代码如下页图7所示。根据前面的说明,GotText事件将收到类似如下的信息:ok,更新成功!名次:1;有效分数:4;最高:99;最低:30;平均:79.25。endprint
首先要用segment函数取出前两个字符,如果等于“ok”,则继续进行提取数据。segment函数类似VB中的Mid函数,能够从给定的文本中提取指定起点及指定长度的文本片段。需要注意的是,App Inventor中无论是列表还是文本,都是从1开始计数的,而不是0。
要统计这一得分能击败多少用户,需要在反馈信息中提取名次和有效分数(大于0的分数)这两个数据。其实处理起来也不麻烦,先用“;”分割字符串,再用“:”分割。取出后用公式计算:击败率=(有效分数-名次+1)/有效分数。
可是,用App Inventor写数学表达式却有点麻烦,构建出来的积木非常庞大,只好再用个变量temp,让代码看起来稍微短一些。
6.测试代码
游戏结束的时候,看到熟悉的提示跳出来,是不是非常激动?这可是插上了云服务的翅膀的App(如图7)!
● 拓展应用
本项目虽然仅仅完成了通过网络来比较游戏得分的功能,但我提供的“手机App云用户管理系统”还可以实现其他的功能,如用户注册功能。我们甚至还可以利用这一更新得分的功能,开发出更加有趣的互动功能,如用支持WiFi访问的机器人或者其他智能产品,定时去读取这一Api接口,根据返回的数据不同而执行不同的动作,这就是物联网智能产品的远程控制功能。
有了上面的范例,实时获取天气预报的操作就显得很简单了,只要你找到一个稳定的更新及时的天气预报网站,通过分隔字符串的形式,把需要的数据提取出来即可。App Inventor的Web组件功能非常强大,不要说提交分数,利用其支持POST,并且能够设置RequestHeaders的功能,我们甚至可以做出类似云笔记之类的应用来。
App Inventor的Web组件还支持Josn格式。使用JsonTextDecode方法,可以对给定的json格式的值进行解码,生成与App Inventor对应的值。这样一来,对Web组件返回信息的处理将更加简单。手机App云用户管理系统也将提供支持Josn的接口。
● 总结
本项目主要演示了App中云服务功能的开发。虽然简单,但给学生们提供的却是一条增强手机App功能的开发途径,能初步体会云计算的功能和优势。很多专家都曾经提出,云计算将带来手机领域下一场革命,手机仅仅是网络应用的“瘦客户端”,让服务器做复杂、繁重的计算、存储工作吧。
(本文提到的范例可以通过作者的新浪博客获取,地址为:http://blog.sina.com.cn/xiezuoru/)endprint
首先要用segment函数取出前两个字符,如果等于“ok”,则继续进行提取数据。segment函数类似VB中的Mid函数,能够从给定的文本中提取指定起点及指定长度的文本片段。需要注意的是,App Inventor中无论是列表还是文本,都是从1开始计数的,而不是0。
要统计这一得分能击败多少用户,需要在反馈信息中提取名次和有效分数(大于0的分数)这两个数据。其实处理起来也不麻烦,先用“;”分割字符串,再用“:”分割。取出后用公式计算:击败率=(有效分数-名次+1)/有效分数。
可是,用App Inventor写数学表达式却有点麻烦,构建出来的积木非常庞大,只好再用个变量temp,让代码看起来稍微短一些。
6.测试代码
游戏结束的时候,看到熟悉的提示跳出来,是不是非常激动?这可是插上了云服务的翅膀的App(如图7)!
● 拓展应用
本项目虽然仅仅完成了通过网络来比较游戏得分的功能,但我提供的“手机App云用户管理系统”还可以实现其他的功能,如用户注册功能。我们甚至还可以利用这一更新得分的功能,开发出更加有趣的互动功能,如用支持WiFi访问的机器人或者其他智能产品,定时去读取这一Api接口,根据返回的数据不同而执行不同的动作,这就是物联网智能产品的远程控制功能。
有了上面的范例,实时获取天气预报的操作就显得很简单了,只要你找到一个稳定的更新及时的天气预报网站,通过分隔字符串的形式,把需要的数据提取出来即可。App Inventor的Web组件功能非常强大,不要说提交分数,利用其支持POST,并且能够设置RequestHeaders的功能,我们甚至可以做出类似云笔记之类的应用来。
App Inventor的Web组件还支持Josn格式。使用JsonTextDecode方法,可以对给定的json格式的值进行解码,生成与App Inventor对应的值。这样一来,对Web组件返回信息的处理将更加简单。手机App云用户管理系统也将提供支持Josn的接口。
● 总结
本项目主要演示了App中云服务功能的开发。虽然简单,但给学生们提供的却是一条增强手机App功能的开发途径,能初步体会云计算的功能和优势。很多专家都曾经提出,云计算将带来手机领域下一场革命,手机仅仅是网络应用的“瘦客户端”,让服务器做复杂、繁重的计算、存储工作吧。
(本文提到的范例可以通过作者的新浪博客获取,地址为:http://blog.sina.com.cn/xiezuoru/)endprint
首先要用segment函数取出前两个字符,如果等于“ok”,则继续进行提取数据。segment函数类似VB中的Mid函数,能够从给定的文本中提取指定起点及指定长度的文本片段。需要注意的是,App Inventor中无论是列表还是文本,都是从1开始计数的,而不是0。
要统计这一得分能击败多少用户,需要在反馈信息中提取名次和有效分数(大于0的分数)这两个数据。其实处理起来也不麻烦,先用“;”分割字符串,再用“:”分割。取出后用公式计算:击败率=(有效分数-名次+1)/有效分数。
可是,用App Inventor写数学表达式却有点麻烦,构建出来的积木非常庞大,只好再用个变量temp,让代码看起来稍微短一些。
6.测试代码
游戏结束的时候,看到熟悉的提示跳出来,是不是非常激动?这可是插上了云服务的翅膀的App(如图7)!
● 拓展应用
本项目虽然仅仅完成了通过网络来比较游戏得分的功能,但我提供的“手机App云用户管理系统”还可以实现其他的功能,如用户注册功能。我们甚至还可以利用这一更新得分的功能,开发出更加有趣的互动功能,如用支持WiFi访问的机器人或者其他智能产品,定时去读取这一Api接口,根据返回的数据不同而执行不同的动作,这就是物联网智能产品的远程控制功能。
有了上面的范例,实时获取天气预报的操作就显得很简单了,只要你找到一个稳定的更新及时的天气预报网站,通过分隔字符串的形式,把需要的数据提取出来即可。App Inventor的Web组件功能非常强大,不要说提交分数,利用其支持POST,并且能够设置RequestHeaders的功能,我们甚至可以做出类似云笔记之类的应用来。
App Inventor的Web组件还支持Josn格式。使用JsonTextDecode方法,可以对给定的json格式的值进行解码,生成与App Inventor对应的值。这样一来,对Web组件返回信息的处理将更加简单。手机App云用户管理系统也将提供支持Josn的接口。
● 总结
本项目主要演示了App中云服务功能的开发。虽然简单,但给学生们提供的却是一条增强手机App功能的开发途径,能初步体会云计算的功能和优势。很多专家都曾经提出,云计算将带来手机领域下一场革命,手机仅仅是网络应用的“瘦客户端”,让服务器做复杂、繁重的计算、存储工作吧。
(本文提到的范例可以通过作者的新浪博客获取,地址为:http://blog.sina.com.cn/xiezuoru/)endprint