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
原创粉丝点击