【AWS移动开发公开课】第二讲:用户状态(USER-STATE)数据同步

假设你有一个100个关卡的游戏,如果游戏要求你在换设备时需要重新闯关,相信对你来说这将是件很痛苦的事情。开发者可以通过使用Cognito同步所有设备上的关卡,实现可随时在任何设备上继续上次中断的功能,从而解决数据同步的问题。

创建身份池

第一步是创建身份池,所有用户的身份都在这个身份池里,每个终端用户都有自己的身份。通常,身份池跟某一个移动应用有关,但为了弥补不同应用间的数据同步问题,最好是只创建一个身份池而不是每个应用创建一个身份池。如果你还没有创建过身份池,请参见亚马逊官方资料:Amazon Cognito Console

为了能够跨设备同步数据,你的身份池必须支持身份验证。未经身份验证的身份是与设备绑定,也就是说如果用户身份未被验证,数据就不能跨设备同步。创建身份池一定要确定配置了一个或多个身份供应商,这个页面将引导你完成获取所需应用ID或客户ID的Amazon,Facebook或Google设置。

创建身份池时,它会要求你为终端用户创建一个新的或选一个已存在的IAMRole,这个Role定义了终端用户/应用获取临时证书时被授予的AWS服务和许可权限。默认策略允许访问Amazon Cognito同步服务并允许向Amazon Mobile Analytics发出事件,一般情况下至少需要能够访问AmazonCognito同步服务的策略。

在身份池创建过程结束时,你会在应用程序中收到一些样本代码,记得把它们保存下来,因为接下来将会用到。

同步数据

如果你没有提前准备,请先下载并安装AWS Mobile SDK。Android或iOS的安装说明见链接:http://docs.aws.amazon.com/mobile/sdkforios/developerguide/setup.html

安装并配置完开发环境后,你需要在应用中实例化Cognito证书供应商。直接将上面控制台中获取的样板代码放到你的应用程序中即可。代码如下:

