это будет длинный ответ, держитесь крепко.
Войдите через Facebook / Google
Здесь у вас есть два варианта: использовать AWS Cognito илизайти в независимый логин Google / Facebook.Я выбрал независимую регистрацию в Google, поскольку мне было проще для моего мобильного приложения.Кроме того, в AWS Cognito я не смог использовать приложение в автономном режиме.
В мобильном хабе вы можете настроить все параметры для входа в систему.Загрузите .JSON и настройте его в своем приложении.
Список устройств в регионе
Для этого вам необходимо создать базу данных и сохранить каждого пользователя.и их соответствующие устройства.Затем запросите его в своем приложении.
Получить статус устройства и публикации
Здесь вам необходимо подписаться / опубликовать свою вещь, созданную в AWS IoT.Следуйте точным инструкциям здесь .Теперь прочитанный вами пример предназначен для неаутентифицированного пользователя, который вам не нужен.Теперь есть еще несколько шагов
- Присоединение политики IoT к пулу с проверкой подлинности.
- Теперь каждому пользователю необходимо присоединить PrinciplePolicy.Вы можете автоматизировать процесс с помощью функции Lambda в AWS.Код ниже:
'
exports.handler = (event, context, callback) => {
console.log('Received event:', JSON.stringify(event, null, 2))
event.Records.forEach((record) => {
console.log(record.eventName);
if (record.eventName == "INSERT") {
console.log('DynamoDB Record:', JSON.stringify(record));
console.log('DynamoDB Record:', record.dynamodb['Keys']['UserId']['S']);
var user = record.dynamodb['Keys']['UserId']['S'];
const iotMgmt = new AWS.Iot();
return new Promise(function(resolve, reject) {
let params = {
policyName: "basic",
principal: user
};
iotMgmt.attachPrincipalPolicy(params, (err, res) => {
console.log("Attaching IoT policy to " + user);
if (err) {
console.error(err);
reject(err);
}
else {
resolve();
}
});
});
}
});
};
Поскольку вы используете социальные логины, вам необходимо добавить следующий код в свое приложение для Facebook:
Map<String, String> logins = new HashMap<String, String>();
logins.put("graph.facebook.com", AccessToken.getCurrentAccessToken().getToken());
credentialsProvider.setLogins(logins);
Чтобы получить изменения в тени в приложении $aws/things/thing_name/shadow/update/accepted
И опубликовать данные в виде тени $aws/things/thing_name/shadow/update