Android融云会话及会话列表的实现

一、服务端好友关系列表在自己的服务器上已部署完成,并且实现了与融云服务器的交互

二、通过App发送消息到自己的服务端,得到App与自己服务器交互的token以及App与融云服务器交互的token

1、App自己服务器token(令牌),用于App与自己服务器交互

2、App融云服务器token(令牌),用户App与融云服务器交互

三、在融云官方网站上下载IMKit、IMLib,并进行添加配置


四、一般在Application onCreate()函数中进行融云初始化设置

public class Application extends Application implements RongIM.UserInfoProvider{
    @Override
    public void onCreate() {
        super.onCreate();
        if (getApplicationInfo().packageName.equals(getCurProcessName(getApplicationContext())) ||
                "io.rong.push".equals(getCurProcessName(getApplicationContext()))) {

            RongIM.init(this);
            RongIM.setOnReceiveMessageListener(new RongMessageHandling.MyReceiveMessageListener());
            RongIM.setConnectionStatusListener(new RongMessageHandling.MyConnectionStatusListener());
            RongIM.getInstance().registerConversationTemplate(new RongMessageHandling.MyPrivateConversationProvider());
            //RongIM.getInstance().registerMessageTemplate(new MyTextMessageItemProvider());
        }
    }

    /**
     * 获取融云所需用户信息
     * */
    @Override
    public UserInfo getUserInfo(String userId) {
        if (FriendInfoList.getInstance() == null) {
            return null;
        }
        return FriendInfoList.getInstance().getUserInfoByUserId(userId);
    }
}

定义相应的监听类

/**
 * 融云消息监听
 */
static public class MyReceiveMessageListener implements RongIMClient.OnReceiveMessageListener {
    /**
     * 收到消息的处理。
     *
     * @param message 收到的消息实体。
     * @param left    剩余未拉取消息数目。
     * @return 收到消息是否处理完成,true 表示自己处理铃声和后台通知,false 走融云默认处理方式。
     */
    @Override
    public boolean onReceived(Message message, int left) {
        switch (message.getConversationType()){
            case PRIVATE:           //单聊
                Log.d("MyReceiveMessage", "--单聊");
                break;
            case GROUP:             //群组
                Log.d("MyReceiveMessage", "--群组");
                break;
            case DISCUSSION:        //讨论组
                Log.d("MyReceiveMessage", "--讨论组");
                break;
            case CHATROOM:          //聊天室
                Log.d("MyReceiveMessage", "--聊天室");
                break;
            case CUSTOMER_SERVICE:  //客服
                Log.d("MyReceiveMessage", "--客服");
                break;
            case SYSTEM:            //系统会话
                Log.d("MyReceiveMessage", "--系统会话");
                break;
            default:
                break;
        }

        return false;
    }
}

/**
 * 自定义聊天会话的模型类
 */
@ConversationProviderTag(conversationType = "private", portraitPosition = 1)
static public class MyPrivateConversationProvider extends PrivateConversationProvider {
    @Override
    public View newView(Context context, ViewGroup group) {
        return super.newView(context, group);
    }

    @Override
    public void bindView(View v, int position, UIConversation data) {
        if(data.getConversationType().equals(Conversation.ConversationType.PRIVATE)) {
            data.setUnreadType(UIConversation.UnreadRemindType.REMIND_ONLY);

            //设置会话发送者ID、会话标题、会话头像URL
            String userID = data.getConversationSenderId();
            UserInfo info = FriendInfoList.getInstance().getUserInfoByUserId(userID);
            data.setIconUrl(info.getPortraitUri());
            data.setUIConversationTitle(info.getName());
            FriendInfoList.getInstance().refreshUserInfo(userID);
        }

        super.bindView(v, position, data);
    }
}
在设置了会话消息后,需要刷新当前的即时通信信息(FriendInfoList.getInstance().refreshUserInfo(userID))

RongIM.getInstance().refreshUserInfoCache(localUserInfo);
五、进行App与融云服务器的连接(这里的token为融云服务器token),这样就建立了会话通信的通道

//融云连接
RongMessageHandling.connect(getApplicationContext(),
        MyApplication.getInstance().getRongKey(),
        getApplicationInfo());
六、动态构建ConversationListActivity

1、activity_conversation_list.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/nc_bg"
    android:orientation="vertical">

    <FrameLayout
        android:id="@+id/rong_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />
</LinearLayout>
2、ConversationListActivity.java( ConversationActivity.java同理)

public class ConversationListActivity extends FragmentActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_conversation_list);
	setConversationView();
} void setConversationView(){ ConversationListFragment conversationListFragment = new ConversationListFragment(); Uri uri = Uri.parse("rong://" + getApplicationInfo().packageName).buildUpon() .appendPath("conversationlist") //设置私聊会话,该会话聚合显示 .appendQueryParameter(Conversation.ConversationType.PRIVATE.getName(), "false") //设置系统会话,该会话非聚合显示 .appendQueryParameter(Conversation.ConversationType.SYSTEM.getName(), "true") .build(); conversationListFragment.setUri(uri); FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction transaction = fragmentManager.beginTransaction(); transaction.add(R.id.rong_container,conversationListFragment); transaction.commit(); }}

3、Manifest设置(android:host="包名")

<!--会话列表界面-->
<activity
    android:name=".ui.ConversationListActivity"
    android:screenOrientation="portrait"
    android:windowSoftInputMode="stateHidden|adjustResize">

    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <data
            android:host="io.rong.fast"
            android:pathPrefix="/conversationlist/"
            android:scheme="rong" />
    </intent-filter>
</activity>

<!--会话界面-->
<activity
    android:name=".ui.ConversationActivity"
    android:screenOrientation="portrait"
    android:windowSoftInputMode="stateHidden|adjustResize">

    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <data
            android:host="xxx.xxx.xxx"
            android:pathPrefix="/conversation/"
            android:scheme="rong" />
    </intent-filter>
</activity>
七、在此,可以进行基本的会话了

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值