Commit 92d88341 by 罗长华

1、token有效期修改为15天

2、新增getToken接口,提供给SDK调用
3、sdk新增getToken方法
parent 20a1d542
...@@ -279,6 +279,7 @@ public class ShiroConfig { ...@@ -279,6 +279,7 @@ public class ShiroConfig {
// 如果启用shiro,则设置最后一个设置为JWTFilter,否则全部路径放行 // 如果启用shiro,则设置最后一个设置为JWTFilter,否则全部路径放行
if (shiroProperties.isEnable()) { if (shiroProperties.isEnable()) {
filterChainDefinitionMap.put("/imClient/registerClient", "signatureAuthFilter"); filterChainDefinitionMap.put("/imClient/registerClient", "signatureAuthFilter");
filterChainDefinitionMap.put("/token/getToken", "signatureAuthFilter");
filterChainDefinitionMap.put("/**", JWT_FILTER_NAME); filterChainDefinitionMap.put("/**", JWT_FILTER_NAME);
} else { } else {
filterChainDefinitionMap.put("/**", ANON); filterChainDefinitionMap.put("/**", ANON);
......
...@@ -227,7 +227,7 @@ spring-boot-plus: ...@@ -227,7 +227,7 @@ spring-boot-plus:
# 观众 # 观众
audience: web audience: web
# 默认过期时间60天,单位:秒 # 默认过期时间60天,单位:秒
expire-second: 5184000 expire-second: 1296000
# 是否刷新token # 是否刷新token
refresh-token: true refresh-token: true
# 刷新token的时间间隔,默认10分钟,单位:秒 # 刷新token的时间间隔,默认10分钟,单位:秒
......
package com.wecloud.im.controller; package com.wecloud.im.controller;
import com.alibaba.nacos.api.exception.NacosException;
import com.wecloud.im.param.ImTokenVerify;
import com.wecloud.im.service.ImClientLoginService;
import com.wecloud.im.vo.TokenVo;
import io.geekidea.springbootplus.framework.common.api.ApiResult; import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.common.controller.BaseController; import io.geekidea.springbootplus.framework.common.controller.BaseController;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import com.alibaba.nacos.api.exception.NacosException;
import com.wecloud.im.param.ClientLoginParam;
import com.wecloud.im.param.ImTokenVerify;
import com.wecloud.im.service.ImClientLoginService;
import com.wecloud.im.vo.TokenVo;
/** /**
* token 控制器 * token 控制器
* *
...@@ -39,6 +42,16 @@ public class TokenController extends BaseController { ...@@ -39,6 +42,16 @@ public class TokenController extends BaseController {
return imClientLoginService.verifySign(imTokenVerify); return imClientLoginService.verifySign(imTokenVerify);
} }
/**
* 根据客户方生成签名字符串 验证通过则下发token
*/
@PostMapping("/getToken")
@ApiOperation(value = "下发客户端token", notes = "下发客户端token")
public ApiResult<TokenVo> getToken(@RequestBody ClientLoginParam clientLoginParam) throws NacosException {
String clientId = clientLoginParam.getClientId();
Integer deviceType = clientLoginParam.getDeviceType();
return imClientLoginService.getToken(clientId, deviceType);
}
} }
package com.wecloud.im.param;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
*
* @Author luozh
* @Date 2022年04月18日 10:59
* @Version 1.0
*/
@Api(value = "客户端登录入参", tags = {"客户端登录入参"})
@Data
public class ClientLoginParam {
@ApiModelProperty("客户端id")
private String clientId;
@ApiModelProperty("设备类型")
private Integer deviceType;
}
package com.wecloud.im.service; package com.wecloud.im.service;
import com.wecloud.im.entity.ImClientDevice;
import io.geekidea.springbootplus.framework.common.service.BaseService; import io.geekidea.springbootplus.framework.common.service.BaseService;
import com.wecloud.im.entity.ImClientDevice;
/** /**
* @Author wenzhida * @Author wenzhida
* @Date 2022/3/2 14:58 * @Date 2022/3/2 14:58
...@@ -18,4 +19,15 @@ public interface ImClientDeviceService extends BaseService<ImClientDevice> { ...@@ -18,4 +19,15 @@ public interface ImClientDeviceService extends BaseService<ImClientDevice> {
*/ */
int removeOldToken(Long appId, String deviceToken); int removeOldToken(Long appId, String deviceToken);
/**
* 根据
* @Author luozh
* @Date 2022年04月18日 11:08:30
* @param appId
* @param fkClientId
* @param deviceType
* @Return
*/
ImClientDevice getOneByAppIdAndClientIdAndType(Long appId, Long fkClientId, Integer deviceType);
} }
package com.wecloud.im.service; package com.wecloud.im.service;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
import com.alibaba.nacos.api.exception.NacosException; import com.alibaba.nacos.api.exception.NacosException;
import com.wecloud.im.param.ImTokenVerify; import com.wecloud.im.param.ImTokenVerify;
import com.wecloud.im.vo.TokenVo; import com.wecloud.im.vo.TokenVo;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
/** /**
* 终端表 服务类 * 终端表 服务类
...@@ -21,4 +22,13 @@ public interface ImClientLoginService { ...@@ -21,4 +22,13 @@ public interface ImClientLoginService {
*/ */
ApiResult<TokenVo> verifySign(ImTokenVerify imTokenVerify) throws NacosException; ApiResult<TokenVo> verifySign(ImTokenVerify imTokenVerify) throws NacosException;
/**
* 获取client Token
* @Author luozh
* @Date 2022年04月18日 10:56:24
* @param
* @Return
*/
ApiResult<TokenVo> getToken(String clientId, Integer deviceType) throws NacosException;
} }
package com.wecloud.im.service.impl; package com.wecloud.im.service.impl;
import com.wecloud.im.entity.ImClientDevice;
import com.wecloud.im.mapper.ImClientDeviceMapper;
import com.wecloud.im.service.ImClientDeviceService;
import io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl; import io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.wecloud.im.entity.ImClientDevice;
import com.wecloud.im.mapper.ImClientDeviceMapper;
import com.wecloud.im.service.ImClientDeviceService;
/** /**
* @Author wenzhida * @Author wenzhida
* @Date 2022/3/2 15:00 * @Date 2022/3/2 15:00
...@@ -25,4 +28,11 @@ public class ImClientDeviceServiceImpl extends BaseServiceImpl<ImClientDeviceMap ...@@ -25,4 +28,11 @@ public class ImClientDeviceServiceImpl extends BaseServiceImpl<ImClientDeviceMap
return imClientDeviceMapper.removeOldToken(appId, deviceToken); return imClientDeviceMapper.removeOldToken(appId, deviceToken);
} }
@Override
public ImClientDevice getOneByAppIdAndClientIdAndType(Long appId, Long fkClientId, Integer deviceType) {
return getOne(Wrappers.<ImClientDevice>lambdaQuery()
.eq(ImClientDevice::getFkAppid, appId)
.eq(ImClientDevice::getFkClientId, fkClientId)
.eq(ImClientDevice::getDeviceType, deviceType));
}
} }
package com.wecloud.im.service.impl; package com.wecloud.im.service.impl;
import io.geekidea.springbootplus.config.properties.JwtProperties;
import io.geekidea.springbootplus.framework.common.api.ApiCode;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.shiro.cache.AppLoginRedisService;
import io.geekidea.springbootplus.framework.shiro.jwt.JwtToken;
import io.geekidea.springbootplus.framework.shiro.util.JwtUtil;
import io.geekidea.springbootplus.framework.shiro.util.SecurityUtils;
import lombok.extern.slf4j.Slf4j;
import java.time.Duration;
import java.util.Date;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import cn.hutool.crypto.digest.MD5; import cn.hutool.crypto.digest.MD5;
import com.alibaba.nacos.api.exception.NacosException; import com.alibaba.nacos.api.exception.NacosException;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.wecloud.im.balance.WsInstance; import com.wecloud.im.balance.WsInstance;
import com.wecloud.im.entity.ImApplication; import com.wecloud.im.entity.ImApplication;
import com.wecloud.im.entity.ImClient; import com.wecloud.im.entity.ImClient;
import com.wecloud.im.entity.ImClientDevice;
import com.wecloud.im.param.ImTokenVerify; import com.wecloud.im.param.ImTokenVerify;
import com.wecloud.im.service.ImApplicationService; import com.wecloud.im.service.ImApplicationService;
import com.wecloud.im.service.ImClientDeviceService;
import com.wecloud.im.service.ImClientLoginService; import com.wecloud.im.service.ImClientLoginService;
import com.wecloud.im.service.ImClientService; import com.wecloud.im.service.ImClientService;
import com.wecloud.im.vo.TokenVo; import com.wecloud.im.vo.TokenVo;
import com.wecloud.utils.SnowflakeUtil; import com.wecloud.utils.SnowflakeUtil;
import io.geekidea.springbootplus.config.properties.JwtProperties;
import io.geekidea.springbootplus.framework.common.api.ApiCode;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.shiro.cache.AppLoginRedisService;
import io.geekidea.springbootplus.framework.shiro.jwt.JwtToken;
import io.geekidea.springbootplus.framework.shiro.util.JwtUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.Duration;
@Service @Service
@Slf4j @Slf4j
...@@ -38,6 +45,10 @@ public class ImClientLoginServiceImpl implements ImClientLoginService { ...@@ -38,6 +45,10 @@ public class ImClientLoginServiceImpl implements ImClientLoginService {
private static JwtProperties jwtProperties; private static JwtProperties jwtProperties;
@Autowired @Autowired
private ImApplicationService imApplicationService; private ImApplicationService imApplicationService;
@Autowired
private ImClientDeviceService imClientDeviceService;
@Autowired @Autowired
private ImClientService imClientService; private ImClientService imClientService;
@Autowired @Autowired
...@@ -114,4 +125,54 @@ public class ImClientLoginServiceImpl implements ImClientLoginService { ...@@ -114,4 +125,54 @@ public class ImClientLoginServiceImpl implements ImClientLoginService {
return ApiResult.ok(tokenVo); return ApiResult.ok(tokenVo);
} }
@Override
public ApiResult<TokenVo> getToken(String clientId, Integer deviceType) throws NacosException {
Long appId = SecurityUtils.getCurrentAppId();
String appKey = SecurityUtils.getCurrentAppKey();
ImApplication imApplication = imApplicationService.getCacheAppByAppKey(appKey);
String appSecret = imApplication.getAppSecret();
// 判断客户端是否存在,不存在则创建
ImClient client = imClientService.getOne(new QueryWrapper<ImClient>().lambda()
.eq(ImClient::getFkAppid, appId)
.eq(ImClient::getClientId, clientId));
;
if (client == null) {
client = new ImClient();
client.setId(SnowflakeUtil.getId());
client.setFkAppid(appId);
client.setClientId(clientId + "");
imClientService.save(client);
}
// 判断客户端绑定的设备是否存在,不存在则创建
ImClientDevice clientDevice = imClientDeviceService.getOneByAppIdAndClientIdAndType(appId,
client.getId(), deviceType);
if (clientDevice == null) {
ImClientDevice imClientDevice = new ImClientDevice();
imClientDevice.setId(SnowflakeUtil.getId());
imClientDevice.setFkAppid(appId);
imClientDevice.setFkClientId(client.getId());
imClientDevice.setValid(1);
imClientDevice.setDeviceType(deviceType);
imClientDevice.setCreateTime(new Date());
imClientDevice.setUpdateTime(new Date());
imClientDeviceService.save(imClientDevice);
}
// 生成token
String generateToken = JwtUtil.generateToken(clientId + "", appKey, appSecret, Duration.ofDays(99999),
deviceType);
JwtToken jwtToken = JwtToken.build(generateToken, appSecret, jwtProperties.getExpireSecond(), clientId + "",
appKey, deviceType);
appLoginRedisService.cacheLoginInfo(jwtToken);
TokenVo tokenVo = new TokenVo();
tokenVo.setToken(generateToken);
tokenVo.setWsAddr(wsInstance.selectOneHealthyInstance());
tokenVo.setId(client.getId());
tokenVo.setAttributes(client.getAttributes());
return ApiResult.ok(tokenVo);
}
} }
...@@ -341,16 +341,6 @@ public class ImClientServiceImpl extends BaseServiceImpl<ImClientMapper, ImClien ...@@ -341,16 +341,6 @@ public class ImClientServiceImpl extends BaseServiceImpl<ImClientMapper, ImClien
imClient.setHeadPortrait(param.getHeadPortrait()); imClient.setHeadPortrait(param.getHeadPortrait());
imClient.setNickname(param.getNickname()); imClient.setNickname(param.getNickname());
save(imClient); save(imClient);
ImClientDevice imClientDevice = new ImClientDevice();
imClientDevice.setId(SnowflakeUtil.getId());
imClientDevice.setFkAppid(appId);
imClientDevice.setFkClientId(imClient.getId());
imClientDevice.setValid(1);
imClientDevice.setDeviceType(param.getDeviceType());
imClientDevice.setCreateTime(new Date());
imClientDevice.setUpdateTime(new Date());
imClientDeviceService.save(imClientDevice);
} }
return imClient.getId(); return imClient.getId();
} }
......
package com.wecloud.im.sdk;
import lombok.experimental.UtilityClass;
/**
* 资源常量类
* @Author luozh
* @Date 2022年04月18日 13:34
* @Version 1.0
*/
@UtilityClass
public class ResourcePathConstants {
/**
* 注册客户端
*/
public static final String REGISTER_CLIENT_URL = "/api/imClient/registerClient";
/**
* 获取token
*/
public static final String GET_TOKEN_URL = "/api/token/getToken";
}
package com.wecloud.im.sdk; package com.wecloud.im.sdk;
import com.wecloud.im.sdk.model.ImClient; import com.wecloud.im.sdk.model.ImClient;
import com.wecloud.im.sdk.model.Token;
/** /**
* *
...@@ -21,6 +22,16 @@ public interface WecloudIm { ...@@ -21,6 +22,16 @@ public interface WecloudIm {
* @Return * @Return
* @return * @return
*/ */
ImClient registerClient(Long userId, String headPortrait, String nickname, Integer deviceType); ImClient registerClient(Long userId, String headPortrait, String nickname);
/**
* 获取用户token
* @Author luozh
* @Date 2022年04月18日 11:50:44
* @param userId 用户id
* @param deviceType 设备类型 1:ios; 2:android; 3:web; 4:win; 5:mac
* @Return
*/
Token getToken(Long userId, Integer deviceType);
} }
...@@ -3,8 +3,10 @@ package com.wecloud.im.sdk; ...@@ -3,8 +3,10 @@ package com.wecloud.im.sdk;
import java.net.URL; import java.net.URL;
import com.wecloud.im.sdk.internal.WecloudImClientOperation; import com.wecloud.im.sdk.internal.WecloudImClientOperation;
import com.wecloud.im.sdk.model.ClientLoginRequest;
import com.wecloud.im.sdk.model.ImClient; import com.wecloud.im.sdk.model.ImClient;
import com.wecloud.im.sdk.model.RegisterClientRequest; import com.wecloud.im.sdk.model.RegisterClientRequest;
import com.wecloud.im.sdk.model.Token;
/** /**
* *
...@@ -40,7 +42,7 @@ public class WecloudImClient implements WecloudIm { ...@@ -40,7 +42,7 @@ public class WecloudImClient implements WecloudIm {
} }
@Override @Override
public ImClient registerClient(Long userId, String headPortrait, String nickname, Integer deviceType) { public ImClient registerClient(Long userId, String headPortrait, String nickname) {
RegisterClientRequest registerClientRequest = RegisterClientRequest registerClientRequest =
RegisterClientRequest.builder() RegisterClientRequest.builder()
.userId(userId).headPortrait(headPortrait) .userId(userId).headPortrait(headPortrait)
...@@ -49,6 +51,13 @@ public class WecloudImClient implements WecloudIm { ...@@ -49,6 +51,13 @@ public class WecloudImClient implements WecloudIm {
return imClientOperation.registerClient(registerClientRequest); return imClientOperation.registerClient(registerClientRequest);
} }
@Override
public Token getToken(Long userId, Integer deviceType) {
ClientLoginRequest clientLoginRequest = ClientLoginRequest.builder().clientId(userId).deviceType(deviceType).build();
return imClientOperation.getToken(clientLoginRequest);
}
private void initOperations() { private void initOperations() {
this.imClientOperation = new WecloudImClientOperation(apiDomain, appKey, appSecret); this.imClientOperation = new WecloudImClientOperation(apiDomain, appKey, appSecret);
} }
......
...@@ -8,9 +8,13 @@ import com.alibaba.fastjson.JSON; ...@@ -8,9 +8,13 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.wecloud.im.sdk.common.HttpMethod; import com.wecloud.im.sdk.common.HttpMethod;
import com.wecloud.im.sdk.common.RequestMessage; import com.wecloud.im.sdk.common.RequestMessage;
import com.wecloud.im.sdk.model.ClientLoginRequest;
import com.wecloud.im.sdk.model.ImClient; import com.wecloud.im.sdk.model.ImClient;
import com.wecloud.im.sdk.model.RegisterClientRequest; import com.wecloud.im.sdk.model.RegisterClientRequest;
import com.wecloud.im.sdk.model.Token;
import static com.wecloud.im.sdk.ResourcePathConstants.GET_TOKEN_URL;
import static com.wecloud.im.sdk.ResourcePathConstants.REGISTER_CLIENT_URL;
import static com.wecloud.im.sdk.utils.CodingUtils.assertParameterNotNull; import static com.wecloud.im.sdk.utils.CodingUtils.assertParameterNotNull;
/** /**
...@@ -43,7 +47,7 @@ public class WecloudImClientOperation extends WecloudImOperation { ...@@ -43,7 +47,7 @@ public class WecloudImClientOperation extends WecloudImOperation {
param.put("headPortrait", registerClientRequest.getHeadPortrait()); param.put("headPortrait", registerClientRequest.getHeadPortrait());
param.put("nickname", registerClientRequest.getNickname()); param.put("nickname", registerClientRequest.getNickname());
// 发送请求 // 发送请求
RequestMessage request = new WecloudRequestMessageBuilder().setEndpoint("/api/imClient/registerClient") RequestMessage request = new WecloudRequestMessageBuilder().setEndpoint(REGISTER_CLIENT_URL)
.setMethod(HttpMethod.POST).setParameters(param) .setMethod(HttpMethod.POST).setParameters(param)
.setOriginalRequest(registerClientRequest).build(); .setOriginalRequest(registerClientRequest).build();
...@@ -51,4 +55,34 @@ public class WecloudImClientOperation extends WecloudImOperation { ...@@ -51,4 +55,34 @@ public class WecloudImClientOperation extends WecloudImOperation {
ImClient imClient = JSON.parseObject(result.toJSONString(), ImClient.class); ImClient imClient = JSON.parseObject(result.toJSONString(), ImClient.class);
return imClient; return imClient;
} }
/**
* 获取用户token
* @Author luozh
* @Date 2022年04月18日 11:52:18
* @param clientLoginRequest
* @Return
*/
public Token getToken(ClientLoginRequest clientLoginRequest) {
Long clientId = clientLoginRequest.getClientId();
Integer deviceType = clientLoginRequest.getDeviceType();
// 参数校验
assertParameterNotNull(clientId, "userId");
assertParameterNotNull(deviceType, "deviceType");
// 校验通过 构建参数
Map<String, String> param = new HashMap<>();
param.put("deviceType", clientLoginRequest.getDeviceType() + "");
param.put("clientId", clientLoginRequest.getClientId() + "");
// 发送请求
RequestMessage request = new WecloudRequestMessageBuilder().setEndpoint(GET_TOKEN_URL)
.setMethod(HttpMethod.POST).setParameters(param)
.setOriginalRequest(clientLoginRequest).build();
JSONObject result = doOperation(request);
Token token = JSON.parseObject(result.toJSONString(), Token.class);
return token;
}
} }
package com.wecloud.im.sdk.model;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
*
* @Author luozh
* @Date 2022年04月18日 11:47
* @Version 1.0
*/
@Builder
@EqualsAndHashCode(callSuper = true)
@Data
public class ClientLoginRequest extends WebServiceRequest {
/**
* 用户id
*/
private Long clientId;
/**
* 设备类型 1:ios; 2:android; 3:web; 4:win; 5:mac
*/
private Integer deviceType;
}
package com.wecloud.im.sdk.model;
import lombok.Data;
/**
* token 校验
*
* @author wei
* @since 2021-04-29
*/
@Data
public class ImTokenVerify {
private static final long serialVersionUID = 1L;
/**
* 时间戳,需与生成sign时的值一致
*/
private String timestamp;
/**
* client客户端id,需与生成sign时的值一致
*/
private String clientId;
/**
* appkey,需与生成sign时的值一致
*/
private String appKey;
/**
* 客户端平台: 1 web, 2 安卓, 3 ios, 4 pc-win, 5 pc-macOs, 需与生成sign时的值一致
*/
private Integer platform;
/**
* 签名sign
*/
private String sign;
}
...@@ -3,7 +3,7 @@ package com.wecloud.im.sdk.model; ...@@ -3,7 +3,7 @@ package com.wecloud.im.sdk.model;
import lombok.Data; import lombok.Data;
/** /**
* * client token信息
* @Author luozh * @Author luozh
* @Date 2022年04月13日 11:07 * @Date 2022年04月13日 11:07
* @Version 1.0 * @Version 1.0
...@@ -20,19 +20,4 @@ public class Token { ...@@ -20,19 +20,4 @@ public class Token {
* 客户端id * 客户端id
*/ */
private Long id; private Long id;
/**
* webSocket连接地址
*/
private String wsAddr;
/**
* 加密密钥
*/
private String dataAesKey;
/**
* 可选 自定义属性,供开发者扩展使用。
*/
private String attributes;
} }
package com.wecloud.im.sdk.sample;
import com.alibaba.fastjson.JSONObject;
import com.wecloud.im.sdk.WecloudIm;
import com.wecloud.im.sdk.WecloudImClientBuilder;
import com.wecloud.im.sdk.model.Token;
/**
*
* @Author luozh
* @Date 2022年04月18日 13:38
* @Version 1.0
*/
public class GetTokenSample {
public static void main(String[] args) {
WecloudIm im = new WecloudImClientBuilder().build("http://127.0.0.1:8082",
"QizKVHcILRWp6Td2",
"287d04828099fb7de871e9dda845fa8b6b2302faf2ab3737");
Long userId = 20220413001L;
Integer deviceType = 1;
Token token = im.getToken(userId, deviceType);
System.out.println("\t get token result=" + JSONObject.toJSONString(token));
}
}
...@@ -21,8 +21,7 @@ public class RegisterClientSample { ...@@ -21,8 +21,7 @@ public class RegisterClientSample {
Long userId = 20220413001L; Long userId = 20220413001L;
String headPortrait = ""; String headPortrait = "";
String nickname = "luo_test1"; String nickname = "luo_test1";
Integer deviceType = 1; ImClient imClient = im.registerClient(userId, headPortrait, nickname);
ImClient imClient = im.registerClient(userId, headPortrait, nickname, deviceType);
System.out.println("\tregister client result=" + JSONObject.toJSONString(imClient)); System.out.println("\tregister client result=" + JSONObject.toJSONString(imClient));
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment