资源预下载和本地通知.md
6.26 KB
资源预下载
- 教师版和学生版都需要提前预下载资源,不同的是教师版课程结束后不用删除缓存,因为有可能会反复教同一课。
- 课表信息按月缓存在本地
- 根据课表返回的信息中的课程Id,从盒子鱼服务器获取相应的资源列表
- 在后台预下载资源
- 如果用户是在非Wifi状态下,提醒用户是否允许继续下载
- 在开始上课的时候,如果检测到还有需要下载的资源,则用正常的前台下载,不用开启后台下载。
- 如果需要上完课及时清除学生端的缓存,则需要记住学生下载的资源和相对应的课程信息(需要跟产品确认)
可能需要的下载类
- 资源下载检查器
- 启动的时候,检查是否有缓存的当月的课表。
- 从当月的课表中取出从当前时间到月底之间的课程Id列表
- 根据本地的缓存判断是否已经下载了某一课的全部资源
- 如果未下载某一课的全部资源,则检查本地是否有该课的资源列表
- 如果有该课资源列表,则去列表中寻找未下载的资源进行下载
- 如果没有该课资源列表,则从盒子鱼服务器获取该列表
-
资源下载器
- 可以根据资源列表后台下载资源
- 下载过程中某个资源出错的话,可以跳过继续下载其他的资源
- 在前台下载的时候需要停掉资源下载器的后台资源下载
- 需要检测网络状态的变化,当用户处于非Wifi状态下,需要暂停下载,询问用户是否继续下载。
-
资源缓存管理器
- 把在线授课所需的资源列表缓存到数据库中
- 学生端在授课结束后根据缓存信息删除掉该课的资源,删除资源后同时删除缓存的资源列表信息
- 在设置中进行清除缓存的操作的时候,需要清除缓存的资源列表信息
在线授课课表信息缓存设计
采用缓存文件
- IOS端的缓存目录获取方法
可以从BFECourseInfoCacheManager的 getTimeTableCacheFilePathByYear:(NSString *)year andMonth:(NSString *)month方法中读取 BFECourseInfoCacheManager的创建可以用以下抽象工厂中提供的方法 BFECourseInfoCacheManager *courseInfoCacheManager = [[BoxfishFactory getFactory] createCourseInfoCacheManager];
在线授课本地资源存储设计
IOS端拟采用数据库进行管理,数据库名暂定为OnlineTeachResource.db
可以利用BFECourseInfoCacheManager的
getOnlineTeachCourseResourceInfoFilePath获取;
课程列表: courseList.table
课程Id | 资源表名 |
---|---|
课程Id1 | list1 |
课程Id2 | list2 |
课程Id3 | list3 |
资源列表: list1.table
资源Id | 是否下载 |
---|---|
资源Id1 | true |
资源Id2 | true |
资源Id3 | false |
本地通知或者闹铃,提前通知用户打开App,准备上课
课表缓存信息
-
学生端课表缓存内容
{ "data": [ { "dailyScheduleTime": [ { "id": 338345, "courseType": "听力", "time": "14:00:00", "courseId": "L3NoYXJlL3N2bi_ku4HniLHkuIPkuIog5ZCs6K-7LzAzMi5Vbml0IDMgVG9waWMgMyBXaGF0IHdvdWxkIHlvdSBsaWtlIHRvIGRyaW5rPy54bHN4" }, { "id": 338346, "courseType": "听力", "time": "15:00:00", "courseId": "L3NoYXJlL3N2bi_ku4HniLHkuIPkuIog5ZCs6K-7LzAzMi5Vbml0IDMgVG9waWMgMyBXaGF0IHdvdWxkIHlvdSBsaWtlIHRvIGRyaW5rPy54bHN4" }, { "id": 338347, "courseType": "听力", "time": "16:00:00", "courseId": "L3NoYXJlL3N2bi_ku4HniLHkuIPkuIog5ZCs6K-7LzAzMi5Vbml0IDMgVG9waWMgMyBXaGF0IHdvdWxkIHlvdSBsaWtlIHRvIGRyaW5rPy54bHN4" } ], "day": "2016-04-12" } ] }
-
教师端课表缓存信息
{ "data": [ { "day": "2016-04-12", "dailyScheduleTime": [ { "slotId": 1, "startTime": "08:00:00", "endTime": "09:00:00", "selected": true, "status": 1, "courseId": null, "courseName": null, "courseType": null }, { "slotId": 2, "startTime": "09:00:00", "endTime": "10:00:00", "selected": true, "status": 1, "courseId": null, "courseName": null, "courseType": null }, { "slotId": 3, "startTime": "10:00:00", "endTime": "11:00:00", "selected": true, "status": 1, "courseId": null, "courseName": null, "courseType": null }, { "slotId": 4, "startTime": "11:00:00", "endTime": "12:00:00", "selected": true, "status": 1, "courseId": null, "courseName": null, "courseType": null }, { "slotId": 5, "startTime": "12:00:00", "endTime": "13:00:00", "selected": true, "status": 1, "courseId": null, "courseName": null, "courseType": null }, { "slotId": 9, "startTime": "16:00:00", "endTime": "17:00:00", "selected": true, "status": 2, "courseId": 338342, "courseName": "测试1", "courseType": "听力" } ] } ], }