现在很多应用都加入了即时通讯功能(客服等),选择第三方的SDK比较省事快捷,这里就介绍一下集成融云SDK时遇到的一些问题。

这个是官网的集成指南:http://www.rongcloud.cn/docs,前3步没啥好说的,关键是第4步:获取Token。这里官网的建议是在服务端来获取Token,但如果我们只是简单的测试Demo,不想弄服务端那么麻烦,我们可以直接在客户端获取Token。写一个获取Token的工具类,代码如下:

import com.alibaba.fastjson.JSON;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.List;


public class GetToken {public static String GetRongCloudToken(String userName) {StringBuilder sb = new StringBuilder();
        String urlString = "https://api.cn.ronghub.com/user/getToken.json";
        String App_Key = "vnroth0krt5ho";//这里换成你自己的App-key
        String App_Secret = "p9DtDJLPL7wj";//换成你自己的App-Secret
        //时间戳,从 1970 年 1 月 1 日 0 点 0 分 0 秒开始到现在的秒数。
        String Timestamp = String.valueOf(System.currentTimeMillis() / 1000);
        //随机数
        String Nonce = String.valueOf(Math.floor(Math.random() * 1000000));
        //数据签名
        String Signature = sha1(App_Secret + Nonce + Timestamp);
        //我这里用的是HttpClient,它已经被Google放弃了,大家如果想用的话,要在app的build.gradle的android标签下
        //加上一句 useLibrary 'org.apache.http.legacy'
        HttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(urlString);
        httpPost.setHeader("App-Key", App_Key);//注意这里的写法,引号里的不是下划线,看融云官网介绍Server端Http请求头的格式就知道
        httpPost.setHeader("Timestamp", Timestamp);
        httpPost.setHeader("Nonce", Nonce);
        httpPost.setHeader("Signature", Signature);
        httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded");
        List<NameValuePair> nameValuePairs = new ArrayList<>(1);
        nameValuePairs.add(new BasicNameValuePair("userId", userName));
        HttpResponse httpResponse = null;
        try {httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs, "utf-8"));
            httpResponse = httpClient.execute(httpPost);
            BufferedReader br = new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent()));
            String line = null;
            while ((line = br.readLine()) != null) {sb.append(line);
            }} catch (IOException e) {e.printStackTrace();
        }//这是新建的一个接收返回数据的类,代码也在下面。
        // 看官网介绍“http://www.rongcloud.cn/docs/server.html#API_方法返回值说明”你就知道它应该有哪几个成员变量
        //同时也会明白为什么上面的Http请求头要那样写
        //还有这里我用了fastjson,搜索添加一下依赖,或者用Gson都行
        UserRespone userRespone = JSON.parseObject(sb.toString(), UserRespone.class);
        return userRespone.getToken();
    }private static String sha1(String data) {StringBuilder sb = new StringBuilder();
        try {MessageDigest md = MessageDigest.getInstance("SHA1");
            md.update(data.getBytes());
            byte[] bits = md.digest();
            for (int i = 0; i < bits.length; i++) {int a = bits[i];
                if (a < 0) {a += 256;
                }if (a < 16) {sb.append("0");
                }sb.append(Integer.toHexString(a));

            }} catch (NoSuchAlgorithmException e) {e.printStackTrace();
        }return sb.toString();
    }
}
public class UserRespone {int code;//返回码,200为正常
    String token;//用户Token
    String userId;//用户Id

    public int getCode() {return code;
    }public void setCode(int code) {this.code = code;
    }public String getToken() {return token;
    }public void setToken(String token) {this.token = token;
    }public String getUserId() {return userId;
    }public void setUserId(String userId) {this.userId = userId;
    }
}

然后在MainActivity中调用获取Token的方法,注意别忘了,网络请求这样的耗时操作一定要放在子线程中,然后联网权限别忘了加。

好了,获取到了Token,可以说我们的工作完成了一大半,接着看http://blog.rongcloud.cn/?p=392这里,照着它的步骤来,到最后有个深坑的地方:

  1. <fragment
  2. android:layout_width=“match_parent”
  3. android:layout_height=“match_parent”
  4. android:name=“io.rong.imkit.fragment.ConversationFragment”/>

就是这里,一定要再给这个fragment加上一个id,否则就会报  Binary XML file line #7: Error inflating class fragment ,,

最后,贴上MainActivity的代码:

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;

import io.rong.imkit.RongIM;
import io.rong.imlib.RongIMClient;

public class MainActivity extends AppCompatActivity {String token = null;
    boolean isFinish = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        new Thread(new Runnable() {@Override
            public void run() {token = GetToken.GetRongCloudToken("ckp");
                Log.e("ckp", "类名==MainActivity" + ",方法名==run,token=" + token);
                if (token.length() > 0) {isFinish = true;
                }/**
                 * IMKit SDK调用第二步
                 *
                 * 建立与服务器的连接
                 *
                 */
                RongIM.connect(token, new RongIMClient.ConnectCallback() {@Override
                    public void onTokenIncorrect() {//Connect Token 失效的状态处理,需要重新获取 Token
                        token = GetToken.GetRongCloudToken("hehhki");
                    }@Override
                    public void onSuccess(String userId) {Log.e("ckp", "类名==MainActivity" + ",方法名==onSuccess,userId=" + userId);
                    }@Override
                    public void onError(RongIMClient.ErrorCode errorCode) {Log.e("ckp", "类名==MainActivity" + ",方法名==onSuccess,errorCode=" + errorCode);
                    }});

                if (RongIM.getInstance() != null) {RongIM.getInstance().startPrivateChat(MainActivity.this, "lck", "hello");
                }}}).start();

    }
}

