mirror of
https://gitee.com/farsunset/cim.git
synced 2025-06-17 07:35:25 +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>
|
||||
<groupId>cn.teaey.apns4j</groupId>
|
||||
<artifactId>apns4j</artifactId>
|
||||
<version>1.1.4</version>
|
||||
<groupId>com.eatthepath</groupId>
|
||||
<artifactId>pushy</artifactId>
|
||||
<version>0.15.0</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>commons-io</groupId>
|
||||
<artifactId>commons-io</artifactId>
|
||||
<version>2.6</version>
|
||||
<version>2.7</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
|
@ -58,6 +58,9 @@ public class ClosedHandler implements CIMRequestHandler {
|
||||
|
||||
sessionGroup.remove(channel);
|
||||
|
||||
/*
|
||||
* ios开启了apns也需要显示在线,因此不删记录
|
||||
*/
|
||||
if (!Objects.equals(channel.attr(ChannelAttr.CHANNEL).get(), Session.CHANNEL_IOS)){
|
||||
sessionService.delete(uid,nid);
|
||||
return;
|
||||
|
@ -28,6 +28,8 @@ public class APNsProperties {
|
||||
|
||||
private boolean debug;
|
||||
|
||||
private String appId;
|
||||
|
||||
private final P12 p12 = new P12();
|
||||
|
||||
public static class P12 {
|
||||
@ -67,6 +69,13 @@ public class APNsProperties {
|
||||
return p12.file;
|
||||
}
|
||||
|
||||
public String getAppId() {
|
||||
return appId;
|
||||
}
|
||||
|
||||
public void setAppId(String appId) {
|
||||
this.appId = appId;
|
||||
}
|
||||
|
||||
public String getP12Password() {
|
||||
return p12.password;
|
||||
|
@ -21,21 +21,23 @@
|
||||
*/
|
||||
package com.farsunset.cim.service.impl;
|
||||
|
||||
import cn.teaey.apns4j.Apns4j;
|
||||
import cn.teaey.apns4j.network.ApnsChannel;
|
||||
import cn.teaey.apns4j.network.ApnsChannelFactory;
|
||||
import cn.teaey.apns4j.network.ApnsGateway;
|
||||
import cn.teaey.apns4j.protocol.ApnsPayload;
|
||||
import com.eatthepath.pushy.apns.ApnsClient;
|
||||
import com.eatthepath.pushy.apns.ApnsClientBuilder;
|
||||
import com.eatthepath.pushy.apns.ApnsPushNotification;
|
||||
import com.eatthepath.pushy.apns.util.ApnsPayloadBuilder;
|
||||
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.sdk.server.model.Message;
|
||||
import com.farsunset.cim.service.APNsService;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
|
||||
@Service
|
||||
@ -43,15 +45,19 @@ public class APNsServiceImpl implements APNsService {
|
||||
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(APNsServiceImpl.class);
|
||||
|
||||
private final ApnsChannelFactory apnsChannelFactory;
|
||||
private final ApnsClient apnsClient;
|
||||
|
||||
private final APNsProperties properties;
|
||||
|
||||
@Autowired
|
||||
public APNsServiceImpl(APNsProperties properties){
|
||||
public APNsServiceImpl(APNsProperties properties) throws IOException {
|
||||
this.properties = properties;
|
||||
|
||||
InputStream stream = getClass().getResourceAsStream(properties.getP12File());
|
||||
apnsChannelFactory = Apns4j.newChannelFactoryBuilder()
|
||||
.keyStoreMeta(stream)
|
||||
.keyStorePwd(properties.getP12Password())
|
||||
.apnsGateway(properties.isDebug() ? ApnsGateway.DEVELOPMENT : ApnsGateway.PRODUCTION)
|
||||
|
||||
apnsClient = new ApnsClientBuilder()
|
||||
.setApnsServer(properties.isDebug() ? ApnsClientBuilder.DEVELOPMENT_APNS_HOST : ApnsClientBuilder.PRODUCTION_APNS_HOST)
|
||||
.setClientCredentials(stream, properties.getP12Password())
|
||||
.build();
|
||||
}
|
||||
|
||||
@ -64,29 +70,33 @@ public class APNsServiceImpl implements APNsService {
|
||||
return ;
|
||||
}
|
||||
|
||||
ApnsChannel apnsChannel = apnsChannelFactory.newChannel();
|
||||
ApnsPayload apnsPayload = new ApnsPayload();
|
||||
ApnsPayloadBuilder payloadBuilder = new SimpleApnsPayloadBuilder();
|
||||
|
||||
apnsPayload.alert("您有一条新的消息");
|
||||
payloadBuilder.setAlertTitle("您有一条新的消息");
|
||||
|
||||
apnsPayload.sound("default");
|
||||
apnsPayload.badge(1);
|
||||
apnsPayload.extend("id",message.getId());
|
||||
apnsPayload.extend("action",message.getAction());
|
||||
apnsPayload.extend("content",message.getContent());
|
||||
apnsPayload.extend("sender",message.getSender());
|
||||
apnsPayload.extend("receiver",message.getReceiver());
|
||||
apnsPayload.extend("format",message.getFormat());
|
||||
apnsPayload.extend("extra",message.getExtra());
|
||||
apnsPayload.extend("timestamp",message.getTimestamp());
|
||||
payloadBuilder.setSound("default");
|
||||
payloadBuilder.setBadgeNumber(1);
|
||||
payloadBuilder.addCustomProperty("id",message.getId());
|
||||
payloadBuilder.addCustomProperty("action",message.getAction());
|
||||
payloadBuilder.addCustomProperty("content",message.getContent());
|
||||
payloadBuilder.addCustomProperty("sender",message.getSender());
|
||||
payloadBuilder.addCustomProperty("receiver",message.getReceiver());
|
||||
payloadBuilder.addCustomProperty("format",message.getFormat());
|
||||
payloadBuilder.addCustomProperty("extra",message.getExtra());
|
||||
payloadBuilder.addCustomProperty("timestamp",message.getTimestamp());
|
||||
|
||||
try {
|
||||
apnsChannel.send(deviceToken, apnsPayload);
|
||||
LOGGER.info("APNs push done.\ndeviceToken : {} \napnsPayload : {}",deviceToken,apnsPayload.toJsonString());
|
||||
}catch(Exception exception) {
|
||||
LOGGER.error("APNs push failed",exception);
|
||||
}finally {
|
||||
IOUtils.closeQuietly(apnsChannel);
|
||||
}
|
||||
String token = TokenUtil.sanitizeTokenString(deviceToken);
|
||||
|
||||
String payload = payloadBuilder.build();
|
||||
|
||||
ApnsPushNotification notification = new SimpleApnsPushNotification(token, properties.getAppId(), payload);
|
||||
|
||||
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.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.password=123
|
||||
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));
|
||||
}
|
||||
|
||||
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){
|
||||
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;
|
||||
|
||||
@ -171,30 +171,52 @@ public class Message implements Serializable, Transportable {
|
||||
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
|
||||
public byte[] getBody() {
|
||||
MessageProto.Model.Builder builder = MessageProto.Model.newBuilder();
|
||||
builder.setId(id);
|
||||
builder.setAction(action);
|
||||
builder.setSender(sender);
|
||||
builder.setReceiver(receiver);
|
||||
builder.setTimestamp(timestamp);
|
||||
|
||||
/**
|
||||
/*
|
||||
* 下面字段可能为空
|
||||
*/
|
||||
|
||||
if (receiver != null){
|
||||
builder.setReceiver(receiver);
|
||||
}
|
||||
|
||||
if (content != null) {
|
||||
builder.setContent(content);
|
||||
}
|
||||
|
||||
if (title != null) {
|
||||
builder.setTitle(title);
|
||||
}
|
||||
|
||||
if (extra != null) {
|
||||
builder.setExtra(extra);
|
||||
}
|
||||
|
||||
if (format != null) {
|
||||
builder.setFormat(format);
|
||||
}
|
||||
|
||||
return builder.build().toByteArray();
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user