阿里云旺(即时通讯)基础使用

在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 条评论) “”
   
验证码:

相关文章

推荐文章