mirror of
https://gitee.com/farsunset/cim.git
synced 2025-06-17 15:45:24 +08:00
1、修改APNs三方包为pushy
2、修改注释和增强SessionGroup
This commit is contained in:
parent
1c1480ef2c
commit
1faf67a977
@ -1,147 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
|
|
||||||
<component name="FacetManager">
|
|
||||||
<facet type="web" name="Web">
|
|
||||||
<configuration>
|
|
||||||
<webroots />
|
|
||||||
</configuration>
|
|
||||||
</facet>
|
|
||||||
<facet type="jpa" name="JPA">
|
|
||||||
<configuration>
|
|
||||||
<setting name="validation-enabled" value="true" />
|
|
||||||
<setting name="provider-name" value="Hibernate" />
|
|
||||||
<datasource-mapping />
|
|
||||||
<naming-strategy-map />
|
|
||||||
</configuration>
|
|
||||||
</facet>
|
|
||||||
<facet type="Spring" name="Spring">
|
|
||||||
<configuration />
|
|
||||||
</facet>
|
|
||||||
</component>
|
|
||||||
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
|
|
||||||
<output url="file://$MODULE_DIR$/target/classes" />
|
|
||||||
<output-test url="file://$MODULE_DIR$/target/test-classes" />
|
|
||||||
<content url="file://$MODULE_DIR$">
|
|
||||||
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
|
|
||||||
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/target" />
|
|
||||||
</content>
|
|
||||||
<orderEntry type="inheritedJdk" />
|
|
||||||
<orderEntry type="sourceFolder" forTests="false" />
|
|
||||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.5.2" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.5.2" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.springframework:spring-context:5.3.8" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.5.2" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.5.2" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.14.1" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.14.1" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.31" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.springframework:spring-core:5.3.8" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.3.8" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.28" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.5.2" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.5.2" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.12.3" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.12.3" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.12.3" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.12.3" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.12.3" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.12.3" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.5.2" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.48" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-el:9.0.48" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.48" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.springframework:spring-web:5.3.8" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.springframework:spring-beans:5.3.8" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.3.8" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.springframework:spring-aop:5.3.8" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.springframework:spring-expression:5.3.8" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-freemarker:2.5.2" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.freemarker:freemarker:2.3.31" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.springframework:spring-context-support:5.3.8" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-redis:2.5.2" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-redis:2.5.2" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-keyvalue:2.5.2" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.springframework:spring-tx:5.3.8" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.springframework:spring-oxm:5.3.8" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: io.lettuce:lettuce-core:6.1.3.RELEASE" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: io.projectreactor:reactor-core:3.4.7" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.3" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-jpa:2.5.2" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-aop:2.5.2" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.aspectj:aspectjweaver:1.9.6" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.5.2" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: com.zaxxer:HikariCP:4.0.3" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.3.8" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: jakarta.transaction:jakarta.transaction-api:1.3.3" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: jakarta.persistence:jakarta.persistence-api:2.2.3" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.hibernate:hibernate-core:5.4.32.Final" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.jboss.logging:jboss-logging:3.4.2.Final" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.javassist:javassist:3.27.0-GA" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: net.bytebuddy:byte-buddy:1.10.22" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: antlr:antlr:2.7.7" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.jboss:jandex:2.2.3.Final" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.dom4j:dom4j:2.1.3" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.hibernate.common:hibernate-commons-annotations:5.1.2.Final" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.glassfish.jaxb:jaxb-runtime:2.3.4" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: jakarta.xml.bind:jakarta.xml.bind-api:2.3.3" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.glassfish.jaxb:txw2:2.3.4" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: com.sun.istack:istack-commons-runtime:3.0.12" level="project" />
|
|
||||||
<orderEntry type="library" scope="RUNTIME" name="Maven: com.sun.activation:jakarta.activation:1.2.2" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-jpa:2.5.2" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:2.5.2" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.springframework:spring-orm:5.3.8" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.springframework:spring-aspects:5.3.8" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-configuration-processor:2.5.2" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: io.springfox:springfox-boot-starter:3.0.0" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: io.springfox:springfox-oas:3.0.0" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: io.swagger.core.v3:swagger-annotations:2.1.2" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: io.swagger.core.v3:swagger-models:2.1.2" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: io.springfox:springfox-spi:3.0.0" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: io.springfox:springfox-schema:3.0.0" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: io.springfox:springfox-core:3.0.0" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: io.springfox:springfox-spring-web:3.0.0" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: io.github.classgraph:classgraph:4.8.83" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: io.springfox:springfox-spring-webmvc:3.0.0" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: io.springfox:springfox-spring-webflux:3.0.0" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: io.springfox:springfox-swagger-common:3.0.0" level="project" />
|
|
||||||
<orderEntry type="library" scope="RUNTIME" name="Maven: org.mapstruct:mapstruct:1.3.1.Final" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: io.springfox:springfox-data-rest:3.0.0" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: io.springfox:springfox-bean-validators:3.0.0" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: io.springfox:springfox-swagger2:3.0.0" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: io.swagger:swagger-annotations:1.5.20" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: io.swagger:swagger-models:1.5.20" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: io.springfox:springfox-swagger-ui:3.0.0" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: com.fasterxml:classmate:1.5.1" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.31" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-core:2.0.0.RELEASE" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-metadata:2.0.0.RELEASE" level="project" />
|
|
||||||
<orderEntry type="module-library">
|
|
||||||
<library name="Maven: com.farsunset:cim-server-sdk:4.0.0">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MODULE_DIR$/libs/cim-server-sdk-netty-4.0.0.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC />
|
|
||||||
<SOURCES />
|
|
||||||
</library>
|
|
||||||
</orderEntry>
|
|
||||||
<orderEntry type="library" name="Maven: org.apache.commons:commons-pool2:2.8.0" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: mysql:mysql-connector-java:8.0.22" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.65.Final" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.65.Final" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.65.Final" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.65.Final" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: io.netty:netty-codec-http:4.1.65.Final" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: io.netty:netty-common:4.1.65.Final" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.65.Final" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: io.netty:netty-transport-native-epoll:linux-x86_64:4.1.65.Final" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: io.netty:netty-transport-native-unix-common:4.1.65.Final" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java:3.17.0" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: cn.teaey.apns4j:apns4j:1.1.4" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: commons-io:commons-io:2.6" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.12.0" level="project" />
|
|
||||||
</component>
|
|
||||||
</module>
|
|
File diff suppressed because it is too large
Load Diff
@ -1,69 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="AutoImportSettings">
|
|
||||||
<option name="autoReloadType" value="SELECTIVE" />
|
|
||||||
</component>
|
|
||||||
<component name="ChangeListManager">
|
|
||||||
<list default="true" id="76444805-771d-4ba6-8c14-1f699154c26c" name="Default Changelist" comment="">
|
|
||||||
<change beforePath="$PROJECT_DIR$/cim-boot-server.iml" beforeDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/cim-boot-server.ipr" beforeDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/cim-boot-server.iws" beforeDir="false" />
|
|
||||||
</list>
|
|
||||||
<option name="SHOW_DIALOG" value="false" />
|
|
||||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
|
||||||
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
|
||||||
<option name="LAST_RESOLUTION" value="IGNORE" />
|
|
||||||
</component>
|
|
||||||
<component name="ProjectViewState">
|
|
||||||
<option name="hideEmptyMiddlePackages" value="true" />
|
|
||||||
<option name="showLibraryContents" value="true" />
|
|
||||||
</component>
|
|
||||||
<component name="RunManager">
|
|
||||||
<configuration default="true" type="ArquillianTestNG" factoryName="" nameIsGenerated="true">
|
|
||||||
<option name="arquillianRunConfiguration">
|
|
||||||
<value>
|
|
||||||
<option name="containerStateName" value="" />
|
|
||||||
</value>
|
|
||||||
</option>
|
|
||||||
<option name="TEST_OBJECT" value="CLASS" />
|
|
||||||
<properties />
|
|
||||||
<listeners />
|
|
||||||
<method v="2">
|
|
||||||
<option name="Make" enabled="true" />
|
|
||||||
</method>
|
|
||||||
</configuration>
|
|
||||||
<configuration name="BootApplication" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot" temporary="true" nameIsGenerated="true">
|
|
||||||
<module name="cim-boot-server" />
|
|
||||||
<extension name="coverage">
|
|
||||||
<pattern>
|
|
||||||
<option name="PATTERN" value="com.farsunset.cim.*" />
|
|
||||||
<option name="ENABLED" value="true" />
|
|
||||||
</pattern>
|
|
||||||
</extension>
|
|
||||||
<option name="SPRING_BOOT_MAIN_CLASS" value="com.farsunset.cim.BootApplication" />
|
|
||||||
<method v="2">
|
|
||||||
<option name="Make" enabled="true" />
|
|
||||||
</method>
|
|
||||||
</configuration>
|
|
||||||
<recent_temporary>
|
|
||||||
<list>
|
|
||||||
<item itemvalue="Spring Boot.BootApplication" />
|
|
||||||
</list>
|
|
||||||
</recent_temporary>
|
|
||||||
</component>
|
|
||||||
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
|
|
||||||
<component name="TaskManager">
|
|
||||||
<task active="true" id="Default" summary="Default task">
|
|
||||||
<changelist id="76444805-771d-4ba6-8c14-1f699154c26c" name="Default Changelist" comment="" />
|
|
||||||
<created>1632398352014</created>
|
|
||||||
<option name="number" value="Default" />
|
|
||||||
<option name="presentableId" value="Default" />
|
|
||||||
<updated>1632398352014</updated>
|
|
||||||
<workItem from="1632398355222" duration="104000" />
|
|
||||||
</task>
|
|
||||||
<servers />
|
|
||||||
</component>
|
|
||||||
<component name="TypeScriptGeneratedFilesManager">
|
|
||||||
<option name="version" value="3" />
|
|
||||||
</component>
|
|
||||||
</project>
|
|
Binary file not shown.
@ -127,15 +127,15 @@
|
|||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>cn.teaey.apns4j</groupId>
|
<groupId>com.eatthepath</groupId>
|
||||||
<artifactId>apns4j</artifactId>
|
<artifactId>pushy</artifactId>
|
||||||
<version>1.1.4</version>
|
<version>0.15.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>commons-io</groupId>
|
<groupId>commons-io</groupId>
|
||||||
<artifactId>commons-io</artifactId>
|
<artifactId>commons-io</artifactId>
|
||||||
<version>2.6</version>
|
<version>2.7</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
|
@ -58,6 +58,9 @@ public class ClosedHandler implements CIMRequestHandler {
|
|||||||
|
|
||||||
sessionGroup.remove(channel);
|
sessionGroup.remove(channel);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ios开启了apns也需要显示在线,因此不删记录
|
||||||
|
*/
|
||||||
if (!Objects.equals(channel.attr(ChannelAttr.CHANNEL).get(), Session.CHANNEL_IOS)){
|
if (!Objects.equals(channel.attr(ChannelAttr.CHANNEL).get(), Session.CHANNEL_IOS)){
|
||||||
sessionService.delete(uid,nid);
|
sessionService.delete(uid,nid);
|
||||||
return;
|
return;
|
||||||
|
@ -28,6 +28,8 @@ public class APNsProperties {
|
|||||||
|
|
||||||
private boolean debug;
|
private boolean debug;
|
||||||
|
|
||||||
|
private String appId;
|
||||||
|
|
||||||
private final P12 p12 = new P12();
|
private final P12 p12 = new P12();
|
||||||
|
|
||||||
public static class P12 {
|
public static class P12 {
|
||||||
@ -67,6 +69,13 @@ public class APNsProperties {
|
|||||||
return p12.file;
|
return p12.file;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getAppId() {
|
||||||
|
return appId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAppId(String appId) {
|
||||||
|
this.appId = appId;
|
||||||
|
}
|
||||||
|
|
||||||
public String getP12Password() {
|
public String getP12Password() {
|
||||||
return p12.password;
|
return p12.password;
|
||||||
|
@ -21,21 +21,23 @@
|
|||||||
*/
|
*/
|
||||||
package com.farsunset.cim.service.impl;
|
package com.farsunset.cim.service.impl;
|
||||||
|
|
||||||
import cn.teaey.apns4j.Apns4j;
|
import com.eatthepath.pushy.apns.ApnsClient;
|
||||||
import cn.teaey.apns4j.network.ApnsChannel;
|
import com.eatthepath.pushy.apns.ApnsClientBuilder;
|
||||||
import cn.teaey.apns4j.network.ApnsChannelFactory;
|
import com.eatthepath.pushy.apns.ApnsPushNotification;
|
||||||
import cn.teaey.apns4j.network.ApnsGateway;
|
import com.eatthepath.pushy.apns.util.ApnsPayloadBuilder;
|
||||||
import cn.teaey.apns4j.protocol.ApnsPayload;
|
import com.eatthepath.pushy.apns.util.SimpleApnsPayloadBuilder;
|
||||||
|
import com.eatthepath.pushy.apns.util.SimpleApnsPushNotification;
|
||||||
|
import com.eatthepath.pushy.apns.util.TokenUtil;
|
||||||
import com.farsunset.cim.config.properties.APNsProperties;
|
import com.farsunset.cim.config.properties.APNsProperties;
|
||||||
import com.farsunset.cim.sdk.server.model.Message;
|
import com.farsunset.cim.sdk.server.model.Message;
|
||||||
import com.farsunset.cim.service.APNsService;
|
import com.farsunset.cim.service.APNsService;
|
||||||
import org.apache.commons.io.IOUtils;
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
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 java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
@ -43,15 +45,19 @@ public class APNsServiceImpl implements APNsService {
|
|||||||
|
|
||||||
private static final Logger LOGGER = LoggerFactory.getLogger(APNsServiceImpl.class);
|
private static final Logger LOGGER = LoggerFactory.getLogger(APNsServiceImpl.class);
|
||||||
|
|
||||||
private final ApnsChannelFactory apnsChannelFactory;
|
private final ApnsClient apnsClient;
|
||||||
|
|
||||||
|
private final APNsProperties properties;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
public APNsServiceImpl(APNsProperties properties){
|
public APNsServiceImpl(APNsProperties properties) throws IOException {
|
||||||
|
this.properties = properties;
|
||||||
|
|
||||||
InputStream stream = getClass().getResourceAsStream(properties.getP12File());
|
InputStream stream = getClass().getResourceAsStream(properties.getP12File());
|
||||||
apnsChannelFactory = Apns4j.newChannelFactoryBuilder()
|
|
||||||
.keyStoreMeta(stream)
|
apnsClient = new ApnsClientBuilder()
|
||||||
.keyStorePwd(properties.getP12Password())
|
.setApnsServer(properties.isDebug() ? ApnsClientBuilder.DEVELOPMENT_APNS_HOST : ApnsClientBuilder.PRODUCTION_APNS_HOST)
|
||||||
.apnsGateway(properties.isDebug() ? ApnsGateway.DEVELOPMENT : ApnsGateway.PRODUCTION)
|
.setClientCredentials(stream, properties.getP12Password())
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -64,29 +70,33 @@ public class APNsServiceImpl implements APNsService {
|
|||||||
return ;
|
return ;
|
||||||
}
|
}
|
||||||
|
|
||||||
ApnsChannel apnsChannel = apnsChannelFactory.newChannel();
|
ApnsPayloadBuilder payloadBuilder = new SimpleApnsPayloadBuilder();
|
||||||
ApnsPayload apnsPayload = new ApnsPayload();
|
|
||||||
|
|
||||||
apnsPayload.alert("您有一条新的消息");
|
payloadBuilder.setAlertTitle("您有一条新的消息");
|
||||||
|
|
||||||
apnsPayload.sound("default");
|
payloadBuilder.setSound("default");
|
||||||
apnsPayload.badge(1);
|
payloadBuilder.setBadgeNumber(1);
|
||||||
apnsPayload.extend("id",message.getId());
|
payloadBuilder.addCustomProperty("id",message.getId());
|
||||||
apnsPayload.extend("action",message.getAction());
|
payloadBuilder.addCustomProperty("action",message.getAction());
|
||||||
apnsPayload.extend("content",message.getContent());
|
payloadBuilder.addCustomProperty("content",message.getContent());
|
||||||
apnsPayload.extend("sender",message.getSender());
|
payloadBuilder.addCustomProperty("sender",message.getSender());
|
||||||
apnsPayload.extend("receiver",message.getReceiver());
|
payloadBuilder.addCustomProperty("receiver",message.getReceiver());
|
||||||
apnsPayload.extend("format",message.getFormat());
|
payloadBuilder.addCustomProperty("format",message.getFormat());
|
||||||
apnsPayload.extend("extra",message.getExtra());
|
payloadBuilder.addCustomProperty("extra",message.getExtra());
|
||||||
apnsPayload.extend("timestamp",message.getTimestamp());
|
payloadBuilder.addCustomProperty("timestamp",message.getTimestamp());
|
||||||
|
|
||||||
try {
|
String token = TokenUtil.sanitizeTokenString(deviceToken);
|
||||||
apnsChannel.send(deviceToken, apnsPayload);
|
|
||||||
LOGGER.info("APNs push done.\ndeviceToken : {} \napnsPayload : {}",deviceToken,apnsPayload.toJsonString());
|
String payload = payloadBuilder.build();
|
||||||
}catch(Exception exception) {
|
|
||||||
LOGGER.error("APNs push failed",exception);
|
ApnsPushNotification notification = new SimpleApnsPushNotification(token, properties.getAppId(), payload);
|
||||||
}finally {
|
|
||||||
IOUtils.closeQuietly(apnsChannel);
|
apnsClient.sendNotification(notification).whenComplete((response, cause) -> {
|
||||||
}
|
if (response != null) {
|
||||||
|
LOGGER.info("APNs push done.\ndeviceToken : {} \napnsPayload : {}",deviceToken,payload);
|
||||||
|
} else {
|
||||||
|
LOGGER.error("APNs push failed",cause);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,81 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2013-2019 Xia Jun(3979434@qq.com).
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*
|
|
||||||
***************************************************************************************
|
|
||||||
* *
|
|
||||||
* Website : http://www.farsunset.com *
|
|
||||||
* *
|
|
||||||
***************************************************************************************
|
|
||||||
*/
|
|
||||||
package com.farsunset.cim.util;
|
|
||||||
|
|
||||||
import cn.teaey.apns4j.protocol.ApnsPayload;
|
|
||||||
|
|
||||||
public class ApnsPayloadCompat extends ApnsPayload {
|
|
||||||
|
|
||||||
private static final String DATA_FORMAT = "{\"aps\": {\"message\": {\"action\":\"%s\",\"content\":\"%s\",\"sender\":\"%s\",\"receiver\":\"%s\",\"format\":\"%s\"},\"content-available\": 1}}";
|
|
||||||
|
|
||||||
private String action;
|
|
||||||
private String content;
|
|
||||||
private String sender;
|
|
||||||
private String format;
|
|
||||||
private String receiver;
|
|
||||||
|
|
||||||
|
|
||||||
public String getReceiver() {
|
|
||||||
return receiver;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setReceiver(String receiver) {
|
|
||||||
this.receiver = receiver;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getAction() {
|
|
||||||
return action;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setAction(String action) {
|
|
||||||
this.action = action;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getContent() {
|
|
||||||
return content;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setContent(String content) {
|
|
||||||
this.content = content;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getSender() {
|
|
||||||
return sender;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setSender(String sender) {
|
|
||||||
this.sender = sender;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getFormat() {
|
|
||||||
return format;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setFormat(String format) {
|
|
||||||
this.format = format;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toJsonString() {
|
|
||||||
return String.format(DATA_FORMAT, action, content, sender,receiver,format);
|
|
||||||
}
|
|
||||||
}
|
|
@ -63,7 +63,8 @@ spring.messages.basename=i18n/messages
|
|||||||
cim.app.port=23456
|
cim.app.port=23456
|
||||||
cim.websocket.port=34567
|
cim.websocket.port=34567
|
||||||
|
|
||||||
#please setting your p12 info.
|
#please setting your p12 info and appId.
|
||||||
cim.apns.p12.file=/apns/app.p12
|
cim.apns.p12.file=/apns/app.p12
|
||||||
cim.apns.p12.password=123
|
cim.apns.p12.password=123
|
||||||
cim.apns.debug=false
|
cim.apns.debug=false
|
||||||
|
cim.apns.app-id=com.xxx.xxx.ios
|
||||||
|
@ -76,6 +76,10 @@ public class SessionGroup extends ConcurrentHashMap<String, Collection<Channel>>
|
|||||||
find(key).stream().filter(matcher).forEach(channel -> channel.writeAndFlush(message));
|
find(key).stream().filter(matcher).forEach(channel -> channel.writeAndFlush(message));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void write(String key, Message message, Collection<String> excludedSet){
|
||||||
|
find(key).stream().filter(channel -> excludedSet == null || !excludedSet.contains(channel.attr(ChannelAttr.UID).get())).forEach(channel -> channel.writeAndFlush(message));
|
||||||
|
}
|
||||||
|
|
||||||
public void write(Message message){
|
public void write(Message message){
|
||||||
this.write(message.getReceiver(),message);
|
this.write(message.getReceiver(),message);
|
||||||
}
|
}
|
||||||
|
@ -29,7 +29,7 @@ import java.io.Serializable;
|
|||||||
/**
|
/**
|
||||||
* 消息对象
|
* 消息对象
|
||||||
*/
|
*/
|
||||||
public class Message implements Serializable, Transportable {
|
public class Message implements Serializable, Transportable,Cloneable {
|
||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
@ -171,30 +171,52 @@ public class Message implements Serializable, Transportable {
|
|||||||
return txt != null && txt.trim().length() != 0;
|
return txt != null && txt.trim().length() != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Message clone(){
|
||||||
|
Message message = new Message();
|
||||||
|
message.id = id;
|
||||||
|
message.action = action;
|
||||||
|
message.title = title;
|
||||||
|
message.content = content;
|
||||||
|
message.sender = sender;
|
||||||
|
message.receiver = receiver;
|
||||||
|
message.extra = extra;
|
||||||
|
message.format = format;
|
||||||
|
message.timestamp = timestamp;
|
||||||
|
return message;
|
||||||
|
}
|
||||||
@Override
|
@Override
|
||||||
public byte[] getBody() {
|
public byte[] getBody() {
|
||||||
MessageProto.Model.Builder builder = MessageProto.Model.newBuilder();
|
MessageProto.Model.Builder builder = MessageProto.Model.newBuilder();
|
||||||
builder.setId(id);
|
builder.setId(id);
|
||||||
builder.setAction(action);
|
builder.setAction(action);
|
||||||
builder.setSender(sender);
|
builder.setSender(sender);
|
||||||
builder.setReceiver(receiver);
|
|
||||||
builder.setTimestamp(timestamp);
|
builder.setTimestamp(timestamp);
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* 下面字段可能为空
|
* 下面字段可能为空
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
if (receiver != null){
|
||||||
|
builder.setReceiver(receiver);
|
||||||
|
}
|
||||||
|
|
||||||
if (content != null) {
|
if (content != null) {
|
||||||
builder.setContent(content);
|
builder.setContent(content);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (title != null) {
|
if (title != null) {
|
||||||
builder.setTitle(title);
|
builder.setTitle(title);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (extra != null) {
|
if (extra != null) {
|
||||||
builder.setExtra(extra);
|
builder.setExtra(extra);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (format != null) {
|
if (format != null) {
|
||||||
builder.setFormat(format);
|
builder.setFormat(format);
|
||||||
}
|
}
|
||||||
|
|
||||||
return builder.build().toByteArray();
|
return builder.build().toByteArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user