GithubHelp home page GithubHelp logo

server-sdk-java's Introduction

server-sdk-java

RongCloud IM Server SDK in Java.

集成

  • **仓库获取JAR
  • Maven
    <dependency>
        <groupId>cn.rongcloud.im</groupId>
        <artifactId>server-sdk-java</artifactId>
        <version>3.3.9</version>
    </dependency>
  • Gradle
    compile group: 'cn.rongcloud.im', name: 'server-sdk-java', version: '3.3.9'
   
  • 基于源码 Meavn 打包构建
   1、下载或克隆 `server-sdk-java`
   
   2、进入项目 `server-sdk-java` 目录
   
   3、安装依赖 `mvn install`
   
   4、打包 `mvn clean package`
   
  • 运行环境
Java版本  7+

使用

请前往 开发者后台 创建应用 -> 获取 Appkey、Secret

以注册用户为例

  String appKey = "appKey";
  String appSecret = "appSecret";
       
  RongCloud rongCloud = RongCloud.getInstance(appKey, appSecret);
  User user = rongCloud.user;

  /**
  *
  * 注册用户,生成用户在融云的唯一身份标识 Token
  */
  UserModel userModel = new UserModel()
            .setId("hHjap87")
            .setName("RongCloud")
            .setPortrait("http://www.rongcloud.cn/images/logo.png");
  TokenResult result = user.register(userModel);
  System.out.println("getToken:  " + result.toString());

# 打印结果
# getToken:  {"reqBody":"userId=userxxd2&name=username&portraitUri=http%3A%2F%2Fwww.rongcloud.cn%2Fimages%2Flogo.png","code":1002,"errorMessage":"Invalidate App-Key.","requestId":"0c1f127e9bc1401bb05eaad61b4502f7"}

特别说明: 接口每次调用都会返回唯一的 requestId ,此 Id 为请求融云的唯一标识。

示例

版本说明

为方便开发者的接入使用,更好的对融云 Server SDK 进行维护管理,现更新SDK 3.0 版本,老版本的 Server SDK仍可使用 但不兼容。

server-sdk-java's People

Contributors

chiquanqing-214 avatar dependabot[bot] avatar ericyangpan avatar hejinyu110 avatar hello-world- avatar jarven89 avatar mongo-lab avatar rchht avatar ymyly avatar yuwnloyblog avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

server-sdk-java's Issues

这SDK设计就是个错误

发27条,漏3条,说的实时推送确认机制。
结果呢,服务器根本不管确认机制,主动推送几率和中彩票差不多。
每条消息都是基于时间戳被动拉取的,也就是说,对方系统时间出问题,你发的消息也全部都漏掉。
队列数据拉完之后,你再次发起拉取请求,此时你拉不到任何消息,也没有任何反应。
此时数据就会堆积,下一次拉取才会一起拉回来,假设用户不发消息了,那么条消息永远就沉在海底了

够辣鸡
够辣鸡
够辣鸡

java.io.FileNotFoundException

打包成jar包后,json 文件读取不到。
java.io.FileNotFoundException: file:\C:\Users\15052.m2\repository\com\rcloud\server-sdk-java\3.0.0\server-sdk-java-3.0.0.jar!\jsonsource\group\api.json (文件名、目录名或卷标语法不正确。)

`user.tag`下相关的接口

现在只有set,get,batchSet接口
但通过这些接口,设置Tag的话,会覆盖现有用户已有的Tag,要么需要提前查询然后手动合并再调用set。
单个用户的还好办,但批量用户的话,会比较麻烦,

可以追加几个接口吗?

  1. 添加Tag
  2. 删除Tag
  3. 批量(用户)添加Tag

下面的文档里写的集成版本有误

