亚马逊AWS官方博客
全新推出 – 适用于 Android 和 iOS 的 AWS Amplify 库
开发移动应用程序时,您必须为每个项目开发一组由云技术提供支持的功能。例如,大多数应用程序都需要用户身份验证或详细的应用内分析。您的应用程序很可能要调用 REST API 或 GraphQL API,并且还需要支持脱机场景和数据同步。AWS Amplify 让您可以轻松地在移动和 Web 应用程序内集成此类功能。
AWS Amplify 由一组工具和服务组成,用于构建安全、可扩展的移动和 Web 应用程序。它由三个组件组成:用于添加云功能的开源库和 UI 组件集,用于创建和管理云后端的命令行交互式工具链,以及部署和托管全堆栈无服务器 Web 应用程序的 AWS 服务 AWS Amplify 控制台。
今天,我高兴地宣布,Amplify iOS 和 Amplify Android 库与工具正式推出,以帮助移动应用程序开发人员轻松构建由云技术提供支持的安全、可扩展的应用程序。
直到今天,在您开发由云提供支持的移动应用程序时,您一直都要结合使用各种工具和开发工具包:使用 Amplify CLI 创建和管理后端,并使用一个或多个 AWS 移动开发工具包来访问后端。通常,AWS 移动开发工具包是封装 AWS 服务 API 的低级“封套”。它们要求您了解 API 的详细信息,大多数时候还要求编写许多行无差别的代码,例如对象序列化(和反序列化)、错误处理等。
Amplify iOS 和 Amplify Android 可以简化此过程。首先,它们提供围绕使用案例的本地库,例如身份验证、数据存储和访问、机器学习预测等使用案例。它们提供了声明性接口,通过这种接口,您可以以编程方式,通过抽象应用最佳实践。考虑使用案例而非 AWS 服务可以带来更高级别的抽象、更快的的开发周期和更少的代码行。其次,它们提供了可与原生 IDE 工具链集成的工具,包括适用于 iOS 的 XCode 和适用于 Android 的 Gradle。
我们建议您使用 Amplify iOS 或 Amplify Android 在您的移动应用程序中集成基于云的后端。
如何开始使用?
我已经构建了两个简单的移动应用程序(一个基于 iOS,另一个基于 Android),向您展示如何入门。这些示例的源代码可在我的 GitHub 中找到。如您所见,我不是平面设计师。这些应用程序具有用于触发不同流程的 UI 按钮列表,并且结果仅会显示在控制台中。
用于移动设备的 Amplify 库围绕“身份验证”、“API”(REST 和 GraphQL)、“分析”、“文件存储”、“数据存储”和“预测”这几个类别进行组织。在此示例中,我使用了三个类别。身份验证,用于实施登录、注册和使用 Facebook 登录流。数据存储,使用可查询的设备上持久性存储引擎。它具有内置的版本控制、冲突检测和解决功能,可在应用程序与云之间无缝同步数据。我还使用预测类别,添加英语与法语之间的自动翻译。
让我们回顾一下,在每个平台上开始使用的四个主要步骤和代码行。有关详细的分步教程,请查看 Amplify iOS 或 Amplify Android 文档。
第一步是设置项目、添加所需的依赖项和构建步骤。
在 iOS 上,您要向您的 Podfile 中添加几行代码,并为项目的构建阶段添加 AWS Amplify 构建脚本。
在 Android 上,您在用于模块和应用的 Gradle 文件中执行相同操作。
// iOS Podfile
target 'amplify-lib-ios-demo' do
# Comment the next line if you don't want to use dynamic frameworks
use_frameworks!
# Pods for amplify-lib-ios-demo
pod 'Amplify'
pod 'Amplify/Tools'
pod 'AmplifyPlugins/AWSAPIPlugin'
pod 'AmplifyPlugins/AWSDataStorePlugin'
pod 'AmplifyPlugins/AWSCognitoAuthPlugin'
pod 'AWSPredictionsPlugin'
// Android build.gradle fragment (Module: app)
...
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
dependencies {
implementation 'com.amplifyframework:core:1.0.0'
implementation 'com.amplifyframework:aws-datastore:1.0.0'
implementation 'com.amplifyframework:aws-api:1.0.0'
implementation 'com.amplifyframework:aws-predictions:1.0.0'
implementation 'com.amplifyframework:aws-auth-cognito:1.0.0'
}
...
// Android build.gradle fragment (Project: My Application)
...
repositories {
mavenCentral()
google()
jcenter()
}
dependencies {
classpath 'com.amplifyframework:amplify-tools-gradle-plugin:1.0.0'
}
apply plugin: 'com.amplifyframework.amplifytools'
...
在 iOS 上,您还必须向构建步骤手动添加一个 amplify-tools.sh
。
完成后,您要键入 pod install
(对于 iOS),或者使用 Gradle 同步
项目。
第二步是在应用程序初始化时,向 Amplify 添加对应于每个类别的插件。在 iOS 上,我使用的是来自 AppDelegate
的 didFinishLaunchingWithOptions
。在 Android 上,我使用的是来自 MainActivity
的 onCreate
。您可以随意选择在应用程序的任何阶段来初始化 Amplify,而非一定要在应用程序启动时进行初始化。
// iOS AppDelegate class
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
do {
try Amplify.add(plugin: AWSAPIPlugin())
try Amplify.add(plugin: AWSDataStorePlugin(modelRegistration: AmplifyModels()))
try Amplify.add(plugin: AWSCognitoAuthPlugin())
try Amplify.add(plugin: AWSPredictionsPlugin())
try Amplify.configure()
print("Amplify initialized")
} catch {
print("Failed to configure Amplify \(error)")
}
}
// Android MainActivity class (Kotlin version)
override fun onCreate(savedInstanceState: Bundle?) {
// ...
try {
Amplify.addPlugin(AWSDataStorePlugin())
Amplify.addPlugin(AWSApiPlugin())
Amplify.addPlugin(AWSCognitoAuthPlugin())
Amplify.addPlugin(AWSPredictionsPlugin())
Amplify.configure(applicationContext)
Log.i(TAG, "Initialized Amplify")
} catch (error: AmplifyException) {
Log.e(TAG, "Could not initialize Amplify", error)
}
}
第三步根据类别的不同而有所不同。通常情况下,这涉及到使用 AWS Amplify 命令行来预置和配置您的后端。输入诸如 amplify add auth
或 amplify add predictions
之类的命令来配置类别。
例如,要使用 Amazon Cognito 和社交身份提供程序(例如使用 Facebook 登录)来配置用户身份验证,请输入类似下面所示的代码。在创建和配置云后端时,此步骤对于 iOS 和 Android 平台都是相同的。
要了解如何使用 Facebook、Google 或 Amazon 之类的社交身份提供程序配置单点登录,您可以参考我在 Amplify iOS 研讨会中撰写的详尽分步式说明(我将尽快更新此研讨会的内容,以利用这些新的 AWS Amplify 库)。
配置“数据存储”类别涉及到为数据创建 GraphQL 架构。Amplify 生成原生(Swift 或 Java)代码,以便在您的应用程序中表示数据。它会透明地处理一个脱机数据存储,以存储您的数据,并在有网络连接可用时将其与后端同步。
第四步也是最后一步,就是在运行时实际调用 Amplify 的库代码。
例如,要触发使用 Amazon Cognito 托管的 Web 用户界面执行身份验证,您可以使用如下代码:
// iOS (swift) in AppDelegate object
func signIn() {
_ = Amplify.Auth.signInWithWebUI(presentationAnchor: UIApplication.shared.windows.first!) { (result) in
switch(result) {
case .success(let result):
print(result)
case .failure(let error):
print("Can not signin \(error)")
}
}
}
// Android (Kotlin) in MainActivity
fun signIn(view: View?) {
Amplify.Auth.signInWithWebUI(
this,
{ result: AuthSignInResult -> Log.i(TAG, result.toString()) },
{ error: AuthException -> Log.e(TAG, error.toString()) }
)
}
上述代码会触发如下 Web 视图:
类似地,要在“数据存储”中创建一个项目(并通过 GraphQL 将其持久保存到 Amazon DynamoDB 中),您需要使用如下代码:
// iOS
func create() {
let note = Note(content: "Build iOS application")
Amplify.DataStore.save(note) {
switch $0 {
case .success:
print("Added note")
case .failure(let error):
print("Error adding note - \(error.localizedDescription)")
}
}
}
// Android
fun create(view: View?) {
val note: Note = Note.builder()
.content("Build Android application")
.build()
Amplify.DataStore.save(
note,
{ success -> Log.i(TAG, "Saved item: " + success.item.content) },
{ error -> Log.e(TAG, "Could not save item to DataStore", error) }
)
要使用“预测”类别触发文本翻译,您只需要使用如下代码:
// iOS
func translate(text: String) {
_ = Amplify.Predictions.convert(textToTranslate: text, language: LanguageType.english, targetLanguage: LanguageType.french) {
switch $0 {
case .success(let result):
// update UI on main thread
DispatchQueue.main.async() {
self.data.translatedText = result.text
}
case .failure(let error):
print("Error adding note - \(error.localizedDescription)")
}
}
}
// Android
fun translate(view: View?) {
Log.i(TAG, "Translating")
val et : EditText = findViewById(R.id.toBeTranslated)
val tv : TextView = findViewById(R.id.translated)
Amplify.Predictions.translateText(
et.text.toString(),
LanguageType.ENGLISH,
LanguageType.FRENCH,
{ success -> tv.setText(success.translatedText) },
{ failure -> Log.e(TAG, failure.localizedMessage) }
)
}
简洁明了,不是吗?
价格和可用性
AWS Amplify 可免费使用,您只需要为您应用程序使用的后端服务付费(在免费套餐的用量用尽之后)。
Amplify iOS 和 Amplify Android 现已可用,可通过 CocoaPods 和 Maven Central 代码库获得。源代码可通过 GitHub 获得(包括 iOS 版和 Android 版源代码)。欢迎随时给我们发送反馈(文档、iOS 和 Android),也欢迎您提交 Pull 请求 :-)
我也很愿意了解,您使用 AWS Amplify 构建出了哪些优秀的移动应用程序。请不吝与我分享您的屏幕截图或 App Store 链接。
祝大家构建顺利!