Mais conteúdo relacionado Semelhante a Parse introduction (12) Parse introduction2. agenda
• @tamotamago
• what’s Parse?
• Data Store
• Query
• Push Notification
12年7月23日月曜日
4. @tamotamago について
• 田村 航弥
• 東京 2 年目 iOS App developer
• mixi for iPhone, iPad 開発
• http://alpha.mixi.co.jp/2012/10974/
• tamotamago.com
12年7月23日月曜日
5. @tamotamago について
• 第2回 iphone_dev_jp 東京iPhone/Mac勉強会
@k_kinukawa
mixi の iOS アプリ開発
http://alpha.mixi.co.jp/2012/11000/
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日月曜日
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.html
12年7月23日月曜日
12. Data Store
• Key Value Store
• ブラウザからデータ閲覧、編集が可能
• リレーションも持たせることができる
12年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日月曜日
20. Relation -one-to-many-
PFObject *myPost = [PFObject objectWithClassName:@"Post"];
[myPost setObject:@"I'm Hungry" forKey:@"title"];
[myPost setObject:@"Where should we go for lunch?" forKey:@"content"];
// Create the comment
PFObject *myComment = [PFObject objectWithClassName:@"Comment"];
[myComment setObject:@"Let's 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:@"I'm Hungry" forKey:@"title"];
[myPost setObject:@"Where should we go for lunch?" forKey:@"content"];
// Create the comment
PFObject *myComment = [PFObject objectWithClassName:@"Comment"];
[myComment setObject:@"Let's 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日月曜日
23. Relation -many-to-many-
Parse blog : A More Scalable Many-to-Many Approach
PFObject *post2 = [PFObject objectWithClassName:@"Post"];
[post2 setObject:@"I'm 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:@"I'm 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:@"I'm 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.html
12年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 -> tamotamago7
12年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 -> tamotamago7
12年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日月曜日
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 -> tamotamago7
12年7月23日月曜日
36. Push Notification
https://parse.com/docs/ios/api/Classes/PFPush.html
12年7月23日月曜日
37. Setup
https://www.parse.com/tutorials/ios-push-notifications
証明書の発行とか
12年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日月曜日
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
Broadcast
12年7月23日月曜日
45. channel
tamotamago3
tamotamago2 tamotamago
Broadcast
12年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
Broadcast
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日月曜日