这个SDK版本是错的,2021-1-4,maven**仓库里只能查到3.1.15,更新日期是17-Dec-2020,但是下面的集成一栏里悍然写着3.2.0,不知道为啥
%%MVT8GXD9L4SFP2CF2)NGB
_7JL( 6IPGKKC%3P$W3D~~E

version 3.0.2发送私聊消息报错

跟踪代码发现是读取api.json文件乱码导致解析为json对象时报错,io.rong.JsonUtil.getJsonObject(String path, String jsonName)方法中,读取文件的InputStreamReader应该要调用带字符编码的构造函数才对,望尽快修复

mvn打包后jar内resource读取不到修改

io.rong.util.JsonUtil.getJsonObject方法中
reader =new BufferedReader( new InputStreamReader(new FileInputStream(JSONFILE+path+jsonName)));
应该为
reader = new BufferedReader(new InputStreamReader(JsonUtil.class.getResourceAsStream("/jsonsource/" + path + jsonName)));

短信验证码验证功能

调验证方法的时候不管我的sessionId和验证码传什么。总是返回code:200,
status参数永远都没有,我不知道如何判断验证码是否正确

ChatRoomMessage

ServerDemo里面的聊天室消息发送
代码中拼接发送信息,应该拼接发送人的变量应该是senderId,但是实际上拼接的是getTargetId数组,导致客户端获取不到发送人id
关键代码:
ChatRoom.java
sb.append("&fromUserId=").append(URLEncoder.encode(message.getTargetId().toString(), UTF8));
这里应该是拼接发送人id,但是拼接成了接收人id数组,导致发送消息时,客户端显示的uid格式为:%5BLjava.lang.String%3B%40229d10bd
入参信息:{"content":{"content":"test","type":"RC:TxtMsg"},"objectName":"RC:TxtMsg","senderId":"5f34be38ff944ad5b6c6750683be62fa","targetId":["e11fc30ac68ea7626a1399745741f3e9"]}
url编码后参数:
fromUserId=%5BLjava.lang.String%3B%40229d10bd&toChatroomId=e11fc30ac68ea7626a1399745741f3e9&objectName=RC%3ATxtMsg&content=%7B%22content%22%3A%22test%22%7D

2.0.1 的jar包

有没有2.0.1 java端的jar包,给个下载链接
老项目中用了2.0.1的jar, 升级3.0暂时没有时间
之后再做升级,谢谢

注册接口问题

User.register(user)

注册接口 的返回值中 能否增加 一个过期时间的字段,告诉当前账号的token的过期时间;否则, 注册成功了 不知道 这个token的过期时间;

请求成功
{
"code": 200,
"userId": "ujadk90ha",
"token": "SfJQnrPDLZNMxSl+cNLZNMxSl+cNGDRLrkqw5cNGDRLrkqw5Xap7yf5"
}

io.rong.models.push.PlatformNotification

io.rong.models.push.PlatformNotification的extra字段能否修改泛型为Map<String,Object>.
不然不能传对象,只能把对象转为jsonString传递,这样就会有一些问题.很不方便

通过http请求发送自定义消息

通过http请求发送自定义消息,如何将自定义的objectName注册到融云消息类型中去,目前问题:可以发送成功,进入历史消息,但是不可以被实时监听到。

messages和models下的bean都缺少默认构造方法,toString时被Gson调用会异常

java.lang.RuntimeException: No-args constructor for class xxx.utils.rongcloud.models.TokenResult does not exist. Register an InstanceCreator with Gson for this type to fix this problem.
at com.google.gson.MappedObjectConstructor.constructWithNoArgConstructor(MappedObjectConstructor.java:64)
at com.google.gson.MappedObjectConstructor.construct(MappedObjectConstructor.java:53)
at com.google.gson.JsonObjectDeserializationVisitor.constructTarget(JsonObjectDeserializationVisitor.java:40)
at com.google.gson.JsonDeserializationVisitor.getTarget(JsonDeserializationVisitor.java:56)
at com.google.gson.ObjectNavigator.accept(ObjectNavigator.java:109)
at com.google.gson.JsonDeserializationContextDefault.fromJsonObject(JsonDeserializationContextDefault.java:73)
at com.google.gson.JsonDeserializationContextDefault.deserialize(JsonDeserializationContextDefault.java:51)
at com.google.gson.Gson.fromJson(Gson.java:495)
at com.google.gson.Gson.fromJson(Gson.java:444)
at com.google.gson.Gson.fromJson(Gson.java:396)
at xxx.utils.rongcloud.util.GsonUtil.fromJson(GsonUtil.java:18)
at xxx.utils.rongcloud.methods.User.getToken(User.java:58)

Certificates do not conform to algorithm constraints

在 io.rong.util.HttpUtil 中执行 HttpsURLConnection.setDefaultSSLSocketFactory(sslCtx.getSocketFactory()); 后,会导致

Exception in thread "main" javax.imageio.IIOException: Can't get input stream from URL!
at TestHttps.read(TestHttps.java:73)
at TestHttps.main(TestHttps.java:57)
Caused by: javax.net.ssl.SSLHandshakeException: Certificates do not conform to algorithm constraints
at sun.security.ssl.Alert.createSSLException(Alert.java:131)
at sun.security.ssl.TransportContext.fatal(TransportContext.java:324)
at sun.security.ssl.TransportContext.fatal(TransportContext.java:267)
at sun.security.ssl.TransportContext.fatal(TransportContext.java:262)
at sun.security.ssl.CertificateMessage$T12CertificateConsumer.checkServerCerts(CertificateMessage.java:654)
at sun.security.ssl.CertificateMessage$T12CertificateConsumer.onCertificate(CertificateMessage.java:473)
at sun.security.ssl.CertificateMessage$T12CertificateConsumer.consume(CertificateMessage.java:369)
at sun.security.ssl.SSLHandshake.consume(SSLHandshake.java:377)
at sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:444)
at sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:422)
at sun.security.ssl.TransportContext.dispatch(TransportContext.java:182)
at sun.security.ssl.SSLTransport.decode(SSLTransport.java:152)
at sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1397)
at sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1305)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:440)
at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:197)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1572)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1500)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:268)
at TestHttps.read(TestHttps.java:71)
... 1 more
Caused by: java.security.cert.CertificateException: Certificates do not conform to algorithm constraints
at sun.security.ssl.AbstractTrustManagerWrapper.checkAlgorithmConstraints(SSLContextImpl.java:1429)
at sun.security.ssl.AbstractTrustManagerWrapper.checkAdditionalTrust(SSLContextImpl.java:1354)
at sun.security.ssl.AbstractTrustManagerWrapper.checkServerTrusted(SSLContextImpl.java:1298)
at sun.security.ssl.CertificateMessage$T12CertificateConsumer.checkServerCerts(CertificateMessage.java:638)
... 17 more
Caused by: java.security.cert.CertPathValidatorException: Algorithm constraints check failed on signature algorithm: SHA1withRSA
at sun.security.provider.certpath.AlgorithmChecker.check(AlgorithmChecker.java:237)
at sun.security.ssl.AbstractTrustManagerWrapper.checkAlgorithmConstraints(SSLContextImpl.java:1425)
... 20 more

