У меня проблемы с использованием класса AWSIotDataManager
для подключения к брокеру AWS MQTT для подписки на события. Я передавал строку certificateID
методу .connect
, но затем понял, что выше определения метода .connect
упоминается, что «certificateID
должно храниться в KeyChain».
Я наткнулся на класс AWSIoTKeychain
, но я не уверен, как его использовать.
Я также сталкивался с AWSIoTManager.createKeysAndCertificateFromCsr
, но я также не могу понять, как его использовать, учитывая тот факт, что я использую класс AWSIoTDataManager
.
Как мне сохранить сертификат в цепочке для ключей? и как я могу использовать его для подключения к брокеру AWS MQTT? (У меня есть certID
, pem
и privateKey
)
let credentialsProvider:AWSCognitoCredentialsProvider = AWSCognitoCredentialsProvider(regionType: AWSRegionType.EUWest1, identityPoolId: consumerPoolId);
let iotEndPoint = AWSEndpoint(urlString: endPoint);
let iotDataConfiguration = AWSServiceConfiguration(
region: AWSRegionType.EUWest1,
endpoint: iotEndPoint,
credentialsProvider: credentialsProvider
);
AWSServiceManager.default()?.defaultServiceConfiguration = iotDataConfiguration;
AWSIoTDataManager.register(with: iotDataConfiguration!, forKey: KEYSTORE_NAME);
iotDataManager = AWSIoTDataManager(forKey: KEYSTORE_NAME);
func mqttEventCallback(status: AWSIoTMQTTStatus) {
if(status == AWSIoTMQTTStatus.connected) {
iotDataManager.subscribe(
toTopic: topic,
qoS: .messageDeliveryAttemptedAtMostOnce,
messageCallback: {
(payload) ->Void in
let stringValue = String(data: payload, encoding: String.Encoding.utf8)!;
// do stuff with the payload
// ...
} );
}
}
let isConnected: Bool = iotDataManager.connect(withClientId: clientID,
cleanSession: true,
certificateId: certID,
statusCallback: mqttEventCallback);