Android端集成

您可以通过阅读本文档,了解阿里云互动直播PaaS的Android端集成操作。

环境要求

  • 系统版本:支持Android 4.1及以上版本。

  • API版本:支持16及以上版本。

  • CPU架构:支持实体设备架构armeabi、armeabi-v7a、arm64-v8a。

  • 其他:不支持视频采集旋转,不支持USB外接摄像头。

集成步骤

添加SDK依赖

  1. 下载并解压Android SDK。

    在控制台创建应用后,互动直播会根据您选配的组件,生成您需要的SDK,请在控制台下载。

  2. 复制aar文件到主工程下的libs文件夹中。

  3. 配置arr依赖。

    build.gradle文件下的dependencies字段下添加代码:

    implementation fileTree(dir: "libs", include: ["*.jar", ""*.aar""])
  4. sync当前工程。sync

配置权限

AndroidManifest.xml文件中添加如下代码,获取相应的设备权限。

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

防混淆配置

proguard-rules.pro文件中,添加如下-keep类的配置。

-keep class com.aliyun.roompaas.base.inner.InnerService
-keep class com.aliyun.roompaas.chat.ChatService
-keep class com.aliyun.roompaas.chat.ChatServiceImpl
-keep class com.aliyun.roompaas.live.LiveService
-keep class com.aliyun.roompaas.live.LiveServiceImpl
-keep class com.aliyun.roompaas.live.LiveInnerServiceImpl
-keep class com.aliyun.roompaas.rtc.RtcService
-keep class com.aliyun.roompaas.rtc.RtcServiceImpl
-keep class com.aliyun.roompaas.whiteboard.WhiteboardService
-keep class com.aliyun.roompaas.whiteboard.WhiteboardServiceImpl

使用示例

SDK初始化

RoomEngine.getInstance().init(this,
        new EngineConfig.Builder()
                .appId(Const.APP_ID)
                .appKey(Const.APP_KEY)
                .longLinkUrl(Const.LONG_LINK_URL)
                .envType(Const.ENV_TYPE)
                .deviceId(Const.DEVICE_ID)
                .build(),
        new Callbacks.Log<>(TAG, "init engine")
);

建立长连接通道

GetTokenApi.getToken是调用业务服务端的请求。业务服务端结合AccessKey ID和AccessKey Secret通过pop接口调用getLoginToken获取。

// 通过业务服务端获取Token信息
GetTokenApi.getToken(userId, new Callback<DPSAuthToken>() {
    @Override
    public void onSuccess(DPSAuthToken token) {
        TokenInfo tokenInfo = new TokenInfo();
        tokenInfo.accessToken = token.accessToken;
        tokenInfo.refreshToken = token.refreshToken;
    // 调用SDK提供的login方法
        roomEngine.login(userId, tokenInfo, new Callback<Void>() {
            @Override
            public void onSuccess(Void data) {
                Const.currentUserId = userId;
                userSp.setUserId(userId);
                userIdInput.setEnabled(false);
                view.setEnabled(false);
                showToast("登录成功");
            }
            @Override
            public void onError(String errorMsg) {
                showToast("登录失败: " + errorMsg);
            }
        });
    }
    @Override
    public void onError(String errorMsg) {
        showToast("获取Token失败: " + errorMsg);
    }
});

房间相关API调用

  • 通过RoomEngine来获取到RoomChannel实例,进而对房间进行相关操作;

  • 通过RoomChannel.getPluginService来获取插件服务,进而调用插件服务相关方法。

// 获取RoomChannel
roomChannel = RoomEngine.getInstance().getRoomChannel(roomId);
// 获取插件服务
chatService = roomChannel.getPluginService(ChatService.class);
liveService = roomChannel.getPluginService(LiveService.class);
// 监听事件
roomChannel.setEventHandler(this::onRoomEvent);
chatService.setEventHandler(this::onChatEvent);
liveService.setEventHandler(this::onLiveEvent);
// 进房间
roomChannel.enterRoom(nick, new Callback<Void>() {
    @Override
    public void onSuccess(Void data) {
        RoomDetail roomDetail = roomChannel.getRoomDetail();
        onEnterRoomSuccess(roomDetail);
    }
    @Override
    public void onError(String errorMsg) {
        onEnterRoomError(errorMsg);
    }
});

SDK登出

需要断开长连接通道时,调用RoomEngine.logout进行注销登录。