为什么不使用maven构建?

maven构建使用SDK的只需要pom文件引用,大部分的项目都是maven构建的。如果SDK升级,pom只需要引用相应的版本

获取用户Token接口的代码与wiki不一致

wiki中,获取token时,只有userId是必选的,而在代码中,若不填写参数nameportraitUri则会抛出NullPointerException

// 获取token
public static SdkHttpResult getToken(String appKey, String appSecret,
        String userId, String userName, String portraitUri,
        FormatType format) throws Exception {

    HttpURLConnection conn = HttpUtil
            .CreatePostHttpConnection(appKey, appSecret, RONGCLOUDURI
                    + "/user/getToken." + format.toString());

    StringBuilder sb = new StringBuilder();
    sb.append("userId=").append(URLEncoder.encode(userId, UTF8));
            sb.append("&name=").append(URLEncoder.encode(userName, UTF8));
            sb.append("&portraitUri=").append(URLEncoder.encode(portraitUri, UTF8));
    HttpUtil.setBodyParameter(sb, conn);

    return HttpUtil.returnResult(conn);
}

这里需要判断两个可选参数是否为空。

PR: #4

RongCloud

3.2.15 sdk中 io.rong.RongCloud 缓存key情况异常问题,在appKey正确时修改appSecret值会导致不生效,需要集成方重启才行。
建议 缓存key使用appKey+appSecret

系统消息接口,接收者字段校验逻辑 Bug

示例:
public class Test {
private static final TxtMessage txtMessage = new TxtMessage("hello", "helloExtra");
private static final String PATH = "message/system";
public static void main(String[] args) {
// TODO Auto-generated method stub
String[] targetIds = new String[100];

	for(int i=0;i<10;i++) {
		targetIds[i] = "test"+i;
	}
	
	SystemMessage systemMessage = new SystemMessage().setSenderId("usetId").setTargetId(targetIds)
			.setObjectName(txtMessage.getType()).setContent(txtMessage).setPushContent("this is a push")
			.setPushData("{'pushData':'hello'}").setIsPersisted(0).setIsCounted(0).setContentAvailable(0);

	String code = CommonUtil.checkFiled(systemMessage,PATH,CheckMethod.PUBLISH);
	System.out.println(code);
}

}

返回 :
{"msg":"TargetId 长度超限, TargetId >= 1 且 TargetId <= 64","code":"20003"}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.