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'