Your SlideShare is downloading. ×
0
Parse introduction
Parse introduction
Parse introduction
Parse introduction
Parse introduction
Parse introduction
Parse introduction
Parse introduction
Parse introduction
Parse introduction
Parse introduction
Parse introduction
Parse introduction
Parse introduction
Parse introduction
Parse introduction
Parse introduction
Parse introduction
Parse introduction
Parse introduction
Parse introduction
Parse introduction
Parse introduction
Parse introduction
Parse introduction
Parse introduction
Parse introduction
Parse introduction
Parse introduction
Parse introduction
Parse introduction
Parse introduction
Parse introduction
Parse introduction
Parse introduction
Parse introduction
Parse introduction
Parse introduction
Parse introduction
Parse introduction
Parse introduction
Parse introduction
Parse introduction
Parse introduction
Parse introduction
Parse introduction
Parse introduction
Parse introduction
Parse introduction
Parse introduction
Parse introduction
Parse introduction
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Parse introduction

6,461

Published on

Published in: Technology
0 Comments
20 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
6,461
On Slideshare
0
From Embeds
0
Number of Embeds
9
Actions
Shares
0
Downloads
57
Comments
0
Likes
20
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. 初めての Parse 株式会社 ミクシィ 田村 航弥12年7月23日月曜日
  • 2. agenda • @tamotamago • what’s Parse? • Data Store • Query • Push Notification12年7月23日月曜日
  • 3. @tamotamago について12年7月23日月曜日
  • 4. @tamotamago について • 田村 航弥 • 東京 2 年目 iOS App developer • mixi for iPhone, iPad 開発 • http://alpha.mixi.co.jp/2012/10974/ • tamotamago.com12年7月23日月曜日
  • 5. @tamotamago について • 第2回 iphone_dev_jp 東京iPhone/Mac勉強会 @k_kinukawa mixi の iOS アプリ開発 http://alpha.mixi.co.jp/2012/11000/12年7月23日月曜日
  • 6. What’s Parse?12年7月23日月曜日
  • 7. What’s Parse • Parse は BaaS (Backend as a Service)12年7月23日月曜日
  • 8. What’s Parse • Parse の機能 • ユーザ認証機能 • データストア、検索 • remote notification • twitter, facebok SDK をラップ • and so on ...12年7月23日月曜日
  • 9. 12年7月23日月曜日
  • 10. Parse の導入 • Parse Quick Start • tamotamago.com [Objective-C][Parse]初めての Parse ー導入編ー12年7月23日月曜日
  • 11. Data Store https://parse.com/docs/ios/api/Classes/PFObject.html12年7月23日月曜日
  • 12. Data Store • Key Value Store • ブラウザからデータ閲覧、編集が可能 • リレーションも持たせることができる12年7月23日月曜日
  • 13. Data Store12年7月23日月曜日
  • 14. Data Store テーブル名みたいなもの かってにつくられる 自分でつくっていく12年7月23日月曜日
  • 15. Save -blocks- PFObject *object = [[PFObject alloc]initWithClassName:@"TestClass"]; [object setObject:@"tamotamago" forKey:@"name"]; [object saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) { NSString *result = succeeded ? @"success" : @"error"; NSLog(@"result : %@", result); }];12年7月23日月曜日
  • 16. Save -callbacks- - (void)viewDidLoad { [super viewDidLoad]; ! // Do any additional setup after loading the view, typically from a nib. PFObject *object = [[PFObject alloc]initWithClassName:@"TestClass"]; [object setObject:@"tamotamago2" forKey:@"name"]; [object saveInBackgroundWithTarget:self selector:@selector(saveCallback:error:)]; } -(void)saveCallback:(NSNumber*)result error:(NSError*)error { if(!error){ NSLog(@"%@", result); }else{ NSLog(@"%@", error); } }12年7月23日月曜日
  • 17. Update PFObject *object = [[PFObject alloc]initWithClassName:@"TestClass"]; [object setObject:@"tamotamago3" forKey:@"name"]; [object saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) { [object setObject:@"tamotamago4" forKey:@"name"]; [object save]; }]; PFObject が 1 タプル12年7月23日月曜日
  • 18. Array Data PFObject *object = [[PFObject alloc]initWithClassName:@"TestClass"]; NSArray *names = [NSArray arrayWithObjects:@"tamotamago5", @"tamotamago6", nil]; [object addUniqueObjectsFromArray:names forKey:@"names"]; [object save];12年7月23日月曜日
  • 19. Relation -one-to-many- Post parent Comment Comment Comment12年7月23日月曜日
  • 20. Relation -one-to-many- PFObject *myPost = [PFObject objectWithClassName:@"Post"]; [myPost setObject:@"Im Hungry" forKey:@"title"]; [myPost setObject:@"Where should we go for lunch?" forKey:@"content"]; // Create the comment PFObject *myComment = [PFObject objectWithClassName:@"Comment"]; [myComment setObject:@"Lets do Sushirrito." forKey:@"content"]; // Add a relation between the Post and Comment [myComment setObject:myPost forKey:@"parent"]; // This will save both myPost and myComment [myComment saveInBackground];12年7月23日月曜日
  • 21. Relation -one-to-many- PFObject *myPost = [PFObject objectWithClassName:@"Post"]; [myPost setObject:@"Im Hungry" forKey:@"title"]; [myPost setObject:@"Where should we go for lunch?" forKey:@"content"]; // Create the comment PFObject *myComment = [PFObject objectWithClassName:@"Comment"]; [myComment setObject:@"Lets do Sushirrito." forKey:@"content"]; // Add a relation between the Post and Comment [myComment setObject:myPost forKey:@"parent"]; // This will save both myPost and myComment [myComment saveInBackground];12年7月23日月曜日
  • 22. Relation -many-to-many- Post Post Post like user user user12年7月23日月曜日
  • 23. Relation -many-to-many- Parse blog : A More Scalable Many-to-Many Approach PFObject *post2 = [PFObject objectWithClassName:@"Post"]; [post2 setObject:@"Im Hungry" forKey:@"title"]; [post2 setObject:@"Where should we go for dinner?" forKey:@"content"]; PFRelation *relation = [post2 relationforKey:@"likes"]; for (PFObject *object in objects){ [relation addObject: object]; } [post2 save];12年7月23日月曜日
  • 24. Relation -many-to-many- Parse blog : A More Scalable Many-to-Many Approach PFObject *post2 = [PFObject objectWithClassName:@"Post"]; [post2 setObject:@"Im Hungry" forKey:@"title"]; [post2 setObject:@"Where should we go for dinner?" forKey:@"content"]; PFRelation *relation = [post2 relationforKey:@"likes"]; for (PFObject *object in objects){ [relation addObject: object]; } [post2 save];12年7月23日月曜日
  • 25. Relation -many-to-many- Parse blog : A More Scalable Many-to-Many Approach PFObject *post2 = [PFObject objectWithClassName:@"Post"]; [post2 setObject:@"Im Hungry" forKey:@"title"]; [post2 setObject:@"Where should we go for dinner?" forKey:@"content"]; PFRelation *relation = [post2 relationforKey:@"likes"]; for (PFObject *object in objects){ [relation addObject: object]; } [post2 save];12年7月23日月曜日
  • 26. Queries https://parse.com/docs/ios/api/Classes/PFQuery.html12年7月23日月曜日
  • 27. Basic Query12年7月23日月曜日
  • 28. Basic Query PFQuery *query = [PFQuery queryWithClassName:@"TestClass"]; [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { if (!error) { // The find succeeded. for (PFObject *object in objects){ NSLog(@"object name -> %@", [object objectForKey:@"name"]); } } else { // Log details of the failure NSLog(@"Error: %@ %@", error, [error userInfo]); } }]; 2012-07-20 13:14:29.786 ParseTest[948:f803] object name -> tamotamago 2012-07-20 13:14:29.787 ParseTest[948:f803] object name -> tamotamago2 2012-07-20 13:14:29.787 ParseTest[948:f803] object name -> tamotamago4 2012-07-20 13:14:29.788 ParseTest[948:f803] object name -> (null) 2012-07-20 13:14:29.788 ParseTest[948:f803] object name -> tamotamago712年7月23日月曜日
  • 29. Basic Query PFQuery *query = [PFQuery queryWithClassName:@"TestClass"]; [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { if (!error) { // The find succeeded. for (PFObject *object in objects){ NSLog(@"object name -> %@", [object objectForKey:@"name"]); } } else { // Log details of the failure NSLog(@"Error: %@ %@", error, [error userInfo]); } }]; 2012-07-20 13:14:29.786 ParseTest[948:f803] object name -> tamotamago 2012-07-20 13:14:29.787 ParseTest[948:f803] object name -> tamotamago2 2012-07-20 13:14:29.787 ParseTest[948:f803] object name -> tamotamago4 2012-07-20 13:14:29.788 ParseTest[948:f803] object name -> (null) 2012-07-20 13:14:29.788 ParseTest[948:f803] object name -> tamotamago712年7月23日月曜日
  • 30. Where 句 [query whereKey:@"name" equalTo:@"tamotamago"];12年7月23日月曜日
  • 31. OrderBy [query orderByAscending:@"name"];12年7月23日月曜日
  • 32. IN 句 NSArray *array = [NSArray arrayWithObjects: @"tamotamago", @"tamotamago2", nil]; [query whereKey:@"name" containedIn:array];12年7月23日月曜日
  • 33. Relation query12年7月23日月曜日
  • 34. Relation query PFQuery *query = [[PFQuery alloc] initWithClassName:@"Post"]; [query findObjectsInBackgroundWithBlock:^(NSArray *posts, NSError *error) { for (PFObject *post in posts){ PFRelation *relation = [post relationforKey:@"likes"]; PFQuery *relationQuery = [relation query]; [relationQuery findObjectsInBackgroundWithBlock:^(NSArray *tamotamagos, NSError *error) { for(PFObject *object in tamotamagos){ NSLog(@"%@", [object objectForKey:@"name"]); } }]; } }];12年7月23日月曜日
  • 35. Paging query.skip = 3; [query findObjects]; [query findObjects]; object name -> tamotamago object name -> tamotamago2 object name -> (null) object name -> tamotamago4 object name -> tamotamago7 object name -> (null) object name -> tamotamago712年7月23日月曜日
  • 36. Push Notification https://parse.com/docs/ios/api/Classes/PFPush.html12年7月23日月曜日
  • 37. Setup https://www.parse.com/tutorials/ios-push-notifications 証明書の発行とか12年7月23日月曜日
  • 38. Setup12年7月23日月曜日
  • 39. Setup - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions { // Override point for customization after application launch. [Parse setApplicationId:@"app id" clientKey:@"client key"]; [application registerForRemoteNotificationTypes:UIRemoteNotificationTypeBadge| UIRemoteNotificationTypeAlert| UIRemoteNotificationTypeSound]; return YES; } - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)newDeviceToken { // Tell Parse about the device token. [PFPush storeDeviceToken:newDeviceToken]; // Subscribe to the global broadcast channel. [PFPush subscribeToChannelInBackground:@""]; }12年7月23日月曜日
  • 40. 12年7月23日月曜日
  • 41. channel Push を投げるゾーン12年7月23日月曜日
  • 42. channel - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)newDeviceToken { // Tell Parse about the device token. [PFPush storeDeviceToken:newDeviceToken]; // Subscribe to the global broadcast channel. [PFPush subscribeToChannelInBackground:@""]; [PFPush subscribeToChannelInBackground:@"tamotamago"]; }12年7月23日月曜日
  • 43. channel tamotamago Broadcast12年7月23日月曜日
  • 44. channel12年7月23日月曜日
  • 45. channel tamotamago3 tamotamago2 tamotamago Broadcast12年7月23日月曜日
  • 46. send notification PFPush *push = [[PFPush alloc] init]; NSArray *channels = [NSArray arrayWithObjects:@"tamotamago", nil]; [push setChannels:channels]; [push setMessage:@"push test"]; [push sendPushInBackgroundWithBlock:^(BOOL succeeded, NSError *error) { }];12年7月23日月曜日
  • 47. channel push!! tamotamago3 tamotamago2 tamotamago Broadcast12年7月23日月曜日
  • 48. おわりに12年7月23日月曜日
  • 49. Others • Users • https://parse.com/docs/ios/api/Classes/PFUser.html • Geo Points • https://parse.com/docs/ios/api/Classes/PFGeoPoint.html • Facebook Users • https://parse.com/docs/ios/api/Classes/PFFacebookUtils.html • and so on ...12年7月23日月曜日
  • 50. でもお高いんでしょう?12年7月23日月曜日
  • 51. 12年7月23日月曜日
  • 52. enjoy12年7月23日月曜日

×