版本变动
版本日期 |
变动内容 |
2021/04/01 |
初稿 |
2021/07/28 |
老师布置作业成功新增回调 |
2. 爱乐奇作业概述
6. Alo7 Homework iOS SDK接入文档
6.1. 集成方式
SDK适用于iOS 10及以上版本
cocoapods 集成:
-
安装CocoaPods
-
准备 Podfile
# CocoaPods master repo,如果使用其他的镜像源,此行可修改
# source 'https://github.com/CocoaPods/Specs.git'
# 若CocoaPods 版本高于 1.7.2,建议使用 CDN 地址。
source 'https://cdn.cocoapods.org/'
# SDK 依赖 CocoaPods Repo,必填
source 'https://github.com/alo7/ios-repo.git'
target 'YourTargetName' do
platform :ios, "10.0"
pod 'Alo7HomeworkSDK', '~> 0.3'
end
# 由于Apple关于新上APP禁止使用UIWebview,添加下面代码删除UIWebview相关代码
pre_install do |installer|
installer.pod_targets.each do |target|
if target.name == 'WebViewJavascriptBridge'
target.all_files.each do |file|
if file.match?(/\/WebViewJavascriptBridge\.[hm]$/)
File.delete(file)
end
end
end
end
end
### 若项目中有使用RXSwift则需要在podfile中加入下面这段
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
if ['RxSwift', 'RxCocoa', 'RxRelay'].include?(target.name)
config.build_settings['BUILD_LIBRARY_FOR_DISTRIBUTION'] = "YES"
end
end
end
end
-
由于录音功能在模拟器上的限制,建议使用真机开发调试音视频及录音相关功能。
6.2. 使用场景
-
老师场景
1) SDK初始化
// 携带参数启动 SDK(参数待定义,以Key Value形式封装于Alo7HomeworkConfig)
let config = Alo7HomeworkConfig()
Alo7HomeworkSDK.start(with: context, config: config)
2) 布置作业
// 布置作业,token为从后端API换取的Alo7 token
// thirdPartyClazzIds 第三方班级Id, 可传多个, 默认为不传。
Alo7HomeworkSDK.assignHomework(
token: #{token}, thirdPartyClazzIds: #{thirdPartyClazzIds}, from: #{viewController},
success: {
//打开作业成功回调
},
fail: { [weak self ](error) in
//打开作业失败回调
},
stateHandler: { [weak self] (state) in
switch state {
case .close(let data):
//关闭页面回调
@unknown default:
fatalError()
}
})
3) 检查作业
// 检查作业,homeworkId为作业ID,token为从后端API换取的Alo7 token
Alo7HomeworkSDK.checkHomework(
#{homeworkId}, token: #{token}, from: #{viewController},
success: {
//打开作业成功回调
},
fail: { [weak self ](error) in
//打开作业失败回调
},
stateHandler: { [weak self] (state) in
switch state {
case .close(let data):
//关闭页面回调
@unknown default:
fatalError()
}
}
)
4) Alo7HomeworkSDK.checkHomework 的 stateHandler目前有case .close(let data),携带的返回数据data说明
回调参数是个通用的数据结构,序列化之后是个 {type: string,payload?: any} 类型,目前的 type 可能是如下值:
type |
描述 |
|
publish_homework_success |
布置作业成功 |
-
学生场景
1) SDK初始化
// 携带参数启动 SDK(参数待定义,以Key Value形式封装于Alo7HomeworkConfig)
let config = Alo7HomeworkConfig()
Alo7HomeworkSDK.start(with: context, config: config)
2) 查看作业
// 进入作业详情页,homeworkId为作业ID,token为从后端API换取的Alo7 token
Alo7HomeworkSDK.showHomework(
#{homeworkId}, token: #{token}, from: #{viewController},
success: {
//打开作业成功回调
},
fail: { [weak self ](error) in
//打开作业失败回调
},
stateHandler: { [weak self] (state) in
switch state {
case .close(let data):
//关闭页面回调
@unknown default:
fatalError()
}
})
6.3. 错误类型
public enum Alo7HomeworkError: Error {
/**
* 网络请求未获得Response
*/
case nonHTTPResponse(URLResponse)
/**
* 请求获得的URL格式不正确
*/
case failGetURL
/**
* 网络连接失败
* code:错误代码
* message:错误信息
*/
case fail(code: String, message: String)
/**
* 解析服务器数据异常
*/
case jsonSerializationError
/**
* 未知的服务器异常
*/
case serverUnkown
/**
* 未知异常
*/
case unknown
}
7. Alo7 Homework Android SDK接入文档
7.1. 集成方式
SDK适用于Android 5(API Level 21)及以上版本
Gradle 集成:
1.项目级gradle文件中配置
allprojects {
repositories {
// mavenCentral仓库如果已有则无需添加
mavenCentral()
maven {
url "https://maven.pkg.github.com/alo7/android-homework-sdk"
credentials {
username = "homework-sdk-user"
password = "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"
}
}
}
}
2.应用级gradle文件中配置
dependencies中artifactId的设置说明:
android {
...
//homework sdk 基于Java8开发, android block需要添加如下配置, 已有可跳过
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
implementation 'androidx.appcompat:appcompat:1.2.0' //已有则无需添加
implementation 'com.alo7.android:homeworksdk:0.3.0-SNAPSHOT'
}
7.2. 使用方式
1.Proguard混淆配置
SDK已内置了相关类的混淆规则, 一般情况下无需再针对进行特殊配置
2.使用场景
-
老师场景
1) SDK初始化
在Application中初始化Homework SDK
// 携带参数启动 SDK
// debugMode 是一个布尔值,表示是否为debug模式,为true时会有相关日志输出
Alo7HomeworkSDK.initialize(this, debugMode);
2) 布置作业
(1) 不携带clazzId布置作业
Alo7HomeworkSDK.assignHomework(this, token, new ResultCallback() {
@Override
public void onSuccess() {
// assignHomework是一个异步操作,调用成功后会自动跳转到布置作业页面
// 调用assignHomework时需要展示Loading,请求成功后可在此处隐藏Loading,
}
@Override
public void onError(Alo7Error error) {
// 可通过error.getErrorCode处理相应异常
}
});
(2)携带班级ID布置作业
Alo7HomeworkSDK.assignHomeworkWithClazzId(this, token, Arrays.asList(ids), new ResultCallback() {
@Override
public void onSuccess() {
// assignHomeworkWithClazzId是一个异步操作,调用成功后会自动跳转到布置作业页面
// 调用assignHomeworkWithClazzId时需要展示Loading,请求成功后可在此处隐藏Loading,
}
@Override
public void onError(Alo7Error error) {
// 可通过error.getErrorCode处理相应异常
}
});
上述两个布置作业的接口调用成功后会跳转至布置作业页面,在布置作业页面布置成功后会通过setResult()返回相关数据,如需处理数据,可以在调用这两个接口的页面中重写onActivityResult方法。代码如下:
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// 判断resultCode为RESULT_OK,并且requestCode为ASSIGN_HOMEWORK_REQUEST_CODE
if (resultCode == Activity.RESULT_OK && requestCode == ASSIGN_HOMEWORK_REQUEST_CODE) {
// 需要注意判断data是否为null
String dataStr = data.getStringExtra(KEY_ASSIGN_HOMEWORK_RESULT);
ToastUtils.showToast("关闭了H5页面,接收到数据:" + dataStr);
// 成功布置作业后,dataStr的值为 `"{\"type\":\"publish_homework_success\"}"`
}
}
3) 检查作业
Alo7HomeworkSDK.checkHomework(this, homeworkId, token, new ResultCallback() {
@Override
public void onSuccess() {
// checkHomework是一个异步操作,调用成功后会自动跳转到检查作业页面
// 调用checkHomework时需要展示Loading,请求成功后可在此处隐藏Loading,
}
@Override
public void onError(Alo7Error error) {
// 可通过error.getErrorCode处理相应异常
}
});
4) 异常与错误码
Homework SDK接口的异常被封装在Alo7Error中,当发生异常时会通过回调onError方法给出Alo7Error异常信息
public interface ResultCallback {
void onSuccess();
void onError(Alo7Error error);
}
Alo7Error中封装了errorCode和errorMessage,可以根据errorCode进行相关错误的判断,errorCode如下:
errorCode |
描述 |
|
homework.teacher_is_not_in_clazz |
教师不在该班级或者已经退班了 |
|
connect.error |
连接服务器异常 |
|
connect.timeout |
连接服务器超时 |
|
parse.error |
解析服务器返回的数据出现异常 |
|
unknown.server.exception |
未知的服务器异常 |
|
unknown.exception |
未知异常 |
5) 回调参数说明
回调参数是个通用的数据结构,序列化之后是个 {type: string,payload?: any} 类型,目前的 type 可能是如下值:
type |
描述 |
|
publish_homework_success |
布置作业成功 |
-
学生场景
1) SDK初始化
在Application中初始化HomeworkSDK
// 携带参数启动 SDK
// debugMode 是一个布尔值,表示是否为debug模式,为true时会有相关日志输出
Alo7HomeworkSDK.initialize(this, debugMode);
2)学生做作业
Alo7HomeworkSDK.showHomework(this, homeworkId, token, new ResultCallback() {
@Override
public void onSuccess() {
// showHomework是一个异步操作,调用成功后会自动跳转到查看作业页面
// 调用checkHomework时需要展示Loading,请求成功后可在此处隐藏Loading
}
@Override
public void onError(Alo7Error error) {
// 可通过error.getErrorCode处理相应异常
}
});
3) 异常与错误码
Homework SDK接口的异常被封装在Alo7Error中,当发生异常时会通过回调onError方法给出Alo7Error异常信息
public interface ResultCallback {
void onSuccess();
void onError(Alo7Error error);
}
Alo7Error中封装了errorCode和errorMessage,可以根据errorCode进行相关错误的判断,errorCode如下:
errorCode |
描述 |
|
homework.student_is_not_in_clazz |
学生不在该班级或者已经退班了 |
|
homework.no_accessible_visa |
没有学习套餐 |
|
connect.error |
连接服务器异常 |
|
connect.timeout |
连接服务器超时 |
|
parse.error |
解析服务器返回的数据出现异常 |
|
unknown.server.exception |
未知的服务器异常 |
|
unknown.exception |
未知异常 |
Unresolved directive in index.adoc - include::data_feed.adoc[]