2 快速集成 - polyv/polyv-android-cloudClass-sdk-demo GitHub Wiki
提前下载保利威云课堂Demo,请先下载Demo。
以下要求为硬性要求:
| 名称 | 要求 |
|---|---|
| minSdkVersion | >=21 (Android 5.0) |
| targetSdkVersion | >=27 (Android 8.1) |
| abiFilters | arm64-v8a、armeabi-v7a、x86 |
| jdk version | 1.7.0 |
| 集成工具 | Android Studio |
注1:开发者如需兼容minSdkVersion >= 16 (Android 4.x设备),请按OkHttp4.x版本降级到3.x兼容方案处理。
注2:so库的配置只能使用[arm64-v8a、armeabi-v7a、x86]的一种或几种,否则可能在部分机型上出现崩溃或者音画不同步、跳秒播放等情况。
注3:如需适配Android 11,即targetSdkVersion=30,目前需要暂时关闭指针标记功能(Android官方关于指针标记的说明),参考以下代码修改AndroidManifest.xml以关闭指针标记。
<application
android:allowNativeHeapPointerTagging="false">
...
</application>| 模块名 | 作用 |
|---|---|
| app | 播放、聊天、连麦等功能演示 |
| commonui | 主要为一些自定义view、工具类等 |
如果您项目中还没有multiDex配置,则需要加上。配置方式可以参考配置方法数超过 64K 的应用。
打开您项目的app/build.gradle文件(app/..皆指您项目的application模块),把里面的minSdkVersion设置为21或以上,把targetSdkVersion设置为27或以上。
打开您项目的app/build.gradle文件,添加如下代码:
ndk {
abiFilters 'arm64-v8a', "armeabi-v7a", "x86" // DO NOT MODIFY THIS LINE, IT'S UPDATED BY BUILD MACHINE AUTOMATICALLY.
}
如果您项目原来就有该配置,并且abiFilters配置的范围在上述的范围内,则不要更改。
打开您项目的project/build.gradle文件,添加如下代码:
maven { url "https://jitpack.io" }
maven { url 'http://maven.aliyun.com/nexus/content/repositories/releases/' }
mavenCentral()
maven { url 'https://maven.aliyun.com/repository/public' }
由于app和commonui模块中的sdkVersion和versionCode等信息是用polyv-demo的project/build.gradle配置,故需要将其添加到您的项目中,才能使模块正常编译和运行。
打开您项目的project/build.gradle文件,添加如下代码(代码也可从下载的polyv-demo中复制过来):
ext {
compileSdkVersion = 27
minSdkVersion = 21
targetSdkVersion = 27
versionCode = 70
versionName = "0.7.0"
}
在您的项目中,选择Import Module...->选择polyv-demo的commonui目录->点击Finish。导入完成后,打开您项目的project/settins.gradle文件,添加如下代码:
include ':commonui'
在您的项目中,选择Import Module...->选择polyv-demo的app目录->选择完成后,将Module name: app更改为Module name: polyvapp->点击Finish。导入完成后,打开您项目的project/settings.gradle文件,添加如下代码:
include ':polyvapp'
commonui和app(polyvapp)模块都导入完成后,这时是已经可以正常运行polyvapp模块了。接下来需要将polyvapp由application模块类型更改为library模块类型,以供您的application模块可以直接调用。
将polyvapp模块由application模块类型更改为library模块类型,需要以下步骤:
(1) 打开该模块的polyvapp/build.gradle文件,更改如下代码:
apply plugin: 'com.android.application' -> apply plugin: 'com.android.library'
defaultConfig {
consumerProguardFiles 'proguard-rules.pro' -> 添加这行代码
applicationId "com.easefun.polyv.cloudclassdemo" -> 注释/删除这行代码
}
//注释掉打包app用到的配置,例如:
android.applicationVariants.all { variant ->
variant.outputs.all {
outputFileName = "${variant.name}_${variant.versionName}_${currentTime()}.apk"
}
}
(2) 打开该模块的polyvapp/src/main/AndroidManifest.xml文件,更改如下代码:
<!--删除application的属性配置,并注释程序入口-->
<application>
<activity
android:name=".login.PolyvCloudClassLoginActivity"
android:windowSoftInputMode="stateHidden|adjustResize">
<!-- <intent-filter>-->
<!-- <action android:name="android.intent.action.MAIN" />-->
<!-- <category android:name="android.intent.category.LAUNCHER" />-->
<!-- </intent-filter>-->
</activity>
...
</application>(3) 打开该模块中的PolyvCloudClassApp.java文件,更改如下代码:
原来polyv-sdk的初始化是放到polyv-demo的PolyvCloudClassApp的onCreate方法里执行,现在改为了library,则需要把PolyvCloudClassApp的onCreate方法里的代码提取出来封装到一个静态方法里,供您的Application的onCreate方法里调用。
//新增以下方法,并把原来onCreate方法里的初始化代码剪切到这里来
public static void init(Application application) {
// Normal app init code...
PolyvCommonLog.setDebug(true);
PolyvLiveSDKClient liveSDKClient = PolyvLiveSDKClient.getInstance();
liveSDKClient.initContext(application);
PolyvVodSDKClient client = PolyvVodSDKClient.getInstance();
client.setConfig(config, aeskey, iv);
}
//由于原来的config、aeskey、iv是非静态成员,所以需要更改为静态成员才能在静态方法里使用
private static String iv = "2u9gDPKdX6GyQJKU";
private static String aeskey = "VXtlHmwfS2oYm0CZ";
private static String config = "";
(4) 选中该模块目录,点击Build->Make Module 'polyvapp',待编译完成后,会发现报**Compilation failed; see the compiler error output for details.**错误。点开左侧的Java compiler可以发现具体的错误为"错误;需要常量表达式",这是由于library模块里的资源id不是常量,不能使用switch语句导致的。
解决方式:点击错误信息定位到对应的代码,把switch语句改为if语句。如果是windows系统,选中switch,按alt+enter,选择Replace 'switch' with 'if'即可完成替换。
打开您项目的app/build.gradle文件,添加以下代码即可完成对polyvapp模块的依赖:
implementation project(':polyvapp')
修改polyvapp模块的build.gradle文件,对commonui模块的依赖方式,以保证能在主项目中使用SDK。
api project(':commonui')至此已完成对polyv云课堂sdk的模块集成。
打开您项目的Application.java这个文件(在AndroidManifest.xml里配置了application name的类),在onCreate方法里添加如下代码:
PolyvCloudClassApp.init(this);
至此已完成对polyv云课堂sdk的模块集成和初始化。
在您项目的Activity中,使用startActivity(new Intent(this, PolyvCloudClassLoginActivity.class));代码即可跳转到登录页。
如果调用代码报java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.错误,把您项目的AndroidManifest.xml文件里的application标签的android:theme改为Theme.AppCompat.Light.NoActionBar即可解决。
登录页的作用是检验参数及获取频道的直播/回放类型,再把参数传给观看页以创建对应类型的播放器播放视频。
(1) 观看页可以由登录页点击登录进入。
(2) 观看页在polyv-demo中是以一个页面交互设计的,如果您需要直接跳到观看页,并且已知频道的直播/回放类型,则调用以下的代码即可:
//配置账号信息,账号信息在直播后台开发设置中有展示
PolyvLinkMicClient.getInstance().setAppIdSecret(appId, appSecert);
PolyvLiveSDKClient.getInstance().setAppIdSecret(appId, appSecert);
PolyvVodSDKClient.getInstance().initConfig(appId, appSecert);
//根据您的需求选择下面一种方式进入观看页,使用方式在Demo登录页有展示
//播放直播
PolyvCloudClassHomeActivity.startActivityForLive(this, channelId, userId, isAlone);//isAlone为是否是普通直播类型
//0.13.0开始,新增了isParticipant,rtctype
//开发者应当通过SDK请求服务器rtctype的值传参再跳转,获取方式参考demo的requestLiveDetail方法
//注意,rtctype暂不支持ucloud方式
PolyvCloudClassHomeActivity.startActivityForLiveWithParticipant(activity, channelId, userId, isNormalLive, isParticipant,rtcType);
//播放回放
PolyvCloudClassHomeActivity.startActivityForPlayBack(this, playbackVideoId, playbackChannelId, playbackUserId, isNormalLivePlayBack, videoListType);//「videoListType : 0 回放列表 | videoListType : 1 点播列表 」(3) 如果您需要校验参数或者获取直播/回放类型,可以用以下的方法:
//检验参数
//注意直播类型的参数校验时,不能传vid
//回放类型的参数校验时,不能传appSecret
PolyvLoginManager.checkLoginToken(String userId, String appSecret, String appId, String channelId, String vid, PolyvrResponseCallback callback);
//获取频道的直播类型
PolyvResponseExcutor.excuteUndefinData(PolyvApiManager.getPolyvLiveStatusApi().geLiveStatusJson(channelId), responseCallback);
//获取vid的回放类型
PolyvLoginManager.getPlayBackType(String vid, PolyvrResponseCallback<PolyvPlayBackVO> polyvResponseCallback);
(4)如果要使用聊天室私有化部署(聊天室域名切换)的功能
那么必须要调用:PolyvLoginManager.checkLoginToken,从返回的结果的PolyvChatDomain变量,设置到聊天室私有域名管理器类中:
PolyvChatDomainManager.getInstance().setChatDomain(responseBean);
以上方法的用例皆可在PolyvCloudClassLoginActivity中找到。
在PolyvCloudClassHomeActivity中默认实现了观看用户的用户id和昵称。开发者需要修改赋值为自己用户系统的用户id和昵称,才能保证sdk与开发者应用的数据连通。
private void initialStudentIdAndNickName() {
//初始化观众id和观众昵称,用于统计数据
if (isParticipant) {
viewerId = PolyvVClassGlobalConfig.viewerId;
viewerName = PolyvVClassGlobalConfig.username;
} else {
//todo 这里仅为了展示使用,开发者应当将viewerid、viewerName设置为观看学员的用户ID和昵称,以保证直播SDK的统计数据映射到开发者的用户系统
viewerId = "" + Build.SERIAL;
viewerName = "学员" + viewerId;
}
PolyvVClassGlobalConfig.userId = userId;
}