支持APNS p8证书

This commit is contained in:
heavyrian2012
2024-12-16 21:53:50 +08:00
parent fd517afa12
commit 6cc3c15bb7
4 changed files with 94 additions and 18 deletions

View File

@@ -0,0 +1,6 @@
-----BEGIN PRIVATE KEY-----
MIGXAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBHkwdwIBAQQgGyCRn7aWnLChrRxF
2Xf0PN7BOMIF4EQth/OynvzXY0ygCgYIKoZIzj0DAQehRANCAAQ9vdBVqZfAvFi+
WSWiF1I9V54lt377jAPddY53Gd3f49imoE39C001TOhbso7t4U5+1m5gar6Y80fZ
w1n01kI1
-----END PRIVATE KEY-----

View File

@@ -1,8 +1,17 @@
# p12证书和p8证书选一个就行。如果选p12证书请把 apns.auth_key_path的这几行删掉。
# p12证书配置。
apns.cer_path=apns/wfc.p12
apns.cer_pwd=123456
apns.voip_cer_path=apns/wfc_voip.p12
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.voip_alert=ring.caf

View File

@@ -11,6 +11,10 @@ public class ApnsConfig {
String cerPath;
String cerPwd;
String authKeyPath;
String keyId;
String teamId;
String voipCerPath;
String voipCerPwd;
@@ -74,4 +78,28 @@ public class ApnsConfig {
public void setVoipFeature(boolean 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;
}
}

View File

@@ -4,6 +4,7 @@ import cn.wildfirechat.push.PushMessage;
import cn.wildfirechat.push.PushMessageType;
import cn.wildfirechat.push.Utility;
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.util.ApnsPayloadBuilder;
import com.turo.pushy.apns.util.SimpleApnsPushNotification;
@@ -21,6 +22,8 @@ import org.springframework.util.StringUtils;
import javax.annotation.PostConstruct;
import java.io.File;
import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.Calendar;
import static java.lang.System.exit;
@@ -56,6 +59,32 @@ public class ApnsServer {
}
try {
if (!StringUtils.isEmpty(mConfig.authKeyPath) && !StringUtils.isEmpty(mConfig.keyId) && !StringUtils.isEmpty(mConfig.teamId)) {
productSvc = new ApnsClientBuilder()
.setApnsServer(ApnsClientBuilder.PRODUCTION_APNS_HOST)
.setSigningKey(ApnsSigningKey.loadFromPkcs8File(new File(mConfig.authKeyPath), mConfig.teamId, mConfig.keyId))
.setMetricsListener(productMetricsListener)
.build();
developSvc = new ApnsClientBuilder()
.setApnsServer(ApnsClientBuilder.DEVELOPMENT_APNS_HOST)
.setSigningKey(ApnsSigningKey.loadFromPkcs8File(new File(mConfig.authKeyPath), mConfig.teamId, mConfig.keyId))
.setMetricsListener(developMetricsListener)
.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)
@@ -80,10 +109,14 @@ public class ApnsServer {
.setMetricsListener(developMetricsListener)
.build();
}
}
} catch (IOException e) {
e.printStackTrace();
exit(-1);
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
} catch (InvalidKeyException e) {
throw new RuntimeException(e);
}
}