资源预下载和本地通知.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
                }
            ]
        }
    ]
    }