Androidimport com.amazonaws.android.auth.CognitoCredentialsProvider;CognitoCredentialsProvider cognitoProvider = new CognitoCredentialsProvider(myActivity.getContext(), // get the context for the current activity"AWSACCOUNTID","region:identity-pool-id","arn:aws:iam::AWSACCOUNTID:role/UnauthRole",&nbsp;"arn:aws:iam::AWSACCOUNTID:role/AuthRole");iOS#import <AWSiOSSDKv2/AWSCore.h>AWSCognitoCredentialsProvider *credentialsProvider = [AWSCognitoCredentialsProvidercredentialsWithRegionType:AWSRegionUSEast1accountId:@"AWSACCOUNTID"identityPoolId:@"region:your-identity-pool-id"unauthRoleArn:@"arn:aws:iam::AWSACCOUNTID:role/UnauthRole",authRoleArn:@"arn:aws:iam::AWSACCOUNTID:role/AuthRole"];AWSServiceConfiguration *configuration = [AWSServiceConfigurationconfigurationWithRegion:AWSRegionUSEast1 credentialsProvider:credentialsProvider];[AWSServiceManager defaultServiceManager].defaultServiceConfiguration = configuration;下一步是提示用户随着身份供应商登陆并提供带有登陆token的Cognito证书供应商。这个过程根据身份供应商的不同而不同。

Android参考资料:

http://docs.aws.amazon.com/mobile/sdkforandroid/developerguide/cognito-auth.html

iOS参考资料:

http://docs.aws.amazon.com/mobile/sdkforios/developerguide/cognito-auth.html

Androidimport com.amazonaws.android.cognito.*;//COGNITO_POOL_ID is a constant set to your Cognito Pool Id//provider is the provider you just initializedCognitoSyncClient syncClient = new DefaultCognitoSyncClient(myActivity.getContext(),COGNITO_POOL_ID, cognitoProvider);iOS#import <AWSiOSSDKv2/AWSCore.h>#import <AWSCognitoSync/Cognito.h>AWSCognito *syncClient = [AWSCognito defaultCognito];使用同步客户端可以打开并操作一个数据集。

AndroidDataset dataset = client.openOrCreateDataset("GameInfo");//call this once when you open the dataset to get the latest data from the clouddataset.synchronize(this, syncCallback);dataset.put("playerName","David");dataset.put("currentLevel","29");dataset.put("highScore","120345");//now synchronize this data to make it available to other devicesdataset.synchronize(this, syncCallback); syncCallback对象需要实现SyncCallback接口,它会在同步成功、失败、冲突、或其他情况时被调用。详细的实现接口过程参见:https://docs.aws.amazon.com/mobile/sdkforandroid/developerguide/cognito-sync.htmliOSAWSCognitoDataset *dataset = [syncClient openOrCreateDataset:@"GameInfo"];//call this once when you open the dataset to get the latest data from the cloud[dataset synchronize];[dataset setString:@"David" forKey:@"playerName"];[dataset setString:@"29" forKey:@"currentLevel"];[dataset setString:@"120345" forKey:@"highScore"];//now synchronize this data to make it available to other devices至此,我们已经在数据集GameInfo中存入了三组key-value,如何从其他设备同步数据?这和访问其它设备上数据的过程是一样的,一旦打开程序集并完成同步,就可以获取一个特定的键值,比如:Android
String playerName = dataset.get("playerName");String currentLevel = dataset.put("currentLevel");String highScore = dataset.put("highScore");iOSNSString *playerName = [dataset stringForKey:@"playerName"];NSString *currentLevel = [dataset stringForKey:@"currentLevel"];NSString *highScore = [dataset stringForKey:@"highScore"];

因为Cognito将数据存储在本地及服务器端,因此你可以在离线状态下继续数据交互。离线数据可能会过期,但所有放入数据集中的数据,都可以在线上或线下状态下立即获取。

程序示例

下面的案例说明了如何同步Android和iOS数据,它们都是将数据同步到应用中很好的参考信息,还包括了两个没有在这篇文章中提到的主题——冲突解决方案和身份合并处理方法。

Android

Github Cognito Android Sample:

https://github.com/awslabs/aws-sdk-android-samples/tree/master/CognitoSyncDemo

iOS

Github Cognito iOS Sample:

https://github.com/awslabs/aws-sdk-ios-samples/tree/master/CognitoSyncDemo

局限性

使用同步功能时,以下几个限制因素值得注意一下:

1. 每个身份最多拥有20个数据集;

2. 每个数据集最多有1024组key-value;

3. 数据集中合并后的keys和values大小不能超过1MB;

总结

在Amazon Cognito中,跨移动设备间的数据同步变得很容易,有兴趣的同学可以尝试一下,在评论中发表你们的使用体验。

原文链接:https://medium.com/aws-activate-startup-blog/amazon-cognito-mobile-apps-part2-user-state-data-synchronization-581bdd97afc2

特别推荐:【AWS移动开发公开课】第一讲:用户身份及简单AWS身份验证http://www.csdn.net/article/2014-09-12/2821672

如您需要了解AWS最新资讯或是技术文档可访问AWS中文技术社区;如您有更多的疑问请在AWS技术论坛提出,稍后会有专家进行答疑。

订阅“AWS中文技术社区”微信公众号,实时掌握AWS技术及产品消息!

AWS中文技术社区为广大开发者提供了一个Amazon Web Service技术交流平台,推送AWS最新资讯、技术视频、技术文档、精彩技术博文等相关精彩内容,更有AWS社区专家与您直接沟通交流!快加入AWS中文技术社区,更快更好的了解AWS云计算技术。

(译者/应玲 责编/王玉平)

时间: 2024-08-28 11:54:12

【AWS移动开发公开课】第二讲:用户状态(USER-STATE)数据同步的相关文章

【AWS移动开发公开课】第一讲:用户身份及简单AWS身份验证

Amazon Cognito是一种用户状态(user-state)同步服务,可帮助开发者让他的终端用户在不同的设备和平台上创建唯一身份.Cognito也可为AWS资源设置临时性受限权限证书. 数据同步和AWS身份验证是所有应用程序的繁杂任务之一,通常耗费大量时间.你可以通过Cognito搞定这些,然后将更多的精力集中在提高用户体验上,为用户提供更好更快的应用程序. 通过 Amazon Cognito和移动Apps,你可以用Facebook, Google或Amazon等公共登陆供应商为用户创建唯

《ArcGIS Engine+C#实例开发教程》第二讲 菜单的添加及其实现

原文:<ArcGIS Engine+C#实例开发教程>第二讲 菜单的添加及其实现 摘要:在上一讲中,我们实现了应用程序基本框架,其中有个小错误,在此先跟大家说明下.在"属性"选项卡中,我们当时添加的是 DataGridView控件,这个控件是用来显示数据表的,而专门用于属性的查询和设置的控件是 PropertyGrid 控件.因此请你删除"属性"选项卡中的DataGridView 控件,再把位于"工具箱 | 所有 Windows 窗体 |Pro

斯坦福创业公开课第九讲:如何融资

斯坦福创业公开课How to Start a Startup第九讲今天推出,由硅谷顶级投资大佬,网景创始人 Marc Andreessen,著名天使投资人Ron Conway 和 Zenefits 创始人Parker Conrad联合分享,讨论创业的重量级话题-如何融资, 很多真知灼见.本次分享以问答的方式进行,YC掌门人Sam Altman带领大家提问,对于融资中创业者的常见疑惑一一作答,难能可贵的坦诚分享.本讲分享亮点如下:问题一:你如何决定是否投资一个创业团队/公司?答:- Ron: 我们

【阿里聚安全技术公开课】业务安全及防护(数据风控)

关于互联网业务安全 互联网账号泄露事件频发,脱库.洗库.撞库,形成了一条完善的黑灰产业链,盗刷信用卡."羊毛党"猖獗.刷单炒信等业务风险背后,如何去防范,阿里聚安全专家笙华为你支招. ​ ​ 讲师:笙华阿里聚安全产品专家 课程简介: 本课程主要介绍互联网常见业务风险,比如账号泄露.垃圾注册.刷库撞库.黑灰产业链等. 第1讲:互联网常见业务风险 课程地址:https://yq.aliyun.com/edu/lesson/play/646 第2讲:互联网常见业务风险防控建设 课程地址:ht

如何用云计算模式,实现生物信息分析 | 硬创公开课

雷锋网按:当基因检测变得越来越普及,所得数据越来越多,对数据解读的需求也由此诞生,而这就是生物信息技术的作用.本文整理自华点云技术总监于伟文在雷锋网硬创公开课上的演讲,主题为如何用云计算模式实现生物信息分析. 于伟文,高级工程师,上海华点云生物科技有限公司技术总监.是北京航空航天大学国家示范学科--"移动云计算"专业的首批毕业生.拥有十余年 IT 领域从业经验,主要关注于临床.生物.金融等领域.作为课题负责人,曾主持过国家"十一五" 重大专项子课题:参与多项国家自然

张小龙首次全面阐述小程序,宣布1月9日上线(附微信公开课演讲全文)

在今天的微信公开课广州PRO版上,"微信之父"张小龙宣布:希望小程序1月9日正式上线!同时,他解答了大家最关心的8个关于小程序的疑问: 1.小程序不用下载,没有入口,只有二维码: 2.小程序没有订阅,只有访问: 3.小程序没有商店,只有有限搜索: 4.小程序不会主动推荐,只有社交推荐: 5.没有PUSH,只有有限通知: 6.没有朋友圈分享,只能分享到聊天和群: 7.小程序并不能做戏: 8.小程序与公众号是什么关系?答案是没有关系!   以下为张小龙的演讲内容: 各位朋友,大家早上好!我

微信公开课走进石家庄

7月24日,由微信公开课与燕赵都市报联合主办的2014腾讯微信公开课第二季第二站,走进华北第三大城市--石家庄. "第二季案例公开征集后,已有众多企业报名参加,微信公开课也希望甄选一些各行各业的魅力小个体案例,为同业提供更适合的解决方案",微信讲师团代表叶娃现场表示,微信希望以公众平台为基点,搭建一个辐射全行业的"大网",让各行各业的每一个个体,都能在这个平台上获益,最终实现自己的大梦想. 衣食住行,让用户多个微信朋友 "让你的用户多一个朋友,而不是多一种

网易公开课: 移动端下载破千万 像看韩剧般上课

中介交易 SEO诊断 淘宝客 云主机 技术大厅 近日,网易公开课传来好消息:移动客户端下载量超过一千万. "随时随地上名校公开课"是网易公开课的重要使命,早在2011年网易公开课就发力移动端,逐步上线iPad版.iPhone版.Andriod手机版.Android平板和电视机顶盒等多个版本.经过数十次改版,在2013年网易公开课各客户端下载量实现了突破性的增长,超千万的成绩遥遥领先于其他同类产品. 春节假期,热的不止是韩剧 春节前夕,一部<来自星星的你>让韩剧收视再创巅峰,

新浪云计算公开课第4期:如何开发手机应用

随着移动互联网的到来,从移动电子商务到移动支付,从社交应用到位置信息服务等,成千上万的移动App为人们的日常生活提供着更便捷的服务.而苹果App Store在全球的成功也让诸多开发者看到了移动应用胜利的曙光和光辉的未来. Web设计开发人员也面临了新的机遇与挑战.如果需要同时为多平台设备进行客户端应用的开发.测试和维护,势必会消耗大量的资源与成本.那么如何在开发移动应用方面既降低成本,又能很快捷的上手开发.维护移动应用,是大家都比较关心的一个话题. 2012年5月12日,由SinaAppEngi