要实现单聊只需要把上下两个useName对调(就是“ckp”和“lck”),在另外一台手机上再运行一次程序(相当于第一次的手机叫”ckp“,第二次注册的用户叫”lck“),再发消息就可以收到了。 第一次写博客,欢迎大家指教,不喜勿喷。

快速集成融云SDK– Android Studio相关推荐

  1. 融云发送图片消息_Web 端集成融云 SDK 如何发送正确图片消息给移动端展示?

    Web 端集成融云 SDK 如何发送正确图片消息给移动端展示? 前言 Web 端使用融云的即时通讯 SDK 在发送图片消息给移动端的时候,移动端一般会收到一个缩略图数据和展示高清图片地址,但是往往 W ...

  2. 集成融云 SDK 怎么实现多端同步未读数

    最近在集成融云 SDK 的时候,碰到了一个跟未读数有关的问题,现象是这样的: 比如我在其中 Web 端已经清除了某个会话的未读数然后退出,再换个设备登入,这个时候未读数还有,并没有清除掉,我就纳闷了, ...

  3. ios 融云 重写对话列表_iOS集成融云SDK part 1 小记

    之前虽然稍微了解过即时通讯方面的内容,但是一直没有怎么去做过聊天部分的.这次是刚刚使用融云,做一下记录. 关于融云SDK集成的具体步骤,我都是参考以下这些文章(很多图片都是直接从这些地方拿的,我真是太 ...

  4. 融云--快速集成融云

    以下步骤都是建立在项目已经导入 IMKit的基础上的. 1.配置融云APPKEY 打开 IMKit 的 AndroidManifest 找到 以下内容并且替换为你自己的融云APPKEY. <me ...

  5. 基于融云SDK实现高仿微信

    本篇主要介绍了一下本人正式完成的第一个Android demo应用. 1.demo运行效果图 2.为了实现微信的体验效果,这里面用到了几个特殊的控件或者技术. 2.1 第一张图中的"+&qu ...

  6. 调用融云SDK创建讨论组失败bug记录

    问题描述 项目集成融云SDK,在调用融云创建讨论组的时候,第一次创建失败,第二次创建成功. 猜测一: 猜测是因为创建的讨论组的时候,讨论组成员中有userId是融云中没有的,于是去向融云技术支持提工单 ...

  7. 融云 SDK 集成详解 – Android Studio

    一 .下载 SDK 您可以到融云官方网站下载融云 SDK.融云 SDK 各部分功能以插件化的形式独立提供,开发者可以根据自己的需要,自由组合下载.各组件的功能如下: IMKit – 融云 IM 界面组 ...

  8. android 融云sdk集成,使用融云SDK集成

    使用融云开始还是遇到了很多的坑的,特别是看不太明白官方文档.或许自己不够有耐心. 期间还遇到了许多bug,比如,明明配置的没问题了,可我的手机还是连不上融云. 后来还是在融云的知识库中找到了解决办法, ...

  9. 融云android sdk文档,使用融云SDK集成

    使用融云开始还是遇到了很多的坑的,特别是看不太明白官方文档.或许自己不够有耐心. 期间还遇到了许多bug,比如,明明配置的没问题了,可我的手机还是连不上融云. 后来还是在融云的知识库中找到了解决办法, ...

最新文章

  1. 新进展!英伟达用 AI 给纪录片配音,情绪语调拿捏得稳稳地
  2. 使字符串的首字母大写(具有最佳性能)
  3. Bing Maps Geographic Coverage - Bing地图图像覆盖范围
  4. u-boot分析之小结(六)
  5. JavaScript基础07-day09【嵌套for循环、break和continue、对象、数据类型、对象字面量、函数】
  6. P1469 找筷子(python3实现)-- 10分
  7. 【mac】mac 安装 RibbitMQ 报错 Error when reading /Users/lcc/.erlang.cookie: eacces
  8. 不贵难得之货,使民不盗
  9. The North American Invitational Programming Contest 2016 - Tourists ( LCA )
  10. php中fread用法,php fread函数与fread函数用法_PHP教程
  11. 三星手机GT-S7898连不上电脑,无法调试
  12. 工作篇-错误的代价及反思
  13. OPTEE CA和TA通信 实现从java到ca
  14. GROW GM65 条码二维码扫描识别模块 兼容大部分条码和二维码
  15. 保存SVM模型并调用
  16. 经方时方接轨之――茵陈蒿汤合甘露饮
  17. js中isFinite
  18. 《水经注地图服务》数据源说明
  19. 压缩文件zip怎么查看注释呢,市场上一些破软件不好用啊,我有秘诀
  20. 智能语音技术:从哪儿来?往何处去?

热门文章

  1. 善用IDM站点管理功能
  2. java dag_如何在Java中实现类似DAG的调度程序?
  3. 蓝桥 质数的后代(Java)
  4. 全方位揭秘!大数据从0到1的完美落地之Shuffle和调优
  5. Vue.js 源码分析—— Slots 是如何实现的
  6. java 基于poi数据的导出与导入
  7. Brave Song
  8. iOS-Provisioning Profile#40;Certificate#41;与Code Signing详解
  9. 【Java设计模式】总结
  10. python startswith,老生常谈Python startswith()函数与endswith函数