amazon LWA登录接入

本文详细介绍了如何在Android项目中集成AmazonLogin,包括下载jar包,修改AndroidManifest.xml,添加秘钥文件,以及实现代码接入、授权管理和登录功能。特别提到了可能遇到的初始化错误和解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值