需要帮助开发基于AWS IOT的移动应用程序

时间:2018-06-03 10:51:31

标签: aws-iot aws-mobilehub

我是移动开发领域的新手,我正在为我的一个客户使用aws iot云解决方案,我必须向我的客户提供移动应用程序,其中列出了以下任务。 1)通过facebook / google登录 2)如果设备位于多个区域,则显示选择这些区域的选项 3)列出该地区的设备 4)获取设备的状态 5)将消息发布到设备

我知道AWs IOT,只需要指针我应该如何继续开发基于AWS IOT的移动应用程序。

2 个答案:

答案 0 :(得分:0)

我建议你看看aws-mobile-react-native-starter

希望它有所帮助。

答案 1 :(得分:0)

这将是一个很长的答案。

  

通过Facebook / Google登录

您可以选择使用AWS Cognito或进行独立Google / Facebook登录。我选择了独立的Google登录,因为我发现移动应用程序更容易。此外,在AWS Cognito中,我无法在离线时使用该应用程序。

在移动集线器中,您可以配置登录的所有设置。下载.JSON 并使用您的应用程序进行配置。

  

列出区域内的设备

为此,您需要创建一个数据库并存储每个用户及其各自的设备。然后在您的应用程序中查询它。

  

获取设备和发布的状态

在这里,您需要订阅/发布您在AWS IoT中制作的内容。按照here给出的确切步骤操作。现在,您阅读的示例适用于您不想要的未经身份验证的用户。从现在开始,还有更多的步骤

  1. 将IoT策略附加到经过身份验证的池。
  2. 现在每个用户都需要附加一个PrinciplePolicy。您可以使用AWS中的Lambda函数自动执行该过程。代码如下:
  3. '

    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