如何集成 RongIMLib

如何集成 RongIMLib,如何获取会话,如何获取历史消息,如何接收消息。
发布时间: 2016-07-17 20:54

回答:

集成方法是:

1.调用 RongIMClient.init() 初始化 sdk

2.设置接收消息监听,所有对方发过来的消息,都会调用此方法。

/**
 * <p>设置接收消息事件的监听器。所有接收到的消息、通知、状态都经由此处设置的监听器处理。包括私聊消息、讨论组消息、群组消息、聊天室消息以及各种状态。</p>
 * <strong>注意:</strong>如果调用此接口的Activity被释放回收,将无法收到事件回调。
 *
 * @param listener 接收消息的监听器。
 */
public static void setOnReceiveMessageListener(final OnReceiveMessageListener listener)

2.设置连接状态监听,所有连接状态变化都会走该方法。同一个账号登录,一个被踢掉时,也会回调此方法,error code 是

KICKED_OFFLINE_BY_OTHER_CLIENT(3, "Login on the other device, and be kicked offline.")
/**
 * 设置连接状态变化的监听器。在自定义UI时,会需要调用此接口判断当前连接状态,来绘制UI及决定逻辑走向。
 *
 * @param listener 连接状态变化的监听器。
 */
public static void setConnectionStatusListener(final ConnectionStatusListener listener)

3.获取到 token 后连接

/**
 * <p>连接服务器,在整个应用程序全局,只需要调用一次,需在 {@link #init(Context)} 之后调用。</p>
 * <p>如果调用此接口遇到连接失败,SDK 会自动启动重连机制进行最多10次重连,分别是1, 2, 4, 8, 16, 32, 64, 128, 256, 512秒后。
 * 在这之后如果仍没有连接成功,还会在当检测到设备网络状态变化时再次进行重连。</p>
 *
 * @param token    从服务端获取的用户身份令牌(Token)。
 * @param callback 连接回调。
 * @return RongIMClient IM 客户端核心类的实例。
 */
public static RongIMClient connect(final String token, final ConnectCallback callback)


4.接收和发送的消息都会存到本地数据库,数据库路径在 /data/data/包名/files/你的 appkey/登录的 userId/storage 文件

5.获取会话列表

/**
 * <p>根据会话类型,获取当前用户的本地会话列表。即显示所有本地数据库中收发过消息,并且未被删除的会话。
 * <strong>注意:</strong>当更换设备或者清除缓存后,能拉取到暂存在融云服务器中该账号当天收发过消息的会话。</p>
 *
 * @param callback 获取会话列表的回调。
 */
public void getConversationList(final ResultCallback<List<Conversation>> callback)


6. 根据会话类型和 targetId 获取历史消息

/**
 * 根据会话类型的目标 Id,回调方式获取N条历史消息记录。
 *
 * @param conversationType 会话类型。不支持传入 ConversationType.CHATROOM。
 * @param targetId         目标 Id。根据不同的 conversationType,可能是用户 Id、讨论组 Id、群组 Id。
 * @param oldestMessageId  最后一条消息的 Id,获取此消息之前的 count 条消息,没有消息第一次调用应设置为:-1。
 * @param count            要获取的消息数量。
 * @param callback         获取历史消息记录的回调,按照时间顺序从新到旧排列。
 */
public void getHistoryMessages(Conversation.ConversationType conversationType, String targetId, int oldestMessageId, int count, RongIMClient.ResultCallback<List<Message>> callback)


图片消息和语音消息:

1.发送图片消息时,只需要构造 ImageMessage,传入本地图片地址和缩略图地址, 如果缩略图地址为 null,sdk 会默认从传入的本地图片生成缩略图。其中缩略图会转换成 base64 存储在数据库,并发送给对方,对方接收后,把 base64 转存为本地文件。

/**
 * 生成ImageMessage对象。
 *
 * @param thumUri  缩略图地址。
 * @param localUri 大图地址。
 * @return ImageMessage对象实例。
 */
public static ImageMessage obtain(Uri thumUri, Uri localUri)

通过调用历史消息接口,获取到的图片消息,其消息体中包含缩略图地址,图片所在服务器地址。如果已经下载,也会包含本地图片存储地址。

private Uri mThumUri;
private Uri mLocalUri;
private Uri mRemoteUri;

2.发送语音消息时,只需要构造 VoiceMessage,传入已录制好的语音消息存储地址和语音时常。sdk 会把传入的语音文件转换成 base64 存储在数据库,并发送给对方,对方接受后会将接受的 base64 存储成本地文件。

所以,通过接口拿到的语音消息相关数据都是已经存储好的语音文件,只需要访问此文件既可以。

public static VoiceMessage obtain(Uri uri, int duration)

通过调用历史消息接口,获取到的语音消息,其消息体中包含语音存储地址。

private Uri mUri;
private int mDuration;


我对此仍有疑问!继续追问