我现在尝试了一些我们的,但我无法让它工作。我想从 Qt 应用程序推送一些通知。试图让它在安装了 Qt 5.8 的 macOS Sierra 上工作,也可以在安装 Qt 5.8 的 Pi3 上工作。
我用“fastlane pem”创建了我的推送证书,并用“Pusher”对其进行了测试,它工作正常。但我无法让它在 Qt 中工作......
首先是我用来初始化和连接 QSslSocket 的代码:
QSslSocket * ssl = new QSslSocket;
connect(ssl, &QSslSocket::encrypted, this, &IOSPusher::encrypted );
connect(ssl, static_cast<void(QSslSocket::*)(const QList<QSslError> &)>(&QSslSocket::sslErrors),this,&IOSPusher::sslErrors);
connect(ssl, static_cast<void(QSslSocket::*)(QAbstractSocket::SocketError)>(&QSslSocket::error),this, &IOSPusher::error );
connect(ssl,&QSslSocket::stateChanged,this,&IOSPusher::stateChanged );
加载证书
QString path = QStandardPaths::writableLocation(certificateLocation) + "/apns.pem";
const auto certs = QSslCertificate::fromPath(path);
if(certs.count() > 0){
qDebug() << "IOSPusher: Certificate loaded successfully";
}else{
qDebug() << "Could not load certificate : " + path;
}
QSslConfiguration config = QSslConfiguration::defaultConfiguration();
config.setCaCertificates(certs);
ssl->setSslConfiguration(config);
ssl->connectToHostEncrypted( gateway.sandbox.push.apple.com,2195 );
这就是我得到的输出:
IOSPusher: Certificate loaded successfully
IOSPusher::stateChanged QAbstractSocket::HostLookupState
IOSPusher::stateChanged QAbstractSocket::ConnectingState
IOSPusher::stateChanged QAbstractSocket::ConnectedState
IOSPusher::error QAbstractSocket::SocketError(13)
IOSPusher::stateChanged QAbstractSocket::ClosingState
IOSPusher::stateChanged QAbstractSocket::UnconnectedState
所以根据Qt文档的错误:
QAbstractSocket::SocketError(13)
意思如下:
SslHandshakeFailedError
和
> SSL/TLS 握手失败,无法建立加密通道。sslErrors() 信号应该已经发出。
但是在sslErrors()
我的情况下不会发出信号....
SSL/TLS 握手失败,所以连接被关闭(仅在 QSslSocket 中使用)
任何想法或示例如何建立与苹果的加密连接?
提前致谢!