资源预下载和本地通知.md
13.1 KB
资源预下载
- 教师版和学生版都需要提前预下载资源,不同的是教师版课程结束后不用删除缓存,因为有可能会反复教同一课。
- 课表信息缓存在本地
- 根据课表返回的信息中寻找从当前起7天后的的课程Id,从盒子鱼服务器获取相应的资源列表
- 在后台预下载资源
- 如果用户是在非Wifi状态下,提醒用户是否允许继续下载
- 在开始上课的时候,如果检测到还有需要下载的资源,则用正常的前台下载,不用开启后台下载。
- 上完课要及时清除学生端的缓存,需要记住学生下载的资源和相对应的课程信息
资源预下载的检查时机
- 每次App启动的时候
- App从后台进入前台
- 用户打开课表
- 学生用户买课之后(系统会立刻匹配上该学生应该上哪些课)
App会从盒子鱼服务器获取最新的课表信息,如果课表有变化(根据Etag值判断),则更新本地缓存。
获取课表信息之后,通知资源预下载检查器进行检查,是否有资源需要预下载。
可能需要的下载类
- 资源下载检查器
- 启动的时候,检查是否有缓存的当月的课表。
- 从当月的课表中取出从当前时间到月底之间的课程Id列表
- 根据本地的缓存判断是否已经下载了某一课的全部资源
- 如果未下载某一课的全部资源,则检查本地是否有该课的资源列表
- 如果有该课资源列表,则去列表中寻找未下载的资源进行下载
- 如果没有该课资源列表,则从盒子鱼服务器获取该列表
- 资源下载器
- 可以根据资源列表后台下载资源
- 下载过程中某个资源出错的话,可以跳过继续下载其他的资源
- 在前台下载的时候需要停掉资源下载器的后台资源下载
- 需要检测网络状态的变化,当用户处于非Wifi状态下,需要暂停下载,询问用户是否继续下载。
资源下载需要考虑的问题
下载的时候,先把下载的数据保存成一个临时文件,等下载成功的时候再保存为最终的文件名
下载后的资源需要进行MD5验证,对资源数据进行MD5运算后应该和资源名一致
下载后的资源除了视频("Content-Type"为"video")外其他需要进行加密处理
IOS端可以参考DownloadManager中类似的处理
- 资源缓存管理器
- 把在线授课所需的资源列表缓存到数据库中
- 学生端在授课结束后根据缓存信息删除掉该课的资源,删除资源后同时删除缓存的资源列表信息
- 在设置中进行清除缓存的操作的时候,需要清除缓存的资源列表信息
在线授课课表信息缓存设计
采用缓存文件
- IOS端的缓存目录获取方法
可以从BFECourseInfoCacheManager的 getTimeTableCacheFilePathByYear:(NSString *)year andMonth:(NSString *)month方法中读取 BFECourseInfoCacheManager的创建可以用以下抽象工厂中提供的方法 BFECourseInfoCacheManager *courseInfoCacheManager = [[BoxfishFactory getFactory] createCourseInfoCacheManager];
在线授课本地资源存储设计
IOS端拟采用数据库进行管理,数据库名暂定为OnlineTeachResource.db
可以利用BFECourseInfoCacheManager的
getOnlineTeachCourseResourceInfoFilePath获取;
课程列表: courseList.table(暂定)
课程Id | 资源表名 | lastModified | 状态 |
---|---|---|---|
课程Id1 | list1 | 最后更新时间 | 已下载 |
课程Id2 | list2 | 最后更新时间 | 未下载 |
课程Id3 | list3 | 最后更新时间 | 未下载 |
如果检查到本地缓存的lastModified和课表提供的该课的lastModified不一致, 则需要重新下载该课的资源列表,下载后更新lastModified为最新值
资源列表: list1.table(暂定)
资源Id | 是否下载 |
---|---|
资源Id1 | true |
资源Id2 | true |
资源Id3 | false |
本地通知或者闹铃,提前通知用户打开App,准备上课
课表缓存信息(需要追加lastModified信息)
-
学生端课表缓存内容
{ "data": [ { "day": "2016-04-12", "dailyScheduleTime": [ { "id": 338345, "time": "14:00:00", "courseInfo": { "name": "Unit 3 Topic 3 What would you like to drink?", "thumbnail": "http://192.168.0.100/pub/student/publication/data/data/9563a30efded2cc111927542b2316e81", "courseType": [ "课文朗读" ], "difficulty": [ "1" ], "lastModified": 1448375675242, "courseId": "L3NoYXJlL3N2bi_ku4HniLHkuIPkuIog5ZCs6K-7LzAzMi5Vbml0IDMgVG9waWMgMyBXaGF0IHdvdWxkIHlvdSBsaWtlIHRvIGRyaW5rPy54bHN4" } }, { "id": 338346, "time": "15:00:00", "courseInfo": { "name": "Unit 3 Topic 3 What would you like to drink?", "thumbnail": "http://192.168.0.100/pub/student/publication/data/data/9563a30efded2cc111927542b2316e81", "courseType": [ "课文朗读" ], "difficulty": [ "1" ], "lastModified": 1448375675242, "courseId": "L3NoYXJlL3N2bi_ku4HniLHkuIPkuIog5ZCs6K-7LzAzMi5Vbml0IDMgVG9waWMgMyBXaGF0IHdvdWxkIHlvdSBsaWtlIHRvIGRyaW5rPy54bHN4" } }, { "id": 338347, "time": "16:00:00", "courseInfo": { "name": "Unit 3 Topic 3 What would you like to drink?", "thumbnail": "http://192.168.0.100/pub/student/publication/data/data/9563a30efded2cc111927542b2316e81", "courseType": [ "课文朗读" ], "difficulty": [ "1" ], "lastModified": 1448375675242, "courseId": "L3NoYXJlL3N2bi_ku4HniLHkuIPkuIog5ZCs6K-7LzAzMi5Vbml0IDMgVG9waWMgMyBXaGF0IHdvdWxkIHlvdSBsaWtlIHRvIGRyaW5rPy54bHN4" } } ] } ] }
-
教师端课表缓存信息
{ "data": [ { "day": "2016-04-12", "dailyScheduleTime": [ { "slotId": 1, "startTime": "08:00:00", "endTime": "09:00:00", "selected": true, "status": 1, "workOrderId": null, "courseInfo": null }, { "slotId": 9, "startTime": "16:00:00", "endTime": "17:00:00", "selected": true, "status": 2, "workOrderId": 26, "courseInfo": { "name": "Unit 3 Topic 3 What would you like to drink?", "thumbnail": "http://192.168.0.100/pub/student/publication/data/data/9563a30efded2cc111927542b2316e81", "courseType": [ "课文朗读" ], "difficulty": [ "1" ], "lastModified": 1448375675242, "courseId": "L3NoYXJlL3N2bi_ku4HniLHkuIPkuIog5ZCs6K-7LzAzMi5Vbml0IDMgVG9waWMgMyBXaGF0IHdvdWxkIHlvdSBsaWtlIHRvIGRyaW5rPy54bHN4" } } ] }, { "day": "2016-04-13", "dailyScheduleTime": [ { "slotId": 1, "startTime": "08:00:00", "endTime": "09:00:00", "selected": true, "status": 2, "workOrderId": 26, "courseInfo": { "name": "Unit 3 Topic 3 What would you like to drink?", "thumbnail": "http://192.168.0.100/pub/student/publication/data/data/9563a30efded2cc111927542b2316e81", "courseType": [ "课文朗读" ], "difficulty": [ "1" ], "lastModified": 1448375675242, "courseId": "L3NoYXJlL3N2bi_ku4HniLHkuIPkuIog5ZCs6K-7LzAzMi5Vbml0IDMgVG9waWMgMyBXaGF0IHdvdWxkIHlvdSBsaWtlIHRvIGRyaW5rPy54bHN4" } }, { "slotId": 2, "startTime": "09:00:00", "endTime": "10:00:00", "selected": true, "status": 2, "workOrderId": 26, "courseInfo": { "name": "Unit 3 Topic 3 What would you like to drink?", "thumbnail": "http://192.168.0.100/pub/student/publication/data/data/9563a30efded2cc111927542b2316e81", "courseType": [ "课文朗读" ], "difficulty": [ "1" ], "lastModified": 1448375675242, "courseId": "L3NoYXJlL3N2bi_ku4HniLHkuIPkuIog5ZCs6K-7LzAzMi5Vbml0IDMgVG9waWMgMyBXaGF0IHdvdWxkIHlvdSBsaWtlIHRvIGRyaW5rPy54bHN4" } }, { "slotId": 3, "startTime": "10:00:00", "endTime": "11:00:00", "selected": true, "status": 2, "workOrderId": 26, "courseInfo": { "name": "Unit 3 Topic 3 What would you like to drink?", "thumbnail": "http://192.168.0.100/pub/student/publication/data/data/9563a30efded2cc111927542b2316e81", "courseType": [ "课文朗读" ], "difficulty": [ "1" ], "lastModified": 1448375675242, "courseId": "L3NoYXJlL3N2bi_ku4HniLHkuIPkuIog5ZCs6K-7LzAzMi5Vbml0IDMgVG9waWMgMyBXaGF0IHdvdWxkIHlvdSBsaWtlIHRvIGRyaW5rPy54bHN4" } }, { "slotId": 4, "startTime": "11:00:00", "endTime": "12:00:00", "selected": true, "status": 2, "workOrderId": 26, "courseInfo": { "name": "Unit 3 Topic 3 What would you like to drink?", "thumbnail": "http://192.168.0.100/pub/student/publication/data/data/9563a30efded2cc111927542b2316e81", "courseType": [ "课文朗读" ], "difficulty": [ "1" ], "lastModified": 1448375675242, "courseId": "L3NoYXJlL3N2bi_ku4HniLHkuIPkuIog5ZCs6K-7LzAzMi5Vbml0IDMgVG9waWMgMyBXaGF0IHdvdWxkIHlvdSBsaWtlIHRvIGRyaW5rPy54bHN4" } }, { "slotId": 5, "startTime": "12:00:00", "endTime": "13:00:00", "selected": true, "status": 2, "workOrderId": null, "courseInfo": { "name": "Unit 3 Topic 3 What would you like to drink?", "thumbnail": "http://192.168.0.100/pub/student/publication/data/data/9563a30efded2cc111927542b2316e81", "courseType": [ "课文朗读" ], "difficulty": [ "1" ], "lastModified": 1448375675242, "courseId": "L3NoYXJlL3N2bi_ku4HniLHkuIPkuIog5ZCs6K-7LzAzMi5Vbml0IDMgVG9waWMgMyBXaGF0IHdvdWxkIHlvdSBsaWtlIHRvIGRyaW5rPy54bHN4" } }, { "slotId": 6, "startTime": "13:00:00", "endTime": "14:00:00", "selected": true, "status": 1, "workOrderId": null, "courseInfo": null } ] } ] }