amazon LWA登录接入

1.导入jar包:

把lwa的例子下载下来。然后将例子中的login-with-amazon-sdk.jar包导入到要准备接入的项目的libs文件夹下(没有libs文件夹就新建一个)。build.gradle的dependencies中记得包含

implementation fileTree(dir: '../libs', include: ['*.jar','*.aar']) 
implementation fileTree(dir: 'libs', include: ['*.jar','*.aar'])

2.AndroidManifest.xml 修改

<activity android:name="com.amazon.identity.auth.device.workflow.WorkflowActivity"
        android:theme="@android:style/Theme.NoDisplay"
        android:allowTaskReparenting="true"
        android:launchMode="singleTask">
        <intent-filter>
            <action android:name="android.intent.action.VIEW"/>
            <category android:name="android.intent.category.DEFAULT"/>
            <category android:name="android.intent.category.BROWSABLE"/>
            <!-- android:host must use the full package name found in Manifest General Attributes -->
            <data android:host="${applicationId}" android:scheme="amzn"/>
        </intent-filter>
</activity>


...
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
...

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/

3.添加秘钥文件

在开发者平台创建安全配置文件

也可以从这里了解如何获取签名。通过包名+签名信息就可以生成对应的密钥信息了。将密钥信息保存到一个名为api_key.txt文件中,然后将此文件放到androidStudio项目的assets文件中(注意asset文件是项目的android视图下对应的app_amazon(一般名字是app)的assets文件夹下。如果没有该文件夹,右击app_amazon创建,详见下图)。 一定要确保api_key.txt在Android视图下的对应的assets文件夹下面。

4.代码接入

  初始化以及登录的回调监听

requestContext = RequestContext.create(mainActivity);
requestContext.registerListener(new AuthorizeListener() {
            /*授权已成功完成。*/
            @Override
            public void onSuccess(AuthorizeResult result) {
                /*您的应用现已获得请求范围授权*/
                authorizeResult = result;
                System.out.println("Amazon 授权 onSuccess" + result);
                getAmazonUserProfile();
            }

            /*尝试授权
            应用时出错。*/
            @Override
            public void onError(AuthError ae) {
                /*提示用户发生错误*/
                System.out.println("Amazon 授权 onError" + ae);
            }

            /*授权未完成便已取消。*/
            @Override
            public void onCancel(AuthCancellation cancellation) {
                /*将UI重新设置为随时登录状态*/
                System.out.println("Amazon 授权 onCancel" + cancellation);
            }
        });
    public void getAmazonUserProfile() {
        User.fetch(mainActivity, new Listener<User, AuthError>() {

            /* fetch completed successfully. */
            @Override
            public void onSuccess(User user) {
                final String name = user.getUserName();
                final String email = user.getUserEmail();
                final String account = user.getUserId();
                final String zipCode = user.getUserPostalCode();
                System.out.println("getAmazonUserProfile success " + user);
                //后面处理根据数据去请求的登录

            }

            /* There was an error during the attempt to get the profile. */
            @Override
            public void onError(AuthError ae) {
                System.out.println("getAmazonUserProfile failed " + ae);
            }
        });
    }

    //清除授权数据并注销用户
    //清除 AuthorizationManager本地数据存储中的用户授权数据。应用若要检索个人资料数据,用户必须重新进行登录。使用此方法可注销用户,也可以对应用中的登录问题进行故障排除。
    public static void onBtnCancelAmazonLoginAndClearAmazonLoginData() {
        AuthorizationManager.signOut(AmazonManager.getInstance().getMainActivity(), new Listener<Void, AuthError>() {
            @Override
            public void onSuccess(Void response) {
                // 设置退出状态UI
                System.out.println("Amzon signOut onSuccess");
                //TODO
            }

            @Override
            public void onError(AuthError authError) {
                // 记录错误
                System.out.println("Amzon signOut onError" + authError);
                //TODO
            }
        });
    }

点击登录的处理:

public static void login() {
    RequestContext requestContext = AmazonManager.getInstance().requestContext;
    AuthorizationManager.authorize(new AuthorizeRequest
                .Builder(requestContext)
                .addScopes(ProfileScope.profile(), ProfileScope.postalCode())
                .build());
}

public static void loginAutomatic() {
    //快速登录 不再前端验证授权了
    //TODO
}

到这里amazon的对接业务基本完成,剩下的就是和对应项目的账号系统对接完成即可。

注意: 初始化RequestContext 代码可能报错

添加

implementation 'com.android.support:appcompat-v7:27.1.1'

或者

implementation 'com.android.support:multidex:1.0.3'

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
AWS IoT是一种完全托管的云服务,用于将物联网(IoT)设备连接到Amazon云平台,实现设备的管理和数据通信。而EC2(Elastic Compute Cloud)是亚马逊AWS云计算服务的一部分,为用户提供可伸缩的虚拟服务器环境。 要实现AWS IoT MQTT设备接入EC2,首先需要将MQTT设备注册到AWS IoT平台。在AWS IoT中,我们可以创建设备证书和密钥,然后将其下载到设备上。设备使用这些证书和密钥来与AWS IoT平台建立安全的连接。 然后,在EC2中,我们需要设置一个运行MQTT Broker的服务器。可以选择使用Mosquitto等开源软件或AWS IoT Core来搭建MQTT Broker。根据实际需求,我们可以选择搭建独立的MQTT Broker服务器,或者在现有的EC2实例中运行。 接下来,我们需要为EC2实例配置安全组规则,以允许设备通过MQTT协议与EC2进行通信。可以为设备定义入站和出站规则,以确保连接的安全性。 完成这些配置后,设备就可以使用其证书和密钥通过MQTT协议与EC2建立连接了。设备可以发布数据到指定的主题(topic),或订阅感兴趣的主题,接收其他设备或EC2发布的消息。 通过AWS IoT MQTT设备接入EC2,可以实现设备和云端之间的实时数据传输和通信。设备可以将传感器数据、状态信息等上传到EC2进行处理和分析,也可以接收来自EC2的指令和控制信息。 总之,AWS IoT MQTT设备接入EC2是一种有效的方式,将物联网设备连接到云计算环境中,实现设备管理和数据交换。同时,它还提供了强大的安全性和灵活性,满足不同场景下的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值