diff --git a/README.md b/README.md
index 1887dba..98ea022 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,7 @@
## 在线文档
-## [https://www.yuque.com/yuanfangxiyang/ma4ytb](https://www.yuque.com/yuanfangxiyang/ma4ytb)
+[语雀在线文档](https://www.yuque.com/yuanfangxiyang/ma4ytb)
+
+
---
@@ -9,12 +11,18 @@ CIM是一套完善的消息推送框架,可应用于信令推送,即时聊
CIM采用业内主流开源技术构建,易于扩展和使用,并完美支持集群部署支持海量链接,目前支持websocket,android,ios,桌面应用,系统应用等多端接入持,可应用于移动应用,物联网,智能家居,嵌入式开发,桌面应用,WEB应用即时消服务。
-用时7年 基于CIM的项目已经运行在全国各个地方,包括上司公司,各地政务系统,警务系统等服务于上百家客户,希望CIM也能为您带来价值,如果您也希望加入项目成为贡献者,请联系我。
+用时7年 基于CIM的项目已经运行在全国各个地方,包括上司公司,各地政务系统,警务系统等服务于上百家客户,希望CIM也能为您带来价值,如果您也希望加入项目成为贡献者,请联系我。如果觉得有用欢迎打赏。
+
+
+

+

+
---
-## 以下是基于CIM开发的2款产品,并不开源!!!
-## [http://farsunset.com](http://farsunset.com)
+## 相关产品
+[官网介绍](http://farsunset.com)
+
#### 和信
和信是基于CIM组件开发的一整套完整的产品,面向所有人开放注册的试用场景。具有丰富的功能,聊天、群组、好友列表、黑名单、公众号、朋友圈等功能。不依赖任何第三方服务,可以私有化部署。
@@ -32,17 +40,19 @@ CIM采用业内主流开源技术构建,易于扩展和使用,并完美支
---
-#### 功能预览
+## 功能预览
1.控制台页面[http://127.0.0.1:8080](http://127.0.0.1:8080)

+
2.Android客户端

+
3.Web客户端

-#### 更新日志
+## 更新日志
-------------------------------------------------------------------------------------------
版本:3.5.0/时间:2018-08-22
diff --git a/cim-boot-server/cim-boot-server.iml b/cim-boot-server/cim-boot-server.iml
index 6d0ab4a..41bd885 100644
--- a/cim-boot-server/cim-boot-server.iml
+++ b/cim-boot-server/cim-boot-server.iml
@@ -1,28 +1,22 @@
-
-
-
-
-
-
-
-
-
-
+
+
+
+
@@ -30,78 +24,78 @@
-
-
-
-
-
-
+
+
+
+
+
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
+
-
-
+
+
-
-
-
-
+
+
+
+
+
@@ -122,7 +116,7 @@
-
+
@@ -136,18 +130,18 @@
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
+
\ No newline at end of file
diff --git a/cim-boot-server/cim-boot-server.ipr b/cim-boot-server/cim-boot-server.ipr
index 07d4d24..1a65ac8 100644
--- a/cim-boot-server/cim-boot-server.ipr
+++ b/cim-boot-server/cim-boot-server.ipr
@@ -2,6 +2,7 @@
+
@@ -14,14 +15,12 @@
-
+
-
-
-
@@ -69,133 +67,12 @@
-
-
- -
-
-
- -
-
-
- -
-
-
- -
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
- -
-
-
- -
-
-
- -
-
-
- -
-
-
-
-
- -
-
-
- -
-
-
-
-
-
+
@@ -263,70 +140,70 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -340,15 +217,15 @@
-
+
-
+
-
+
-
+
@@ -362,26 +239,26 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -406,125 +283,125 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -780,15 +657,15 @@
-
+
-
+
-
+
-
+
@@ -802,48 +679,59 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
@@ -879,37 +767,26 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
+
@@ -923,15 +800,15 @@
-
+
-
+
-
+
-
+
@@ -945,15 +822,15 @@
-
+
-
+
-
+
-
+
@@ -989,202 +866,213 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1209,169 +1097,169 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/cim-boot-server/cim-boot-server.iws b/cim-boot-server/cim-boot-server.iws
index 4649940..ac9d9d1 100644
--- a/cim-boot-server/cim-boot-server.iws
+++ b/cim-boot-server/cim-boot-server.iws
@@ -1,42 +1,34 @@
-
-
-
+<<<<<<< HEAD
+=======
+
+
+
+
+
+
+
+
+
+
+>>>>>>> bcb7a59ef440a21ae7f3d7778e84f49e971e162f
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
@@ -52,69 +44,27 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 1557734989980
+ 1627465791411
+<<<<<<< HEAD
1557734989980
@@ -146,47 +96,57 @@
+=======
+ 1627465791411
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+>>>>>>> bcb7a59ef440a21ae7f3d7778e84f49e971e162f
+
+
+
+
+
+
- jar://$PROJECT_DIR$/lib/cim-server-sdk-mina-3.7.0.jar!/com/farsunset/cim/sdk/server/handler/CIMNioSocketAcceptor.class
- 72
-
-
-
- jar://$PROJECT_DIR$/lib/cim-server-sdk-netty-3.7.0.jar!/com/farsunset/cim/sdk/server/coder/WebMessageEncoder.class
- 22
-
-
-
- file://$PROJECT_DIR$/src/main/java/com/farsunset/cim/component/message/PushMessageListener.java
- 24
-
+ file://$PROJECT_DIR$/src/main/java/com/farsunset/cim/service/impl/APNsServiceImpl.java
+ 49
+
-
-
-
-
- 1.8
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
\ No newline at end of file
diff --git a/cim-boot-server/pom.xml b/cim-boot-server/pom.xml
index 14047dc..c273733 100644
--- a/cim-boot-server/pom.xml
+++ b/cim-boot-server/pom.xml
@@ -11,14 +11,14 @@
org.springframework.boot
spring-boot-starter-parent
- 2.4.4
+ 2.5.2
1.8
- 4.1.62.Final
- 3.11.1
+ 4.1.65.Final
+ 3.17.0
8.0.22
2.8.0
3.0.0
@@ -47,6 +47,13 @@
org.springframework.boot
spring-boot-starter-data-jpa
+
+
+ org.springframework.boot
+ spring-boot-configuration-processor
+ true
+
+
io.springfox
springfox-boot-starter
@@ -134,7 +141,6 @@
org.apache.commons
commons-lang3
- 3.8.1
diff --git a/cim-boot-server/src/main/java/com/farsunset/cim/BootApplication.java b/cim-boot-server/src/main/java/com/farsunset/cim/BootApplication.java
index 6c2dc67..eb79c0f 100644
--- a/cim-boot-server/src/main/java/com/farsunset/cim/BootApplication.java
+++ b/cim-boot-server/src/main/java/com/farsunset/cim/BootApplication.java
@@ -21,10 +21,16 @@
*/
package com.farsunset.cim;
+import com.farsunset.cim.config.properties.APNsProperties;
+import com.farsunset.cim.config.properties.CIMProperties;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
@SpringBootApplication
+@EnableConfigurationProperties({
+ APNsProperties.class,
+ CIMProperties.class})
public class BootApplication {
public static void main(String[] args) {
SpringApplication.run(BootApplication.class, args);
diff --git a/cim-boot-server/src/main/java/com/farsunset/cim/component/handler/BindHandler.java b/cim-boot-server/src/main/java/com/farsunset/cim/component/handler/BindHandler.java
index bbfd8f6..977ddee 100644
--- a/cim-boot-server/src/main/java/com/farsunset/cim/component/handler/BindHandler.java
+++ b/cim-boot-server/src/main/java/com/farsunset/cim/component/handler/BindHandler.java
@@ -67,10 +67,12 @@ public class BindHandler implements CIMRequestHandler {
session.setDeviceName(body.get("deviceName"));
session.setAppVersion(body.get("appVersion"));
session.setOsVersion(body.get("osVersion"));
+ session.setLanguage(body.get("language"));
channel.attr(ChannelAttr.UID).set(uid);
channel.attr(ChannelAttr.CHANNEL).set(session.getChannel());
channel.attr(ChannelAttr.DEVICE_ID).set(session.getDeviceId());
+ channel.attr(ChannelAttr.LANGUAGE).set(session.getLanguage());
/*
*存储到数据库
diff --git a/cim-boot-server/src/main/java/com/farsunset/cim/config/CIMConfig.java b/cim-boot-server/src/main/java/com/farsunset/cim/config/CIMConfig.java
index 73f3e2e..9a12c01 100644
--- a/cim-boot-server/src/main/java/com/farsunset/cim/config/CIMConfig.java
+++ b/cim-boot-server/src/main/java/com/farsunset/cim/config/CIMConfig.java
@@ -1,6 +1,7 @@
package com.farsunset.cim.config;
import com.farsunset.cim.component.handler.annotation.CIMHandler;
+import com.farsunset.cim.config.properties.CIMProperties;
import com.farsunset.cim.sdk.server.group.SessionGroup;
import com.farsunset.cim.sdk.server.group.TagSessionGroup;
import com.farsunset.cim.sdk.server.handler.CIMNioSocketAcceptor;
@@ -42,12 +43,11 @@ public class CIMConfig implements CIMRequestHandler, ApplicationListener
@@ -69,6 +70,7 @@ function doSendMessage(){
${cimsession.deviceName! } |
${cimsession.appVersion! } |
${cimsession.osVersion! } |
+ ${cimsession.language! } |
<@spring.messageArgs "module.console.cimsession.time.format",[((.now?long - cimsession.bindTime)/1000)?round?c] />
|
diff --git a/cim-boot-server/src/main/resources/static/css/common.css b/cim-boot-server/src/main/resources/static/css/common.css
index 2e70f3c..28ad0ff 100644
--- a/cim-boot-server/src/main/resources/static/css/common.css
+++ b/cim-boot-server/src/main/resources/static/css/common.css
@@ -1 +1 @@
-@CHARSET "UTF-8";html,body{height:100%;font-family:微软雅黑;background:url(/image/pattern.png) repeat,linear-gradient(#e1e4e7,#f3f4f5);}.header{position:fixed;height:100px;background:#2b345d;width:100%;z-index:999;line-height:100px;-webkit-box-shadow:0 0 12px 0 #0d1e33;box-shadow:0 0 12px 0 #0d1e33;}.header_liner{position:fixed;height:5px;top:95px;width:100%;z-index:998;background:linear-gradient(to right,#ff4444,#99cc00,#33b5e5,#aa66cc,#ffbb33);}#mainWrapper{width:auto;margin-left:180px;min-height:600px;padding-bottom:50px;padding-top:100px;}ul,ol{margin:0;padding:0;list-style:none;}.tip_blue{zoom:1;background:#3391D7;color:#FFFFFF;text-align:center;line-height:50px;height:50px;font-family:楷体;min-width:300px;position:absolute;z-index:9999;font-size:16px;font-weight:bold;padding:0 15px;border-radius:3px;border:1px solid rgba(0,0,0,.2);-webkit-box-shadow:0 3px 9px rgba(0,0,0,.4);box-shadow:0 3px 5px rgba(0,0,0,.4);}.tip_red{zoom:1;background:#DF3D3D;color:#FFFFFF;text-align:center;font-family:楷体;line-height:50px;height:50px;min-width:300px;position:absolute;z-index:9999;font-size:16px;font-weight:bold;padding:0 15px;border-radius:3px;border:1px solid rgba(0,0,0,.2);-webkit-box-shadow:0 3px 9px rgba(0,0,0,.4);box-shadow:0 3px 5px rgba(0,0,0,.4);}.tip_green{zoom:1;background:#54ad18;color:#ffffff;text-align:center;font-family:楷体;line-height:50px;height:50px;min-width:300px;position:absolute;z-index:9999;font-size:16px;font-weight:bold;padding:0 15px;border-radius:3px;border:1px solid rgba(0,0,0,.2);-webkit-box-shadow:0 3px 9px rgba(0,0,0,.4);box-shadow:0 3px 5px rgba(0,0,0,.4);}.tip_process{zoom:1;color:#394A5E;text-align:center;line-height:50px;height:50px;font-family:楷体;background-color:white;min-width:300px;position:absolute;z-index:9999;border-radius:4px;border:1px solid rgba(0,0,0,.2);-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5);}.icon_loading_small{background:url(/image/icon_loading_small.gif) no-repeat;width:22px;height:22px;left:20px;top:15px;position:absolute;}.form-group label{width:70px;text-align:right;}.lay-main-toolbar{height:60px;border-radius:0px;border-right:1px solid #B5BBBF;border-bottom:#c8c8c8 solid 1px;background:white;box-shadow:rgba(0,0,0,0.15) 0px 1px 8px;position:relative;width:100%;padding:8px;}.nav-menu-divider{box-shadow:#e9eaeb 0px 1px 0px;border-bottom:#c4c6c7 solid 1px;}.btn i{font-size:17px;margin-right:2px;font-weight:bold;font-style:normal;line-height:17px;}.modal-dialog{margin:150px auto;}.dialog_close:hover,.dialog_close:focus{opacity:.6;filter:alpha(opacity=60);}.gdialog .modal-header{cursor:move;}.ui-vnav{position:fixed;top:100px;left:0;width:180px;min-height:560px;height:960px;_overflow:hidden;background:#ffffff;z-index:88;box-shadow:1px 0 4px rgba(0,0,0,.3);}.ui-vnav .ui-bar{height:20px;overflow:hidden;}.ui-vnav .ui-bd{display:block;margin:9px 0;width:100%;height:0px;line-height:0px;border-top:1px solid #afb1b2;border-bottom:1px solid #eaeaea;}.ui-vnav .ui-item{height:45px;line-height:45px;padding:0 10px;text-align:center;cursor:pointer;border-bottom:1px #e4e5e6 solid;}.ui-vnav .ui-item:hover{color:white;background-color:#F3F3F3;}.ui-vnav .current,.ui-vnav .current:hover{background-color:#FFFFFF;border-left:6px #44b549 solid;padding-left:4px;}.ui-vnav .ui-item a{position:relative;display:block;height:45px;line-height:45px;font-size:16px;color:#666;text-decoration:none;}.ui-vnav .ui-shd{position:absolute;right:0;top:0;width:4px;height:100%;overflow:hidden;border-right:1px solid #b5b5b6;background-image:-webkit-linear-gradient(left,transparent,rgba(0,0,0,.1));background-image:-moz-linear-gradient(left,transparent,rgba(0,0,0,.1));background-image:-o-linear-gradient(left,transparent,rgba(0,0,0,.1));background-image:linear-gradient(top right,transparent,#c9cacb);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#00DBDCDD',EndColorStr='#B5B5B6',gradientType=1);}.utable{border-collapse:collapse;border-spacing:0;text-align:center;font-size:12px;background:#ffffff;word-break:break-all;table-layout:fixed;margin-right:10px;}.utable tr th{background-color:#eff1f9;border-right:solid 1px #D4D4D4;border-left:solid 1px #D4D4D4;border-bottom:solid 1px #D4D4D4;color:#463E5E;line-height:40px;font-size:14px;text-align:center;}.utable tr:hover{background-color:#f5f6f9;}.utable tr td{border-right:solid 1px #D4D4D4;border-bottom:solid 1px #D4D4D4;color:#666;max-height:80px;line-height:35px;height:35px;padding-left:5px;padding-right:5px;word-break:keep-all;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.datarecord{text-align:center;line-height:30px;background-color:#14A7D5;margin-right:10px;}.input-pagenumber{width:50px;display:inline;height:31px;margin-left:20px;border-top-left-radius:4px;border-bottom-left-radius:4px;border-top-right-radius:0px;border-bottom-right-radius:0px;}textarea{resize:none;}.modal-header{border-bottom:#c8c8c8 solid 1px;box-shadow:rgba(0,0,0,0.15) 0px 1px 8px;height:50px;}.modal-open .modal{overflow-y:hidden;}.btn:focus,button:focus{outline:none;}.bar-button{color:#222222;background-color:#ffffff;border-color:#7d7d7d;}.input-required{border-color:#e91e63;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(204,42,79,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(204,42,79,.6);}
\ No newline at end of file
+@CHARSET "UTF-8";html,body{height:100%;font-family:微软雅黑;background:url(/image/pattern.png) repeat,linear-gradient(#e1e4e7,#f3f4f5);}.header{position:fixed;height:100px;background:#2b345d;width:100%;z-index:999;line-height:100px;-webkit-box-shadow:0 0 12px 0 #0d1e33;box-shadow:0 0 12px 0 #0d1e33;}.header_liner{position:fixed;height:5px;top:95px;width:100%;z-index:998;background:linear-gradient(to right,#ff4444,#99cc00,#33b5e5,#aa66cc,#ffbb33);}#mainWrapper{width:auto;margin-left:180px;min-height:600px;padding-bottom:50px;padding-top:100px;}ul,ol{margin:0;padding:0;list-style:none;}.tip_blue{zoom:1;background:#3391D7;color:#FFFFFF;text-align:center;line-height:50px;height:50px;font-family:楷体;min-width:300px;position:absolute;z-index:9999;font-size:16px;font-weight:bold;padding:0 15px;border-radius:3px;border:1px solid rgba(0,0,0,.2);-webkit-box-shadow:0 3px 9px rgba(0,0,0,.4);box-shadow:0 3px 5px rgba(0,0,0,.4);}.tip_red{zoom:1;background:#DF3D3D;color:#FFFFFF;text-align:center;font-family:楷体;line-height:50px;height:50px;min-width:300px;position:absolute;z-index:9999;font-size:16px;font-weight:bold;padding:0 15px;border-radius:3px;border:1px solid rgba(0,0,0,.2);-webkit-box-shadow:0 3px 9px rgba(0,0,0,.4);box-shadow:0 3px 5px rgba(0,0,0,.4);}.tip_green{zoom:1;background:#54ad18;color:#ffffff;text-align:center;font-family:楷体;line-height:50px;height:50px;min-width:300px;position:absolute;z-index:9999;font-size:16px;font-weight:bold;padding:0 15px;border-radius:3px;border:1px solid rgba(0,0,0,.2);-webkit-box-shadow:0 3px 9px rgba(0,0,0,.4);box-shadow:0 3px 5px rgba(0,0,0,.4);}.tip_process{zoom:1;color:#394A5E;text-align:center;line-height:50px;height:50px;font-family:楷体;background-color:white;min-width:300px;position:absolute;z-index:9999;border-radius:4px;border:1px solid rgba(0,0,0,.2);-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5);}.icon_loading_small{background:url(/image/icon_loading_small.gif) no-repeat;width:22px;height:22px;left:20px;top:15px;position:absolute;}.form-group label{width:70px;text-align:right;}.lay-main-toolbar{height:60px;border-radius:0px;border-right:1px solid #B5BBBF;border-bottom:#c8c8c8 solid 1px;background:white;box-shadow:rgba(0,0,0,0.15) 0px 1px 8px;position:relative;width:100%;padding:8px;}.nav-menu-divider{box-shadow:#e9eaeb 0px 1px 0px;border-bottom:#c4c6c7 solid 1px;}.btn i{font-size:17px;margin-right:2px;font-weight:bold;font-style:normal;line-height:17px;}.modal-dialog{margin:150px auto;}.dialog_close:hover,.dialog_close:focus{opacity:.6;filter:alpha(opacity=60);}.gdialog .modal-header{cursor:move;}.ui-vnav{position:fixed;top:100px;left:0;width:180px;min-height:560px;height:100%;_overflow:hidden;background:#ffffff;z-index:88;box-shadow:1px 0 4px rgba(0,0,0,.3);}.ui-vnav .ui-bar{height:20px;overflow:hidden;}.ui-vnav .ui-bd{display:block;margin:9px 0;width:100%;height:0px;line-height:0px;border-top:1px solid #afb1b2;border-bottom:1px solid #eaeaea;}.ui-vnav .ui-item{height:45px;line-height:45px;padding:0 10px;text-align:center;cursor:pointer;border-bottom:1px #e4e5e6 solid;}.ui-vnav .ui-item:hover{color:white;background-color:#F3F3F3;}.ui-vnav .current,.ui-vnav .current:hover{background-color:#FFFFFF;border-left:6px #44b549 solid;padding-left:4px;}.ui-vnav .ui-item a{position:relative;display:block;height:45px;line-height:45px;font-size:16px;color:#666;text-decoration:none;}.ui-vnav .ui-shd{position:absolute;right:0;top:0;width:4px;height:100%;overflow:hidden;border-right:1px solid #b5b5b6;background-image:-webkit-linear-gradient(left,transparent,rgba(0,0,0,.1));background-image:-moz-linear-gradient(left,transparent,rgba(0,0,0,.1));background-image:-o-linear-gradient(left,transparent,rgba(0,0,0,.1));background-image:linear-gradient(top right,transparent,#c9cacb);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#00DBDCDD',EndColorStr='#B5B5B6',gradientType=1);}.utable{border-collapse:collapse;border-spacing:0;text-align:center;font-size:12px;background:#ffffff;word-break:break-all;table-layout:fixed;margin-right:10px;}.utable tr th{background-color:#eff1f9;border-right:solid 1px #D4D4D4;border-left:solid 1px #D4D4D4;border-bottom:solid 1px #D4D4D4;color:#463E5E;line-height:40px;font-size:14px;text-align:center;}.utable tr:hover{background-color:#f5f6f9;}.utable tr td{border-right:solid 1px #D4D4D4;border-bottom:solid 1px #D4D4D4;color:#666;max-height:80px;line-height:35px;height:35px;padding-left:5px;padding-right:5px;word-break:keep-all;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.datarecord{text-align:center;line-height:30px;background-color:#14A7D5;margin-right:10px;}.input-pagenumber{width:50px;display:inline;height:31px;margin-left:20px;border-top-left-radius:4px;border-bottom-left-radius:4px;border-top-right-radius:0px;border-bottom-right-radius:0px;}textarea{resize:none;}.modal-header{border-bottom:#c8c8c8 solid 1px;box-shadow:rgba(0,0,0,0.15) 0px 1px 8px;height:50px;}.modal-open .modal{overflow-y:hidden;}.btn:focus,button:focus{outline:none;}.bar-button{color:#222222;background-color:#ffffff;border-color:#7d7d7d;}.input-required{border-color:#e91e63;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(204,42,79,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(204,42,79,.6);}
\ No newline at end of file
diff --git a/cim-boot-server/src/main/resources/static/js/cim/cim.web.sdk.js b/cim-boot-server/src/main/resources/static/js/cim/cim.web.sdk.js
index 52c9f8d..86411e6 100644
--- a/cim-boot-server/src/main/resources/static/js/cim/cim.web.sdk.js
+++ b/cim-boot-server/src/main/resources/static/js/cim/cim.web.sdk.js
@@ -63,6 +63,7 @@ CIMPushManager.bind = function (account) {
body.getDataMap().set("packageName", APP_PACKAGE);
body.getDataMap().set("deviceId", deviceId);
body.getDataMap().set("deviceName", browser.name);
+ body.getDataMap().set("language", navigator.language);
CIMPushManager.sendRequest(body);
};
diff --git a/cim-client-sdk-libs/android/cim-android-sdk-4.0.0.jar b/cim-client-sdk-libs/android/cim-android-sdk-4.0.0.jar
index acd0649..171b4df 100644
Binary files a/cim-client-sdk-libs/android/cim-android-sdk-4.0.0.jar and b/cim-client-sdk-libs/android/cim-android-sdk-4.0.0.jar differ
diff --git a/cim-client-sdk-libs/js/cim.web.sdk.js b/cim-client-sdk-libs/js/cim.web.sdk.js
index 52c9f8d..86411e6 100644
--- a/cim-client-sdk-libs/js/cim.web.sdk.js
+++ b/cim-client-sdk-libs/js/cim.web.sdk.js
@@ -63,6 +63,7 @@ CIMPushManager.bind = function (account) {
body.getDataMap().set("packageName", APP_PACKAGE);
body.getDataMap().set("deviceId", deviceId);
body.getDataMap().set("deviceName", browser.name);
+ body.getDataMap().set("language", navigator.language);
CIMPushManager.sendRequest(body);
};
diff --git a/cim-client-sdk/cim-android-sdk/cim-android-sdk.iml b/cim-client-sdk/cim-android-sdk/cim-android-sdk.iml
old mode 100755
new mode 100644
diff --git a/cim-client-sdk/cim-android-sdk/src/main/java/com/farsunset/cim/sdk/android/CIMPushManager.java b/cim-client-sdk/cim-android-sdk/src/main/java/com/farsunset/cim/sdk/android/CIMPushManager.java
index 4fd7025..98ad286 100644
--- a/cim-client-sdk/cim-android-sdk/src/main/java/com/farsunset/cim/sdk/android/CIMPushManager.java
+++ b/cim-client-sdk/cim-android-sdk/src/main/java/com/farsunset/cim/sdk/android/CIMPushManager.java
@@ -28,11 +28,13 @@ import android.content.pm.PackageManager.NameNotFoundException;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Build;
+import android.os.LocaleList;
import android.text.TextUtils;
import com.farsunset.cim.sdk.android.logger.CIMLogger;
import com.farsunset.cim.sdk.android.constant.CIMConstant;
import com.farsunset.cim.sdk.android.model.SentBody;
+import java.util.Locale;
import java.util.UUID;
/**
@@ -161,6 +163,7 @@ public class CIMPushManager {
sent.put("appVersion", getVersionName(context));
sent.put("osVersion", Build.VERSION.RELEASE);
sent.put("packageName", context.getPackageName());
+ sent.put("language", getLanguage());
sent.setTimestamp(System.currentTimeMillis());
sendRequest(context, sent);
}
@@ -293,4 +296,10 @@ public class CIMPushManager {
return deviceId;
}
+ private static String getLanguage(){
+
+ Locale locale = Build.VERSION.SDK_INT >= Build.VERSION_CODES.N ? LocaleList.getDefault().get(0) : Locale.getDefault();
+
+ return locale.getLanguage() + "-" + locale.getCountry();
+ }
}
diff --git a/cim-server-sdk/src/main/java/com/farsunset/cim/sdk/server/constant/ChannelAttr.java b/cim-server-sdk/src/main/java/com/farsunset/cim/sdk/server/constant/ChannelAttr.java
index bf7df87..da69d86 100644
--- a/cim-server-sdk/src/main/java/com/farsunset/cim/sdk/server/constant/ChannelAttr.java
+++ b/cim-server-sdk/src/main/java/com/farsunset/cim/sdk/server/constant/ChannelAttr.java
@@ -9,4 +9,5 @@ public interface ChannelAttr {
AttributeKey ID = AttributeKey.valueOf("id");
AttributeKey DEVICE_ID = AttributeKey.valueOf("device_id");
AttributeKey TAG = AttributeKey.valueOf("tag");
+ AttributeKey LANGUAGE = AttributeKey.valueOf("language");
}
diff --git a/cim-use-examples/cim-client-android/app/libs/cim-android-sdk-4.0.0.jar b/cim-use-examples/cim-client-android/app/libs/cim-android-sdk-4.0.0.jar
index acd0649..1ef7e40 100644
Binary files a/cim-use-examples/cim-client-android/app/libs/cim-android-sdk-4.0.0.jar and b/cim-use-examples/cim-client-android/app/libs/cim-android-sdk-4.0.0.jar differ
diff --git a/cim-use-examples/cim-client-vue/websocket/cim.web.sdk.js b/cim-use-examples/cim-client-vue/websocket/cim.web.sdk.js
index 433e741..14f9a74 100644
--- a/cim-use-examples/cim-client-vue/websocket/cim.web.sdk.js
+++ b/cim-use-examples/cim-client-vue/websocket/cim.web.sdk.js
@@ -67,6 +67,7 @@ const onbindAccount = CIMPushManager.bindAccount = function (account) {
body.getDataMap().set("packageName", APP_PACKAGE);
body.getDataMap().set("deviceId", deviceId);
body.getDataMap().set("deviceName", browser.name);
+ body.getDataMap().set("language", navigator.language);
CIMPushManager.sendRequest(body);
};
diff --git a/cim-use-examples/cim-client-web/index.html b/cim-use-examples/cim-client-web/index.html
index c13bbb1..692ca78 100644
--- a/cim-use-examples/cim-client-web/index.html
+++ b/cim-use-examples/cim-client-web/index.html
@@ -3,16 +3,16 @@
CIM Webclient
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
@@ -125,7 +125,7 @@
-

+
请输入一个帐号用于登录,随后接收推送消息