Integration with Parse(IOS)
1.为什么选择Parse?
优点是目前Parse国内国外都可以使用, 开发者不需要做国内国外两个版本,Parse的API设计规范,文档清晰,易集成,价格比较优惠;缺点就是服务响应速度较慢,有时服务无响应(开发时遇到过几次),由于是国外服务,有被国内禁用的风险.
国内也有类似数据存储云服务,例如Bmob和leanCloud,他们的优势在于国内服务响应速度快.不过还是推荐使用Parse集成,即使对Parse服务稳定性的有所顾虑,切换成国内服务也会很快.
2.parse的集成
PFObject:
这是Parse提供最基础的数据存储,每个PFObject包含JSON-compatible数据的键-值对.objectId是唯一标识每个PFObject,objectId的生成有Parse控制.PFObject不支持自定义unique key.
PFObject保存数据
PFObject *user = [PFObject objectWithClassName:@"user"]; user[@"username"] = @"test001"; user[@"nickname"] = @"泰斯特"; [user saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) { if (succeeded) { // The object has been saved. } else { // There was a problem, check error.description } }];
PFObject查询数据
PFQuery *query = [PFQuery queryWithClassName:@"user"]; [query getObjectInBackgroundWithId:@"xWMyZ4YEGZ" block:^(PFObject *user, NSError *error) { // Do something with the returned PFObject in the user variable. NSLog(@"%@", user); }];
PFObject修改数据
PFQuery *query = [PFQuery queryWithClassName:@"user"]; // Retrieve the object by id [query getObjectInBackgroundWithId:@"xWMyZ4YEGZ" block:^(PFObject *user, NSError *error) { // Now let's update it with some new data. In this case, only cheatMode and score // will get sent to the cloud. playerName hasn't changed. user[@"nickname"] = @"泰斯特1"; user[@"username"] = @"test0002"; [user saveInBackground]; }];
PFObject数据删除
[user deleteInBackground];
作为简单的数据存储,PFObject满足绝大部分需求,同时PFObject支持权限管理,可以设置read/write权限(前提是需要有PFUser,PFRole).但是PFObject不支持自定义unique key,如果想保证某条数据的唯一性需要程序自身控制.
PFUser:
Parse提供了PFUser对象,除了objectId,username也可以唯一标识PFUser.保证了每一个用户只有一行数据.PFUser是PFObject的子类,继承了PFObject所有特性,但是PFUser需要有注册,登录,登出操作.
PFUser注册
PFUser *user = [PFUser user]; user.username = @"my name"; user.password = @"my pass"; user.email = @"email@example.com"; [user signUpInBackgroundWithBlock:^(BOOL succeeded, NSError *error) { if (!error) { // Hooray! Let them use the app now. } else { NSString *errorString = [error userInfo][@"error"]; // Show the errorString somewhere and let the user try again. } }];
PFUser登录
[PFUser logInWithUsernameInBackground:@"myname" password:@"mypass" block:^(PFUser *user, NSError *error) { if (user) { // Do stuff after successful login. } else { // The login failed. Check error to see why. } }];
PFUser登出
[PFUser logOut];
PFUser帮我们提供了整个用户的解决方案,注册登录登出,用户信息的存储.
登录之后,保存的PFObject的读写权限与当前用户关联.例如,用户的照片,日志,状态可以用PFObject存储,设置为Public Read/登录用户write权限,其它用户可查看,只有发布者可以编辑修改.
3.小结
Parse提供了丰富的API,除了上述介绍的PFObject和PFUser,例如PFQuery(查询),PFACL(权限设置),PFFile(文件存储)等本文不多介绍.如果不考虑国外环境,可以选择一些国内的云服务存储,如Bmob,LeanCloud,而且API与Parse基本一致,很快能够从Parse切换到国内这些云存储服务.