目录

适用平台

适用于任何Java平台,包括但不限于安卓/Java服务器/Java桌面等

添加依赖包

在项目中添加sdk目录中最新的jar包:
   |--mimc-java-sdk-0.0.9-SNAPSHOT.jar
      |--xmd-transceiver-1.0.2.19-SNAPSHOT.jar
      |--protobuf-lite-3.0.0.jar

Android中,Gradle引入:
    compile 'com.google.protobuf:protobuf-lite:3.0.0'
Java中,pom引入:
    <dependency>
        <groupId>com.google.protobuf</groupId>
        <artifactId>protobuf-lite</artifactId>
        <version>3.0.0</version>
    </dependency>

安卓配置

    // 权限
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission android:name="android.permission.CAMERA"/>

日志

打印到控制台

// 默认控制台不打印日志,若需要打印到控制台,实现如下接口:
MIMCLog.setLogger(new Logger() {
    @Override
    public void d(String tag, String msg) {
    }

    @Override
    public void d(String tag, String msg, Throwable th) {
    }

    @Override
    public void i(String tag, String msg) {
    }

    @Override
    public void i(String tag, String msg, Throwable th) {
    }

    @Override
    public void w(String tag, String msg) {
    }

    @Override
    public void w(String tag, String msg, Throwable th) {
    }

    @Override
    public void e(String tag, String msg) {
    }

    @Override
    public void e(String tag, String msg, Throwable th) {
    }
});

/**
 * 设置控制台打印日志级别,默认INFO级别
 * @param[level]: 
 *    MIMCLog.DEBUG
 *    MIMCLog.INFO(默认)
 *    MIMCLog.WARN
 *    MIMCLog.ERROR
 */
MIMCLog.setLogPrintLevel(int level);

/**
 * 获取堆栈异常信息
 */
MIMCLog.getStackTraceString(Throwable th);

写到本地文件

/**
 * 是否启用本地写日志文件功能,默认启用,日志文件所在位置是在调用MIMCUser.newInstance()时,传入的cachePath处。
 * @param[isSave]: true启用,false关闭
 */
MIMCLog.enableLog2File(boolean isSave);

/**
 * 设置本地保存日志级别,默认INFO级别
 * @param[level]: 
 *    MIMCLog.DEBUG
 *    MIMCLog.INFO(默认)
 *    MIMCLog.WARN
 *    MIMCLog.ERROR
 */
MIMCLog.setLogSaveLevel(int level);

用户登录

用户初始化

/**
 * @param[appAccount]: 用户在APP帐号系统内的唯一帐号ID
 * @param[cachePath]: Android和Java都必须传入合法的路径,否则返回null,用于缓存Token、Resource以及日志文件等信息
 * @param[resource]: 用户设备的标识
 *    如不指定resource,SDK自动生成并支持多设备登录
 *    如开发者指定resource,则需支持多设备登录:
 *        同一台设备,resource要保持不变
 *        不同设备,resource要相互不同
 */
User user = MIMCUser.newInstance(String appAccount, String cachePath);
User user = MIMCUser.newInstance(String appAccount, String cachePath, String resource);

user.registerTokenFetcher(MIMCTokenFetcher tokenFetcher);
user.registerOnlineStatusListener(MIMCOnlineStatusListener onlineStatusListener);
user.registerMessageHandler(MIMCMessageHandler messageHandler);
user.registerUnlimitedGroupHandler(MIMCUnlimitedGroupHandler unlimitedGroupHandler);
user.registerRtsCallHandler(MIMCRtsCallHandler rtsCallHandler);

安全认证

参考 安全认证

interface MIMCTokenFetcher{
    /**
     * 同步访问代理认证服务(appProxyService),
     * 从代理认证服务返回结果中获取[小米认证服务下发的原始数据]并返回
     */
    public String fetchToken();
}

登录

/**
 * 进程整个生命周期内login()调用一次即可
 */
user.login();

在线状态变化回调

interface MIMCOnlineStatusHandler {
    /**
     * @param[status]: 登录状态,ONLINE 在线,OFFLINE 离线。
     * @param[errType]: 状态改变错误码
     * @param[errReason]: 状态改变错误原因
     * @param[errDescription]: 状态改变错误描述
     */
   public void statusChange(MIMCConstant.OnlineStatus status, String errType, String errReason, String errDescription);
}

登出

user.logout();

销毁

/**
 * 切换用户时,将老用户destroy掉,然后为新用户调用newInstance()
 */
user.destroy();

发送消息

发送单聊消息

/**
 * @param[toAppAccount]: 消息接收者在APP帐号系统内的唯一帐号ID
 * @param[payload]: 开发者自定义消息体
 * @param[isStore]: 消息是否存储在mimc服务端,true 存储, false 不存储, 默认存储。
 * @return: 客户端生成的消息ID
 *    返回null:消息未进入发送队列
 */
String packetId = user.sendMessage(String toAppAccount, byte[] payload);
String packetId = user.sendMessage(String toAppAccount, byte[] payload, boolean isStore);

发送群聊消息

/**
 * @param[groupId]: 群ID,也称为topicId
 * @param[payload]: 开发者自定义消息体
 * @param[isStore]: 消息是否存储在mimc服务端,true 存储, false 不存储, 默认存储。
 * @return: 客户端生成的消息ID
 *    返回null:消息未进入发送队列
 */
String packetId = user.sendGroupMessage(long groupID, byte[] payload);
String packetId = user.sendGroupMessage(long groupID, byte[] payload, boolean isStore);

发送无限大群消息

/**
 * @param[topicId]: 群ID
 * @param[msg]: 开发者自定义消息体
 * @param[isStore]: 消息是否存储在mimc服务端,true 存储, false 不存储, 默认存储。
 * @return: 客户端生成的消息ID
 */
