创建Login with Amazon项目
本节将介绍如何为Login with Amazon创建和配置新的Android项目,以及如何在项目中添加代码,以便用户使用Login with Amazon进行登录。如果您还没有用于Login with Amazon的应用项目,应根据以下说明在Android Studio创建一个应用项目。如果已有应用,请跳转到安装Login with Amazon程序库。
- 在Android Studio中创建一个新项目
- 安装Login with Amazon程序库
- 为您的项目设置网络权限
- 为您的项目添加API密钥
- 为您的活动处理配置更改
- 为您的项目添加WorkflowActivity
在Android Studio中创建一个新项目
- 启动Android Studio。
- 从File(文件)菜单中选择New(新建)和Project(项目)。
- 输入Application Name(应用名称),并为您的应用输入Company Name(公司名称)。
- 输入与对应的Application(应用)和Company Name(公司名称)。data-content程序包名称是Android应用的唯一标识符,通常形式为<code>com.companyname.appname</code>。data-content程序包名称是您在为应用注册Login with Amazon时选择的。如果您的应用尚未注册,请先选择程序包名称,项目创建完成后再遵循注册Login with Amazon中的说明进行操作。如果您的应用程序包与注册程序包名称不匹配,则无法成功进行Login with Amazon调用。
- 选择Minimum Required SDK(最低要求的SDK)
API 11: Android 3.0 (Honeycomb)
或更高版本,然后单击Next(下一步)。您也可以使用Minimum Required SDK(最低要求的SDK)API 8: Android 2.2 (Froyo)
或更高版本(使用v4 Android支持库时)。 - 选择您要创建的活动类型,然后单击Next(下一步)。
- 填写相关的详细信息,然后单击Finish(完成)。
现在,您的工作区中将有一个新项目,可以用来调用Login with Amazon。
安装Login with Amazon程序库
如果您尚未下载适用于Android的Login with Amazon SDK,请参阅安装适用于Android的Login with Amazon SDK。
- 使用计算机的文件系统,在适用于Android的Login with Amazon SDK中找到login-with-amazon-sdk.jar文件。将其复制到剪贴板。
- 在Android Studio中打开您的项目,并打开Project View(项目视图)。
- 在Project View(项目视图)中,右键单击项目/应用根目录并选择Paste(粘贴)。
- 在Project View(项目视图)中,右键单击login-with-amazon-sdk.jar并选择Add As Library(添加为库)。
为您的项目设置网络权限
为使用Login with Amazon,您的应用必须要访问网络和网络状态信息。您的应用必须在Android清单中声明这些权限(如果尚未声明)。
- 在Project View(项目视图)双击并打开 AndroidManifest.xml。
-
将以下代码行复制粘贴到
application
区域以外的文件中:<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
示例:
为您的项目添加API密钥
您的Android应用注册Login with Amazon时,会分配到一个。API密钥。亚马逊授权管理器将使用该标识符,向Login with Amazon标识您的应用。授权服务。
如果您使用亚马逊应用商店为应用签名,亚马逊应用商店会自动提供API密钥。如果您没有使用亚马逊应用商店,亚马逊授权管理器在运行时将从assets
目录中的api_key.txt
文件中加载此值。
- 如果您尚未拥有API密钥,请参阅Android应用签名与API密钥,并按照检索Android API密钥中的说明操作。
- 在Android Studio的Project View(项目视图)中,右键单击
assets
文件夹,然后单击New(新建) > File(文件)。如果您没有assets
文件夹,请右键单击项目的根目录,然后选择 NEW(新建) > Folder(文件夹) > Assets Folder(Assets文件夹)。 - 将文件命名为api_key.txt。
- 现在,编辑器窗口将用来处理名为api_key.txt的文本文件。将您的API密钥添加到文本文件
- 在File(文件)菜单中,单击Save(保存)。
api_key.txt
文件中,您在尝试连接Login with Amazon授权服务时可能会看到ERROR_ACCESS_DENIED
。如果发生这种情况,请尝试删除所有引导空格、尾随空格、换行符、换页符及其他可疑字符。(例如,使用字节顺序标记的编辑器可能会在api_key.txt
文件的开头添加0xEF 0xBF 0xBB
或其他十六进制序列。)也可尝试检索新的API密钥。集成Login with Amazon和应用内购买的应用
使用Appstore SDK或应用内购买SDK (IAP SDK)的应用对API密钥有单独要求。
调试应用
对于应用的预发布或“调试”版本,必须创建API密钥并将其存储在项目中。
- 在项目的assets文件夹内创建一个名为
api_key.txt
的文件。必须将该文件放置在此特定目录中。 - 插入API密钥作为此
api_key.txt
文件中的唯一数据。
生产应用
对于应用的发布或“生产”版本,如果应用使用Appstore SDK,则必须为该应用的发布版本创建额外的API密钥。如果使用较旧的IAP SDK v2.0,并且您使用自己的证书为应用签名,还必须为应用的发布版本创建API密钥。反之,如果使用IAP SDK v2.0并授权亚马逊代表您为您的应用签名,则无需创建额外的API密钥。如需相关摘要,请参阅下表。
可以在开发者控制台中找到亚马逊应用商店证书哈希值,为现有应用创建API密钥。转到我的应用程序 > 选择您的应用 > 上传APK文件 > 应用商店证书哈希值。
使用Appstore SDK | 自我签名发布应用 | 生产或调试版本 | 如何为您的应用签名 |
---|---|---|---|
生产 | API密钥是为发布应用自动生成和注入的,无需执行任何其他操作。 | ||
生产 | 开发者必须使用自己的发布证书哈希值创建API密钥,并将其添加到资产中。 | ||
生产 | 开发者必须在开发者控制台中使用发布证书哈希值创建API密钥,并将其添加到资产中。 | ||
生产 | 开发者必须使用自己的发布证书哈希值创建API密钥,并将其添加到资产中。 | ||
任何 | 任何 | 调试 | 开发者必须使用自己的发布证书哈希值创建API密钥,并将其添加到资产中。 |
为您的活动处理配置更改
如果用户在登录时更改屏幕方向或者设备键盘状态,将会触发当前活动进行重新启动。重启将会意外关闭登录界面。为防止出现这种情况,应将活动设置为使用authorize
方法手动处理配置更改。这将防止活动重新启动。
- 在Project View(项目视图)中,双击并打开AndroidManifest.xml文件。
- 在Application(应用)区域,找到处理Login with Amazon的活动(例如 MainActivity)。
-
为步骤2中找到的活动添加以下属性:
android:configChanges="keyboard|keyboardHidden|orientation"
适用于API 13或更高版本:
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
- 在File(文件)菜单中单击Save(保存)。
现在,如果键盘或设备方向发生变化,Android将为您的活动调用onConfigurationChanged方法。除非要为应用处理配置更改,否则无需实现此函数。
为您的项目添加WorkflowActivity
用户单击Login with Amazon按钮时,API将启动网页浏览器向用户显示登录和同意页面。为使浏览器活动正常运行,必须将WorkflowActivity
添加到向您的清单中。
如果您之前已集成Login with Amazon SDK,或者您的AndroidManifest.xml中已含有 com.amazon.identity.auth.device.authorization.AuthorizationActivity
,则必须将其删除并替换为WorkflowActivity
。
- 在Project View(项目视图)中,双击并打开AndroidManifest.xml文件。
-
在Application(应用)区域,添加以下代码:
<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>
${applicationId}
替换为此应用的程序包名称。