## 数字教材 SDK-Android 接入文档

### 1.接入

将 aar(例如:pep-sdk-v3.3.4-202509121434_sec.aar) 放入 app 工程 libs 目录下，并在 build.gradle 中增加依赖库

```
    implementation "androidx.multidex:multidex:2.0.1"
    implementation (name: 'pep-sdk-v3.3.4-202509121434_sec'此处需要替换对应版本, ext: 'aar')


    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'androidx.core:core-ktx:1.2.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation "com.google.android.material:material:1.1.0"
    implementation 'androidx.room:room-runtime:2.4.0'
    annotationProcessor 'androidx.room:room-compiler:2.4.0'
    implementation 'com.tencent:mmkv:1.0.23'
    implementation 'com.github.bumptech.glide:glide:4.9.0'
    implementation 'com.squareup.okhttp3:okhttp:3.10.0'
    implementation 'com.squareup.retrofit2:retrofit:2.4.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.4.0'
    implementation 'com.google.android.exoplayer:exoplayer:2.10.4'
    implementation 'com.google.android.exoplayer:extension-rtmp:2.10.4'
    implementation 'com.mindorks.android:prdownloader:0.6.0'
    implementation 'com.nineoldandroids:library:2.4.0'
    implementation 'io.github.youth5201314:banner:2.2.2'
    implementation 'io.github.lucksiege:pictureselector:v3.11.1'
    implementation 'io.github.lucksiege:ucrop:v3.11.1'
    implementation 'io.github.lucksiege:compress:v3.11.1'
    implementation 'org.greenrobot:eventbus:3.1.1'
    implementation 'com.github.JakeWharton:ViewPagerIndicator:2.4.1'
    implementation 'com.jaeger.statusbarutil:library:1.5.1'
    implementation 'jp.wasabeef:glide-transformations:2.0.2'
    implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
    implementation 'com.scwang.smartrefresh:SmartRefreshHeader:1.1.0'
    implementation 'com.liulishuo.filedownloader:library:1.7.7'
    implementation 'com.github.chrisbanes.photoview:library:1.2.4'
    implementation 'com.github.bumptech.glide:glide:4.9.0'
```

### 1.初始化

在项目 Application 中 onCreate 方法加入数字教材初始化代码：

```
PepApp.init(this, "baseUrl", "APPKEY")
```

备注：appkey 找商务沟通获取

### 2.授权登录和登出

登录流程为 APP 请求自己的服务端获得 code 和 userid，然后调用 SDK 的 netAccessTokenLogin 方法进行授权登录，授权登录成功后才可以进行接下来的流程，建议用户在登录自己的用户体系后在登录数字教材 SDK，在退出登录时候调用 SDK 退出登录方法

```
PepApp.netAccessTokenLogin("CODE","USERID",true,object :OnLoginCallBackListener{
	override fun onSuccess() {
	}

	override fun onError() {
	}
})
```

登出

```
PepApp.loginOut()
```

备注：登录第三个参数为是否自动登录，若为 true，下次初始化后自动回复登录状态

### 3.使用-整本模式

在授权登录成功后，可以跳转到用户的自己的Activity，在Activity中嵌套数字教材的MyBookFragment和BookCenterFragment
可以参考PepMainPadActivity和PepMainPhoneActivity

### 4.使用-单册 API 模式

单册 API 模式为对接方不想使用 SDK 的书架，想自定义书架，这时 SDK 开放了一系列的 API 可供 APP 使用，不过接入成本会增加，因为需要 app 根据下载状态自己处理 UI 逻辑，要注意的是，阅读页同样不支持定制



#### 下载教材

```
BookDownLoadManager.getInstance().downLoadBook("教材ID")

```


#### 打开教材

```
PEPBookReadActivity.invoke(Activity, "教材ID")

```

#### 获取已下载的教材信息

```
PepApp.getBookDataBase().getBookDao().getBooks(PepApp.getCurrentUserId(), false)

```

#### 下载监听