String packetId = user.sendUnlimitedGroupMessage(long topicId, byte[] msg);
String packetId = user.sendUnlimitedGroupMessage(long topicId, byte[] msg, boolean isStore);

接收消息

interface MIMCMessageHandler {
    public void handleMessage(List<MIMCMessage> packets);
    public void handleGroupMessage(List<MIMCGroupMessage> packets);
    public void handleUnlimitedGroupMessage(List<MIMCGroupMessage> packets);

    /**
     * @param[serverAck]: 服务器返回的serverAck对象
     *        serverAck.packetId: 客户端生成的消息ID
     *        serverAck.timestamp: 消息发送到服务器的时间(单位:ms)
     *        serverAck.sequence: 服务器为消息分配的递增ID,可用于去重/排序
     */
    public void handleServerAck(MIMCServerAck serverAck);

    public void handleSendMessageTimeout(MIMCMessage message);
    public void handleSendGroupMessageTimeout(MIMCGroupMessage groupMessage);
    public void handleSendUnlimitedGroupMessageTimeout(MIMCGroupMessage groupMessage);
}

无限大群

创建无限大群

/**
 * @param[topicName]: 群名
 * @param[obj]: 用户自定义传入的对象,通过回调函数原样传出
 */
user.createUnlimitedGroup(String topicName, Object obj);

加入无限大群

/**
 * @param[topicId]: 群ID
 * @param[obj]: 用户自定义传入的对象,通过回调函数原样传出
 * @return: 客户端生成的消息ID
 */
String packetId = user.joinUnlimitedGroup(long topicId, Object obj);

退出无限大群

/**
 * @param[topicId]: 群ID
 * @param[obj]: 用户自定义传入的对象,通过回调函数原样传出
 * @return: 客户端生成的消息ID
 */
String packetId = user.quitUnlimitedGroup(long topicId, Object obj);

解散无限大群

/**
 * @param[topicId]: 群ID
 * @param[obj]: 用户自定义传入的对象,通过回调函数原样传出
 */
user.dismissUnlimitedGroup(long topicId, Object obj);

无限大群回调

interface MIMCUnlimitedGroupHandler {
    /**
     * @param[topicId]: 群ID
     * @param[topicName]: 群名
     * @param[success]: 创建成功与否,true成功,false失败
     * @param[errMsg]: 错误描述
     * @param[obj]: 用户自定义传入的对象
     */
    void handleCreateUnlimitedGroup(long topicId, String topicName, boolean success, String errMsg, Object obj);

    /**
     * @param[topicId]: 群ID
     * @param[code]: 错误码,0成功,非0失败
     * @param[errMsg]: 错误描述
     * @param[obj]: 用户自定义传入的对象
     */
    void handleJoinUnlimitedGroup(long topicId, int code, String errMsg, Object obj);



    /**
     * @param[topicId]: 群ID
     * @param[code]: 错误码,0成功,非0失败
     * @param[errMsg]: 错误描述
     * @param[obj]: 用户自定义传入的对象
     */
    void handleQuitUnlimitedGroup(long topicId, int code, String errMsg, Object obj);

    /**
     * @param[code]: 错误码,0成功,非0失败
     * @param[errMsg]: 错误描述
     * @param[obj]: 用户自定义传入的对象
     */
    void handleDismissUnlimitedGroup(int code, String errMsg, Object obj);
}

实时流

发起会话

/**
 * @param[toAppAccount]: 接收方账号
 * @param[toResource]: 用户设备的标识
 * @param[appContent]: 可以给接收方携带数据
 * @return: 会话ID,唯一标识当前流会话
 */
Long chatId = user.dialCall(String toAppAccount);
Long chatId = user.dialCall(String toAppAccount, String toResource);
Long chatId = user.dialCall(String toAppAccount, byte[] appContent);
Long chatId = user.dialCall(String toAppAccount, String toResource, byte[] appContent);

发送数据

/**
 * @param[chatId]: 会话ID
 * @param[data]: 流数据
 * @param[dataType]: 数据类型,音频:AUDIO,视频:VIDEO
 */
user.sendRtsData(Long chatId, byte[] data, RtsDataType dataType);

关闭会话

/**
 * @param[chatId]: 会话ID
 * @param[byeReason]: 描述信息
 */
user.closeCall(Long chatId);
user.closeCall(Long chatId, String byeReason);

实时流回调

interface MIMCRtsCallHandler {
    /**
     * @param[fromAccount]: 发起方账号
     * @param[fromResource]: 用户设备的标识
     * @param[chatId]: 会话ID
     * @param[appContent]: 发起方携带的数据
     * @return: LaunchedResponse,成员accepted表示是否接受会话,成员errMsg携带描述信息
     */
    LaunchedResponse onLaunched(String fromAccount, String fromResource, Long chatId, byte[] appContent);

    /**
     * @param[chatId]: 会话ID
     * @param[accepted]: 接收方同意ture,拒绝false
     * @param[errMsg]: 描述信息
     */
    void onAnswered(Long chatId, boolean accepted, String errMsg);

    /**
     * @param[chatId]: 会话ID
     * @param[errMsg]: 描述信息
     */
    void onClosed(Long chatId, String errMsg);

    /**
     * @param[chatId]: 会话ID
     * @param[data]: 流数据
     * @param[dataType]: 数据类型,AUDIO,VIDEO
     * @param[channelType);]: 通道类型,RELAY、P2P_INTERNET、P2P_INTRANET
     */
    void handleData(Long chatId, byte[] data, RtsDataType dataType, RtsChannelType channelType);
}

回到顶部

results matching ""

    No results matching ""