謝作如
開設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