在App的oncreate方法中
//必须首先执行这部分代码, 如果在":TCMSSevice"进程中,无需进行云旺(OpenIM)和app业务的初始化,以节省内存;
SysUtil.setApplication(this);
if(SysUtil.isTCMSServiceProcess(this)){
return;
}
//第一个参数是Application Context
//这里的APP_KEY即应用创建时申请的APP_KEY,同时初始化必须是在主进程中
if(SysUtil.isMainProcess()){
YWAPI.init(this, YWIMKit_APP_KEY);
}
//云旺自定义类初始化
CustomSampleHelper.initCustom();
云旺进程初始化完毕后,就要初始化云旺的SDK对象了,因为我们涉及到页面的所有内容都是云旺的SDK对象来操作的,并且每个用户对应唯一的SDK对象,更换用户就要重新获取,
这个SDK对象可以建一个帮助类去维护,
// openIM UI解决方案提供的相关API,创建成功后,保存为全局变量使用
private YWIMKit mIMKit;
public YWIMKit getIMKit() {
return mIMKit;
}
public void setIMKit(YWIMKit imkit) {
mIMKit = imkit;
}
public void initIMKit(String userId, String appKey) {
//初始化SDK对象
mIMKit = YWAPI.getIMKitInstance(userId, appKey);
addPushMessageListener();
}
所以在我们项目中做登录的时候我们就要根据用户来进行初始化了,并且要进行云旺的登录操作
String uid = GlobalInfo.getInstance(LoginActivity.this).getUid();
if (!TextUtils.isEmpty(GlobalInfo.getInstance(LoginActivity.this).getUid())){
//登录成功后SDK对象重新初始化
LoginHelper.getsInstance().initIMKit(uid,App.YWIMKit_APP_KEY);
LoginHelper.getsInstance().login_im(uid, GlobalInfo.getInstance(LoginActivity.this).getImPassword(), new IWxCallback() {
@Override
public void onSuccess(Object... objects) {
Toast.makeText(LoginActivity.this, "Success", Toast.LENGTH_SHORT).show();
}
@Override
public void onError(int i, String s) {
}
@Override
public void onProgress(int i) {
}
});
}
云旺登录后界面的展示,这里只涉及最近联系人界面和用户之间的单聊界面
在这里是在单独的Activity页面中将聊天列表已fragment的方式进行嵌套进来,核心代码如下
private void initView() {
FragmentTransaction fragmentTransaction = getSupportFragmentManager()
.beginTransaction();
if (LoginHelper.getsInstance().getIMKit()!=null){
mIMKit = LoginHelper.getsInstance().getIMKit();
mConversationService = mIMKit.getConversationService();
conversationListFragment = mIMKit.getConversationFragment();
}
fragmentTransaction.add(R.id.fragment, conversationListFragment,
"conversationListFragment");
fragmentTransaction.commit();
}
这样我们最近联系人列表就出来了
单聊的话就比较简单了,拿到对方的id就可以了
Intent intent = LoginHelper.getsInstance().getIMKit().getChattingActivityIntent(userid);
startActivity(intent);
接下来就是一些重要的监听
未读消息的监听,在MainActivity中,
实现的接口的分别是IYWConversationUnreadChangeListener,IYWConnectionListener,后一个是连接状态的监听
private void initListener() {
mConversationService.addTotalUnreadChangeListener(this);
mIMKit.getIMCore().addConnectionListener(this);
}
@Override
public void onUnreadChange() {
mHandler.post(new Runnable() {
@Override
public void run() {
//获取当前登录用户的所有未读数
int unReadCount = mConversationService.getAllUnreadCount();
//设置桌面角标的未读数
mIMKit.setShortcutBadger(unReadCount);
// sendBadgeNumber(unReadCount);
if (unReadCount > 0) {
messageCountTv.setVisibility(View.VISIBLE);
if (unReadCount < 100) {
messageCountTv.setText(unReadCount + "");
} else {
messageCountTv.setText("99+");
}
} else {
messageCountTv.setVisibility(View.GONE);
}
}
});
}
对于连接状态的监听,实现方法如下
@Override
public void onDisconnect(int i, String s) {
if (i == YWLoginCode.LOGON_FAIL_KICKOFF) {
//在其它终端登录,当前用户被踢下线,
final AlertDialogUtil adl = new AlertDialogUtil(this,false,null);
adl.setPositiveClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
adl.dismiss();
App.getInstance().logout();
//登出云旺
LoginHelper.getsInstance().loginOut(new IWxCallback() {
@Override
public void onSuccess(Object... objects) {
Toast.makeText(MainActivity.this, "Exist Success", Toast.LENGTH_SHORT).show();
}
@Override
public void onError(int i, String s) {
Toast.makeText(MainActivity.this, "Exist Error", Toast.LENGTH_SHORT).show();
}
@Override
public void onProgress(int i) {
Toast.makeText(MainActivity.this, "Existing", Toast.LENGTH_SHORT).show();
}
});
Intent i = getBaseContext().getPackageManager().getLaunchIntentForPackage(getBaseContext().getPackageName());
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
finish();
}
});
//作为系统弹出框 可覆盖在任意界面
adl.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
adl.show();
}else {
//不是在其他端登录的话进行重新登录连接的操作
String uid = GlobalInfo.getInstance(MainActivity.this).getUid();
if (!TextUtils.isEmpty(GlobalInfo.getInstance(MainActivity.this).getUid())){
//登录成功后SDK对象重新初始化
LoginHelper.getsInstance().initIMKit(uid,App.YWIMKit_APP_KEY);
LoginHelper.getsInstance().login_im(uid, GlobalInfo.getInstance(MainActivity.this).getImPassword(), new IWxCallback() {
@Override
public void onSuccess(Object... objects) {
mIMKit = LoginHelper.getsInstance().getIMKit();
mConversationService = mIMKit.getConversationService();
initListener();
Toast.makeText(MainActivity.this, "Success", Toast.LENGTH_SHORT).show();
}
@Override
public void onError(int i, String s) {
}
@Override
public void onProgress(int i) {
}
});
}
}
}
@Override
public void onReConnecting() {
Toast.makeText(this, "onReconnecting", Toast.LENGTH_SHORT).show();
}
@Override
public void onReConnected() {
Toast.makeText(this, "onReconnected", Toast.LENGTH_SHORT).show();
}
基本的操作就介绍这些,接下来是自定义的一些类
留言与评论(共有 0 条评论) “” |