```
BookDownLoadManager.getInstance().addOnDownloadListener("教材ID",object :BookDownLoadManager.OnDownloadListener{
	override fun onProgressStatus(bookId: String?, progress: Long, speed: String?, status: Int) {
		//下载成功
		if (status != BookDownloadCallable.BOOK_DOWN_COMPLETE) {

		}
		//下载失败
		if(status ==  BookDownloadCallable.BOOK_DOWN_COMPLETE){

		}
		//解压中
		if(status ==  BookUnZipCallable.BOOK_DOWN_UNZIP_LOAD){

		}
		//解压成功
		if(status ==  BookUnZipCallable.BOOK_DOWN_UNZIP_COMPLETE){

		}
	}

},"TAG");

```

bookId:书籍 id，progress:进度百分比，speed:网速，status:状态

#### 获取书籍是否是下载中状态

如果获取到的值是空，则表示当前未下载，一般用于 adapter 时候上下滚动，保存状态使用

```
 final BookDownLoadManager.BookProgress bookProgress = getDownManagerInstance().getBookProgress(book.bookId);

```

#### 取消下载

```
BookDownLoadManager.getInstance().removeBookDownload(etBooks.text.toString())
```

####

#### 删除教材

```
BookDownLoadManager.getInstance().deleteBooks(etBooks.text.toString())
```

#### 获取章节列表（教材未打开）

```
StaticCascadeConfig.getSections(this@HomeActivity, etBooks.text.toString(), object : StaticCascadeConfig.OnSectionDataListener {
	override fun onSucess(sections: MutableList<Section>?) {
		PEPToast.show(applicationContext, sections.toString())
		}

		override fun onError() {
		}
})
```

#### 获取教材中心筛选信息

```
StaticCascadeConfig.getStaticMetadataBean(object : StaticCascadeConfig.OnStaticCascadeListener {
                override fun onData(staticCascadeModel: StaticCascadeModel?) {
                    if (staticCascadeModel != null) {
                        PEPToast.show(applicationContext, staticCascadeModel.toString())
                    }
                }
            })
```
#### 单册教材下载, sdk升级后, 检查教材是否需要更新
```
 boolean needUpdate = PepApp.bookNeedUpdate(bookId);

```

### 阅读内页功能控制

```
/**
* 设置全部（边栏）是否显示可见
* @param b   true：可见 ， false：不可见
*/
 ReadpageConfig.setSidebarVisible(boolean b)
 
/**
* 设置目录是否显示可见
* @param b   true：可见 ， false：不可见
*/
 ReadpageConfig.setDirectoryVisible(boolean b) 
 
/**
* 设置收藏是否显示可见
* @param b   true：可见 ， false：不可见
*/
 ReadpageConfig.setCollectionVisible(boolean b) 
 
/**
* 设置笔记列表是否显示可见
* @param b   true：可见 ， false：不可见
*/
 ReadpageConfig.setNotesVisible(boolean b) 
 
/**
* 设置注释是否显示可见
* @param b   true：可见 ， false：不可见
*/
 ReadpageConfig.setCommentsVisible(boolean b)  
 
/**
* 设置学科工具是否显示可见
* @param b   true：可见 ， false：不可见
*/
 ReadpageConfig.setSubjectToolsVisible(boolean b) 

```

### 定制阅读内页，参考 BookReadActivity
### PEPBookReadFragment提供方法

```
/**
* 获取章节列表
*/
val sectionList:List<Section> = PEPBookReadFragment().sectionList

/**
* 目录跳转
* @section  来自上边的sectionList方法
*/
bookReadFragment.gotoPage(section)；

/**
* 获取学科工具列表
*/
bookReadFragment.getSubjectTools(object : ToolsListCallback {
            override fun onResponse(arrayList: ArrayList<SubjectToolsModel>) {
            }

            override fun onFailure(call: Call<ArrayList<SubjectToolsModel>>, throwable: Throwable) {
            }
        })

/**
* 打开学科工具
* @model  来自上边的getSubjectTools方法
*/
bookReadFragment.openSubjectTool(model)

/**
* 获取学科工具图标
* @id 来自 model.appId
*/
bookReadFragment.getSubjectIcon(id)

```


### 混淆

```
-keep class com.pep.core.** { *; }
-keep class com.ckl.** { *; }
-keep class com.creative.** { *; }
-keep class com.gumi.** { *; }
-keep class com.foxit.sdk.** { *; }
-keep class com.foxit.uiextensions.** { *; }
-dontwarn com.foxit.sdk.**
-dontwarn  com.foxit.uiextensions.**
-keepattributes Exceptions, Signature, InnerClasses
-keepattributes SourceFile,LineNumberTable
```
