集成融云基础 IMKit
首先在官方 下载 IMKit SDK
这个key不知道能不能用 可以试试 pkfcgjstfb4z8
在自己的App build.gradle 里导入 即可
compile project(':IMKit')
下面是写的一个融云damo 简单的实现了聊天功能;是基于融云的damo写的
友情提示: 自己敲一遍 个人感觉要比看一遍明白很多
首先 App里初始化RongIM 导入不正确 会爆红
/**
* 作者: CoolTone
* 描述: App初始化
*/
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
RongIM.init(this);
}
}
main 里链接融云 和设置用户
这里要说一下 token1 token2 是咱们自己的服务端 那用户信息提交给融云之后返回的 token 不可更改
然后服务端交给前端这个token用来连接融云
RongIM.connect(token, new RongIMClient.ConnectCallback(){...}
getUserInfo 方法是向融云提供用户信息的方法,还要还有用户没有被赋值信息 就会走一遍该方法
/**
* 作者: CoolTone
* 描述: 这里链接融云 设置用户
*/
public class MainActivity extends AppCompatActivity implements View.OnClickListener, RongIM.UserInfoProvider {
private static final String token1 = "uFHTGcZMzSCSugxRmRA7lRf1AH3ArXbvLbNoacl+xLf5jFwBPsU0d+uBXWEKpLMlrv/cTWb4cdSdzE0shl1/oA==";
private static final String token2 = "0L3LhZvmEhmeY/O6z+jqkDdw425PLr6tFkyLhkSfXOmlDCw9tNfLfUcyTHdC9vWaTz2z6Hb0nwEYYnzkBXdBuw==";
private List<Friend> userIdList;
private static final String TAG = "MainActivity";
private Button mUser1, mUser2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mUser1 = (Button) findViewById(R.id.connect_10010);
mUser2 = (Button) findViewById(R.id.connect_10086);
mUser1.setOnClickListener(this);
mUser2.setOnClickListener(this);
initUserInfo();
}
private void connectRongServer(String token) {
RongIM.connect(token, new RongIMClient.ConnectCallback() {
@Override
public void onSuccess(String userId) {
if (userId.equals("10010")) {
mUser1.setText("用户1连接服务器成功");
startActivity(new Intent(MainActivity.this, HomeActivity.class));
Toast.makeText(MainActivity.this, "connect server success 10010", Toast.LENGTH_SHORT).show();
} else {
startActivity(new Intent(MainActivity.this, HomeActivity.class));
Toast.makeText(MainActivity.this, "connect server success 10086", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onError(RongIMClient.ErrorCode errorCode) {
Log.e(TAG, "connect failure errorCode is : " + errorCode.getValue());
}
@Override
public void onTokenIncorrect() {
Log.e(TAG, "token is error ,please check token and app key");
}
});
}
@Override
public void onClick(View v) {
if (v != null) {
switch (v.getId()) {
case R.id.connect_10010:
connectRongServer(token1);
break;
case R.id.connect_10086:
connectRongServer(token2);
break;
}
}
}
private void initUserInfo() {
userIdList = new ArrayList<>();
userIdList.add(new Friend("10010", "联通", "http://www.51zxw.net/bbs/UploadFile/2013-4/201341122335711220.jpg"));//联通图标
userIdList.add(new Friend("10086", "移动", "http://img02.tooopen.com/Download/2010/5/22/20100522103223994012.jpg"));//移动图标
userIdList.add(new Friend("KEFU144542424649464", "在线客服", "http://img02.tooopen.com/Download/2010/5/22/20100522103223994012.jpg"));
RongIM.setUserInfoProvider(this, true);
}
@Override
public UserInfo getUserInfo(String s) {
for (Friend i : userIdList) {
if (i.getUserId().equals(s)) {
Log.e(TAG, i.getPortraitUri());
return new UserInfo(i.getUserId(), i.getName(), Uri.parse(i.getPortraitUri()));
}
}
Log.e(TAG, "UserId is : "+ s);
return null;
}
}
布局很简单两个按钮
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
tools:context="com.zoommax.car.rongyun_demo.MainActivity">
<Button
android:id="@+id/connect_10010"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="20dp"
android:text="点击连接融云server(用户1)"/>
<Button
android:id="@+id/connect_10086"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="20dp"
android:text="点击连接融云server(用户2)"/>
</LinearLayout>
点击链接成功之后 会跳转 下一页面
页面设置了两个会话列表 和好友列表
里面 initConversationList 方法里简单设置了会话列表的展示
/**
* 作者: CoolTone
* 描述: 这里利用ViewPager 设置两个页面 会话列表 和 好友列表
*/
public class HomeActivity extends FragmentActivity {
private ViewPager mViewPager;
private FragmentPagerAdapter mFragmentPagerAdapter;// 将tab页面持久在内存中
private Fragment mConversationList;
private Fragment mConversationFragment = null;
private List<Fragment> mFragment = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
mConversationList = initConversationList(); // 获取融云会话列表的对象
mViewPager = (ViewPager) findViewById(R.id.viewpager);
mFragment.add(mConversationList); // 加入会话列表
mFragment.add(FriendFragment.getInstance());// 加入第二页
// 配置ViewPager的适配器
mFragmentPagerAdapter = new FragmentPagerAdapter(getSupportFragmentManager()) {
@Override
public Fragment getItem(int position) {
return mFragment.get(position);
}
@Override
public int getCount() {
return mFragment.size();
}
};
mViewPager.setAdapter(mFragmentPagerAdapter);
}
private Fragment initConversationList() {
// appendQueryParameter 对具体的会话列表做展示
if (mConversationFragment == null) {
ConversationListFragment listFragment = new ConversationListFragment();
Uri uri = Uri.parse("rong://" + getApplicationInfo().packageName).buildUpon()
.appendPath("conversationList")
.appendQueryParameter(Conversation.ConversationType.PRIVATE.getName(), "false") // 设置私聊会话是否聚合显示
.appendQueryParameter(Conversation.ConversationType.GROUP.getName(), "false")
//.appendQueryParameter(Conversation.ConversationType.PUBLIC_SERVICE.getName(), "false") // 公共服务号
//.appendQueryParameter(Conversation.ConversationType.APP_PUBLIC_SERVICE.getName(), "false")// 公共服务号
.appendQueryParameter(Conversation.ConversationType.DISCUSSION.getName(), "false")// 设置私聊会话是否聚合显示
.appendQueryParameter(Conversation.ConversationType.SYSTEM.getName(), "false") // 设置私聊会是否聚合显示
.build();
listFragment.setUri(uri);
return listFragment;
} else {
return mConversationFragment;
}
}
}
布局更简单 就一个ViewPaper
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.zoommax.car.rongyun_demo.HomeActivity">
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"/>
</LinearLayout>
接下来是好友列表的FriendFragment 和好友的实体类
/**
* 作者: CoolTone
* 描述: 好友列表
*/
public class FriendFragment extends Fragment {
public static FriendFragment instance = null;// 单例模式
private View mView;
public static FriendFragment getInstance() {
if (instance == null) {
instance = new FriendFragment();
}
return instance;
}
private Button mButton_Friend;
private Button mButton_Customer;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
mView = inflater.inflate(R.layout.fragment_friend, container, false);
mButton_Friend = (Button) mView.findViewById(R.id.friend);
mButton_Friend.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (RongIM.getInstance() != null) {
RongIM.getInstance().startPrivateChat(getActivity(), "10086", "私人聊天");
}
}
});
mButton_Customer = (Button) mView.findViewById(R.id.customer);
mButton_Customer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (RongIM.getInstance() != null) {
RongIM.getInstance().startConversation(getActivity(), Conversation.ConversationType.APP_PUBLIC_SERVICE, "KEFU145793828389012", "客服 紫萱");
}
}
});
return mView;
}
}
/**
* 作者: CoolTone
* 描述: 好友实体类
*/
public class Friend {
private String userId;
private String name;
private String portraitUri;
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPortraitUri() {
return portraitUri;
}
public void setPortraitUri(String portraitUri) {
this.portraitUri = portraitUri;
}
public Friend(String userId, String name, String portraitUri) {
this.userId = userId;
this.name = name;
this.portraitUri = portraitUri;
}
}
好友列表 布局
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:id="@+id/friend"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="冷色调"/>
<Button
android:id="@+id/customer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="客服 紫萱"/>
</LinearLayout>
最后就是聊天页面了
/**
* 作者: CoolTone
* 描述: 聊天页面
*/
public class ConversationActivity extends FragmentActivity {
private TextView mName;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_conversation);
mName = (TextView) findViewById(R.id.name);
String sId = getIntent().getData().getQueryParameter("targetId");// targetId:单聊即对方ID,群聊即群组ID
String sName = getIntent().getData().getQueryParameter("title"); // 获取昵称
if (!TextUtils.isEmpty(sName)) {
mName.setText(sName);
} else {
// sId
// TODO 拿到id 去请求自己服务端
}
}
}
聊天页面的布局
<?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:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#000">
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_margin="15dp"
android:text="rongCloud"
android:textColor="#fff"
android:textSize="18sp"/>
</LinearLayout>
<fragment
android:id="@+id/conversation"
android:name="io.rong.imkit.fragment.ConversationFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
当然 聊天页面还需要在 AndroidManifest.xml 配置一下
<activity android:name=".ConversationActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data
android:host="com.zoommax.car.rongyun_demo"
android:pathPrefix="/conversation/"
android:scheme="rong" />
</intent-filter>
</activity>
这样就可聊天了
简单的集成融云 可以根据个人需要 修改页面 但基本就是这些
Demo下载地址:http://download.youkuaiyun.com/download/qq_35352552/9797291