支持APNS p8证书
This commit is contained in:
6
apns/AuthKey_PXA4CCXXXX.p8
Normal file
6
apns/AuthKey_PXA4CCXXXX.p8
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
MIGXAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBHkwdwIBAQQgGyCRn7aWnLChrRxF
|
||||||
|
2Xf0PN7BOMIF4EQth/OynvzXY0ygCgYIKoZIzj0DAQehRANCAAQ9vdBVqZfAvFi+
|
||||||
|
WSWiF1I9V54lt377jAPddY53Gd3f49imoE39C001TOhbso7t4U5+1m5gar6Y80fZ
|
||||||
|
w1n01kI1
|
||||||
|
-----END PRIVATE KEY-----
|
||||||
@@ -1,8 +1,17 @@
|
|||||||
|
# p12证书和p8证书选一个就行。如果选p12证书,请把 apns.auth_key_path的这几行删掉。
|
||||||
|
|
||||||
|
# p12证书配置。
|
||||||
apns.cer_path=apns/wfc.p12
|
apns.cer_path=apns/wfc.p12
|
||||||
apns.cer_pwd=123456
|
apns.cer_pwd=123456
|
||||||
apns.voip_cer_path=apns/wfc_voip.p12
|
apns.voip_cer_path=apns/wfc_voip.p12
|
||||||
apns.voip_cer_pwd=123456
|
apns.voip_cer_pwd=123456
|
||||||
|
|
||||||
|
# p8证书配置
|
||||||
|
apns.auth_key_path=apns/AuthKey_PXA4CCXXXX.p8
|
||||||
|
apns.key_id=PXA4CCXXXX
|
||||||
|
apns.team_id=Y8356MXXXX
|
||||||
|
|
||||||
|
# 铃声配置
|
||||||
apns.alert=default
|
apns.alert=default
|
||||||
apns.voip_alert=ring.caf
|
apns.voip_alert=ring.caf
|
||||||
|
|
||||||
|
|||||||
@@ -11,6 +11,10 @@ public class ApnsConfig {
|
|||||||
String cerPath;
|
String cerPath;
|
||||||
String cerPwd;
|
String cerPwd;
|
||||||
|
|
||||||
|
String authKeyPath;
|
||||||
|
String keyId;
|
||||||
|
String teamId;
|
||||||
|
|
||||||
String voipCerPath;
|
String voipCerPath;
|
||||||
String voipCerPwd;
|
String voipCerPwd;
|
||||||
|
|
||||||
@@ -74,4 +78,28 @@ public class ApnsConfig {
|
|||||||
public void setVoipFeature(boolean voipFeature) {
|
public void setVoipFeature(boolean voipFeature) {
|
||||||
this.voipFeature = voipFeature;
|
this.voipFeature = voipFeature;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getAuthKeyPath() {
|
||||||
|
return authKeyPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAuthKeyPath(String authKeyPath) {
|
||||||
|
this.authKeyPath = authKeyPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getKeyId() {
|
||||||
|
return keyId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setKeyId(String keyId) {
|
||||||
|
this.keyId = keyId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTeamId() {
|
||||||
|
return teamId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTeamId(String teamId) {
|
||||||
|
this.teamId = teamId;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import cn.wildfirechat.push.PushMessage;
|
|||||||
import cn.wildfirechat.push.PushMessageType;
|
import cn.wildfirechat.push.PushMessageType;
|
||||||
import cn.wildfirechat.push.Utility;
|
import cn.wildfirechat.push.Utility;
|
||||||
import com.turo.pushy.apns.*;
|
import com.turo.pushy.apns.*;
|
||||||
|
import com.turo.pushy.apns.auth.ApnsSigningKey;
|
||||||
import com.turo.pushy.apns.metrics.micrometer.MicrometerApnsClientMetricsListener;
|
import com.turo.pushy.apns.metrics.micrometer.MicrometerApnsClientMetricsListener;
|
||||||
import com.turo.pushy.apns.util.ApnsPayloadBuilder;
|
import com.turo.pushy.apns.util.ApnsPayloadBuilder;
|
||||||
import com.turo.pushy.apns.util.SimpleApnsPushNotification;
|
import com.turo.pushy.apns.util.SimpleApnsPushNotification;
|
||||||
@@ -21,6 +22,8 @@ import org.springframework.util.StringUtils;
|
|||||||
import javax.annotation.PostConstruct;
|
import javax.annotation.PostConstruct;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.security.InvalidKeyException;
|
||||||
|
import java.security.NoSuchAlgorithmException;
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
|
|
||||||
import static java.lang.System.exit;
|
import static java.lang.System.exit;
|
||||||
@@ -56,34 +59,64 @@ public class ApnsServer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
productSvc = new ApnsClientBuilder()
|
if (!StringUtils.isEmpty(mConfig.authKeyPath) && !StringUtils.isEmpty(mConfig.keyId) && !StringUtils.isEmpty(mConfig.teamId)) {
|
||||||
.setApnsServer(ApnsClientBuilder.PRODUCTION_APNS_HOST)
|
productSvc = new ApnsClientBuilder()
|
||||||
.setClientCredentials(new File(mConfig.cerPath), mConfig.cerPwd)
|
|
||||||
.setMetricsListener(productMetricsListener)
|
|
||||||
.build();
|
|
||||||
|
|
||||||
developSvc = new ApnsClientBuilder()
|
|
||||||
.setApnsServer(ApnsClientBuilder.DEVELOPMENT_APNS_HOST)
|
|
||||||
.setClientCredentials(new File(mConfig.cerPath), mConfig.cerPwd)
|
|
||||||
.setMetricsListener(developMetricsListener)
|
|
||||||
.build();
|
|
||||||
|
|
||||||
if (mConfig.voipFeature) {
|
|
||||||
productVoipSvc = new ApnsClientBuilder()
|
|
||||||
.setApnsServer(ApnsClientBuilder.PRODUCTION_APNS_HOST)
|
.setApnsServer(ApnsClientBuilder.PRODUCTION_APNS_HOST)
|
||||||
.setClientCredentials(new File(mConfig.voipCerPath), mConfig.voipCerPwd)
|
.setSigningKey(ApnsSigningKey.loadFromPkcs8File(new File(mConfig.authKeyPath), mConfig.teamId, mConfig.keyId))
|
||||||
.setMetricsListener(productMetricsListener)
|
.setMetricsListener(productMetricsListener)
|
||||||
.build();
|
.build();
|
||||||
developVoipSvc = new ApnsClientBuilder()
|
|
||||||
|
developSvc = new ApnsClientBuilder()
|
||||||
.setApnsServer(ApnsClientBuilder.DEVELOPMENT_APNS_HOST)
|
.setApnsServer(ApnsClientBuilder.DEVELOPMENT_APNS_HOST)
|
||||||
.setClientCredentials(new File(mConfig.voipCerPath), mConfig.voipCerPwd)
|
.setSigningKey(ApnsSigningKey.loadFromPkcs8File(new File(mConfig.authKeyPath), mConfig.teamId, mConfig.keyId))
|
||||||
.setMetricsListener(developMetricsListener)
|
.setMetricsListener(developMetricsListener)
|
||||||
.build();
|
.build();
|
||||||
}
|
|
||||||
|
|
||||||
|
if (mConfig.voipFeature) {
|
||||||
|
productVoipSvc = new ApnsClientBuilder()
|
||||||
|
.setApnsServer(ApnsClientBuilder.PRODUCTION_APNS_HOST)
|
||||||
|
.setSigningKey(ApnsSigningKey.loadFromPkcs8File(new File(mConfig.authKeyPath), mConfig.teamId, mConfig.keyId))
|
||||||
|
.setMetricsListener(productMetricsListener)
|
||||||
|
.build();
|
||||||
|
developVoipSvc = new ApnsClientBuilder()
|
||||||
|
.setApnsServer(ApnsClientBuilder.DEVELOPMENT_APNS_HOST)
|
||||||
|
.setSigningKey(ApnsSigningKey.loadFromPkcs8File(new File(mConfig.authKeyPath), mConfig.teamId, mConfig.keyId))
|
||||||
|
.setMetricsListener(developMetricsListener)
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
productSvc = new ApnsClientBuilder()
|
||||||
|
.setApnsServer(ApnsClientBuilder.PRODUCTION_APNS_HOST)
|
||||||
|
.setClientCredentials(new File(mConfig.cerPath), mConfig.cerPwd)
|
||||||
|
.setMetricsListener(productMetricsListener)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
developSvc = new ApnsClientBuilder()
|
||||||
|
.setApnsServer(ApnsClientBuilder.DEVELOPMENT_APNS_HOST)
|
||||||
|
.setClientCredentials(new File(mConfig.cerPath), mConfig.cerPwd)
|
||||||
|
.setMetricsListener(developMetricsListener)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
if (mConfig.voipFeature) {
|
||||||
|
productVoipSvc = new ApnsClientBuilder()
|
||||||
|
.setApnsServer(ApnsClientBuilder.PRODUCTION_APNS_HOST)
|
||||||
|
.setClientCredentials(new File(mConfig.voipCerPath), mConfig.voipCerPwd)
|
||||||
|
.setMetricsListener(productMetricsListener)
|
||||||
|
.build();
|
||||||
|
developVoipSvc = new ApnsClientBuilder()
|
||||||
|
.setApnsServer(ApnsClientBuilder.DEVELOPMENT_APNS_HOST)
|
||||||
|
.setClientCredentials(new File(mConfig.voipCerPath), mConfig.voipCerPwd)
|
||||||
|
.setMetricsListener(developMetricsListener)
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
}
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
exit(-1);
|
exit(-1);
|
||||||
|
} catch (NoSuchAlgorithmException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
} catch (InvalidKeyException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user