Moodle Mobile實現原理 登錄 調用WebService函數 文件 消息推送

Moodle是一個開源的課程管理系統,可以用來實現課程資源的分發、作業提交、論壇交流等功能。同類型的系統還有Sakai,也是開源的。

Moodle已經推出了移動客戶端Moodle Mobile,它是使用Ionic跨平臺框架實現的應用程序,一套代碼可以編譯成Android、IOS甚至Linux上的應用程序。在Ionic框架上開發應用程序使用的是Web技術,像開發網頁那樣每個頁面都需要編寫頁面佈局(html)、樣式(scss)、邏輯處理文件(js或ts, typescript)。

實現客戶端最重要的是從服務器獲取應用的數據。Moodle網站的數據都存儲在數據庫中,但顯然不能讓客戶端直接訪問數據庫,而是讓客戶端訪問API接口,由接口查詢數據庫,做相應處理,最後返回數據給客戶端。Moodle的API接口爲Moodle WebService函數。

登錄

要訪問WebService函數需要有用戶身份憑據token,token幫助服務器識別訪問者的身份,鑑定是否有訪問權限,以及返回特定於用戶的數據。token通過登錄獲得,登錄的入口爲/login/token.php,需要攜帶的參數有username、password、service,其中service一般爲moodle_mobile_app

假設網站地址爲http://cms.zeabin.top,用戶名、密碼均爲student,則獲取token的用法爲:

http://cms.zeabin.top/login/token.php?username=student&password=student&service=moodle_mobile_app

返回的數據類似:

{
  "token": "4e223d60d78db3f94fd11afaaa21d5b3",
  "privatetoken": null
}

token是後續訪問WebService函數都需要攜帶的參數,privatetoken只在使用https協議的網站上返回,但不清楚有什麼用。

調用WebService函數

入口地址爲/webservice/rest/server.php,需要的參數有token,moodlewsrestformat,wsfunction以及函數所需的參數。其中token(默認有效時間12周)和moodlewsrestformat(一般爲json)相對固定,可以對WebService函數做一個封裝。

以管理員身份登入Moodle網站,在網站管理-插件-網絡服務可以看到全部WebService函數的功能及參數格式、返回數據格式。下面介紹一些基本的WebService函數

core_webservice_get_site_info:獲取token之後,首先需要獲取更多的用戶信息,該函數返回id,頭像等數據,其中id在很多函數中爲必須的參數

core_enrol_get_users_courses:該函數返回用戶參與的課程的列表

core_course_get_contents:以courseid作爲參數,返回對應課程的詳細內容,包括各個topic以及topic中的各個模塊

mod_assign_get_assignments:返回一個或多個課程中的所有作業數據

mod_assign_get_submission_status:返回一個作業的提交數據,包含提交文件和作業評分

mod_forum_get_forums_by_courses:返回一個或多個課程中的論壇。在Moodle中,一個課程可以包含多個論壇,一個論壇可以包含多個討論,一個討論包含多個post。使用mod_forum_get_forum_discussions可以獲得一個論壇中的所有討論;使用mod_forum_get_forum_discussion_posts可以獲得討論的內容。

文件

文件上傳:地址/webservice/upload.php
文件下載:一些WebService函數獲得的內容中含有文件下載的地址,請求該地址即可下載文件。

消息推送

消息推送是移動應用程序的一大特點。Moodle Mobile的消息推送由Airnotifier系統完成,包含Airnotifier插件和Airnotifier服務器兩部分。

Airnotifier插件

Moodle Mobile會通過插件提供的WebService函數將設備信息發送給Moodle服務器,包含設備系統、id等信息。Moodle服務器收到後將設備信息存儲到數據庫。當接收到消息數據時,從數據庫中獲取設備消息,發送給配置的Airnotifier服務器。Airnotifier服務器的配置需要在插件的設置中完成,否則插件無法正常工作。

Airnotifier服務器

Airnotifier服務器也是一個開源項目,可以自己架設,也可以使用Moodle提供的推送服務器(https://messages.moodle.net),但需要註冊,獲取access_key。

Airnotifier服務器接收一條推送消息的消息數據和推送目標的設備信息,根據目標設備的系統,使用相應的協議推送消息。

設備 協議
iPhone/iPad APNS
Android/chrome FCM
Windows WNS
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章