30.融云即时通讯基本的收发消息(IMLib)
来源:互联网 发布:淘宝客微信推广工具 编辑:程序博客网 时间:2024/06/05 22:30
转载请注明出处 http://blog.csdn.net/qq_31715429/article/details/51208203
本文出自:猴菇先生的博客
1.集成:按照融云官网文档集成即可;
2.在BaseApplication中初始化:
/** * 初始化融云即时通讯 */ private void initRongIm() { /** * OnCreate 会被多个进程重入,这段保护代码,确保只有您需要使用 RongIMClient 的进程和 Push 进程执行了 init。 * io.rong.push 为融云 push 进程名称,不可修改。 */ if(getApplicationInfo().packageName.equals( SysInfoUtils.getCurProcessName(getApplicationContext())) ||"io.rong.push".equals( SysInfoUtils.getCurProcessName(getApplicationContext()))) { RongIMClient.init(this); } } } /** * 获得当前进程的名字 * * @param context context * @return 进程号 */ public static String getCurProcessName(Context context) { int pid = android.os.Process.myPid(); ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); for (ActivityManager.RunningAppProcessInfo appProcess : activityManager.getRunningAppProcesses()) { if (appProcess.pid == pid) { return appProcess.processName; } } return null; }
3.在MainActivity.java中连接、接收消息、发送消息:
/** * 融云相关 */ private void setRongIm() { getToken(); receiveMsg(); RongIMClient.setConnectionStatusListener(new RongIMClient.ConnectionStatusListener() { @Override public void onChanged(ConnectionStatus connectionStatus) { LogMessage.e("monkey", "融云连接状态监听--> " + connectionStatus.toString()); } }); RongIMClient.setOnReceivePushMessageListener(new RongIMClient.OnReceivePushMessageListener() { @Override public boolean onReceivePushMessage(PushNotificationMessage pushNotificationMessage) { LogMessage.e("monkey", "融云离线通知监听--> " + pushNotificationMessage.getPushContent()); //返回true可以不显示融云离线消息通知 return true; } }); } /** * 请求Server API,获取token */ private void getToken() { deviceId = SysInfoUtils.readTelephoneSerialNum(MainActivity.this);//userId用设备号替代 String name = "monkey";//用户名 String portraitUri = "http://rongcloud-web.qiniudn.com/docs_demo_rongcloud_logo.png";//头像 HomeApi.getRongToken(deviceId, name, portraitUri, new ApiCallBack<RongImBean>() { //请求token的接口地址是"https://api.cn.ronghub.com/user/getToken.json" //除了需要post传userId、name、和portraitUri外 //还需要addHeader参数App-Key(申请的app key)、 // Nonce(随机数 double r = new Random().nextDouble();)、 // Timestamp(时间戳 long t = System.currentTimeMillis();)、 // Signature(申请的app secret、Nonce和Timestamp的sha1加密值) @Override public void onSuccess(RongImBean result) { super.onSuccess(result); if (result != null && result.getToken() != null) { token = result.getToken(); Log.e("monkey", "融云token--> " + token); connect(token); } } }); } /** * 接收消息 */ private void receiveMsg() { RongIMClient.setOnReceiveMessageListener(new RongIMClient.OnReceiveMessageListener() { /** * 收到消息的处理。 * @param message 收到的消息实体。 * @param i 剩余未拉取消息数目。 * @return 是否接收 */ @Override public boolean onReceived(final Message message, int i) { if (message != null) { runOnUiThread(new Runnable() { @Override public void run() { sendTime = new SimpleDateFormat("yyyy年MM月dd日HH时mm分").format(new Date(message.getSentTime())); rongMsg = (TextMessage) message.getContent(); Log.e("monkey", "融云接收消息-->" + "userId:" + message.getSenderUserId() + " 内容:" + rongMsg.getContent() + " 发送时间:" + sendTime); //收到消息后写自己的操作逻辑 } }); } return true; } }); } /** * 建立与融云服务器的连接 * * @param token token */ private void connect(String token) { if (getApplicationInfo().packageName.equals(SysInfoUtils.getCurProcessName(getApplicationContext()))) { RongIMClient.connect(token, new RongIMClient.ConnectCallback() { @Override public void onTokenIncorrect() { Log.e("monkey", "融云 Token 错误,在线上环境下主要是因为 Token 已经过期,您需要向 App Server 重新请求一个新的 Token"); } @Override public void onSuccess(String userId) { Log.e("monkey", "连接融云成功--> " + userId); } @Override public void onError(RongIMClient.ErrorCode errorCode) { Log.e("monkey", "连接融云失败,错误码--> " + errorCode); } }); } } /** * 发送消息 */ private void sendMsg(String userId) { /** * 发送普通消息 * @param conversationType 会话类型 * @param targetId 会话ID * @param content 消息的内容,一般是MessageContent的子类对象 * @param pushContent 接收方离线时需要显示的push消息内容 * @param pushData 接收方离线时需要在push消息中携带的非显示内容 * @param SendMessageCallback 发送消息的回调 * @param ResultCallback 消息存库的回调,可用于获取消息实体 */ RongIMClient.getInstance().sendMessage(Conversation.ConversationType.PRIVATE, userId, TextMessage.obtain("你好"), null, null, new RongIMClient.SendMessageCallback() { @Override public void onSuccess(Integer integer) { String str = "消息发送成功"; Log.e("monkey", str); } @Override public void onError(Integer integer, RongIMClient.ErrorCode errorCode) { String str = "消息发送失败"; Log.e("monkey", str); } }, null); }
0 0
- 30.融云即时通讯基本的收发消息(IMLib)
- 【融云常见问题】java: exception io.rong.imlib.AnnotationNotFoundException
- 即时通讯消息的可靠投递
- C#实现消息的收发
- 消息收发
- 融云即时通讯(一)
- Web端即时通讯、消息推送的实现
- 基于UDP的简单收发消息代码
- 收发传真包的消息交互
- 使用spring集成的kafka收发消息
- TCP 接收连接及消息的收发
- python stomp 收发指定的消息
- 使用spring集成的kafka收发消息
- 基于Jms的MQ消息收发机制
- 微信开发(四)收发消息
- 环信即时通讯的基本集成
- 01-即时通讯-对Socket的基本了解
- 基于融云的即时通讯开发(一)
- JavaWeb企业实训 简易股市自选查询分析系统(四)数据库角色分工
- Android中Binder机制实现进程间通信
- android开发框架(六)WindowManager机制
- javascript深入理解js闭包
- 蓝桥杯 求闰年
- 30.融云即时通讯基本的收发消息(IMLib)
- android调试工具DDMS的使用详解
- oracle安装好后 创建用户
- 颓废日常 多图预警
- mac没有安装airport卡以及win7无法上网
- 欢迎使用CSDN-markdown编辑器
- 十进制转二进制算法
- memcache分布式算法
- source code