#ios #swift #amazon-web-services #aws-sdk #aws-iot
#iOS #swift #amazon-веб-сервисы #aws-sdk #aws-iot
Вопрос:
У меня возникли проблемы с использованием AWSIotDataManager
класса для подключения к AWS MQTT broker, чтобы подписаться на события. Я передавал certificateID
строку .connect
методу, но затем понял, что над .connect
определением метода упоминается, что: « certificateID
должно быть сохранено в цепочке ключей».
Я наткнулся на 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);