5分でわかったつもりになるParse.com
Upcoming SlideShare
Loading in...5
×
 

5分でわかったつもりになるParse.com

on

  • 19,305 views

 

Statistics

Views

Total Views
19,305
Views on SlideShare
11,036
Embed Views
8,269

Actions

Likes
55
Downloads
41
Comments
0

15 Embeds 8,269

http://tech.kayac.com 7911
http://feedly.com 257
https://twitter.com 37
http://reader.aol.com 16
http://www.feedspot.com 16
http://digg.com 10
http://www.google.co.jp 6
https://www.chatwork.com 6
https://www.google.co.jp 3
http://webcache.googleusercontent.com 2
http://cache.yahoofs.jp 1
http://www.newsblur.com 1
http://inoreader.com 1
http://yoleoreader.com 1
http://news.google.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

5分でわかったつもりになるParse.com 5分でわかったつもりになるParse.com Presentation Transcript

  • 5分でわかったつもりになるParse.comParse is the cloud app platform foriOS, Android, JavaScript, Windows 8,Windows Phone 8, and OS X.
  • Parse は BaaS ( Backend as a Service)モバイルアプリ開発のサーバサイド部分を肩代わりしてくれる1.ユーザ管理機能2.サーバサイド実装3.サードパーティとの連携
  • ユーザ管理機能
  • データのread/writeが簡単String, Number, Boolean, Date, File, GeoPoint,Array, Object, Pointer, Relation が保存できる// Saving ObjectPFObject *gameScore = [PFObject objectWithClassName:@"GameScore"];[gameScore setObject:[NSNumber numberWithInt:1337] forKey:@"score"];[gameScore setObject:@"Kenta TSUJI" forKey:@"playerName"];[gameScore setObject:[NSNumber numberWithBool:NO] forKey:@"cheatMode"];[gameScore saveInBackground];// QueryPFQuery *query = [PFQuery queryWithClassName:@"GameScore"];[query whereKey:@"playerName" equalTo:@"Kenta TSUJI"];[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {   if (!error) {     NSLog(@"Successfully retrieved %d scores.", objects.count);   } else {     NSLog(@"Error: %@ %@", error, [error userInfo]);  }}];
  • ブラウザからデータの確認ができる-データの追加、書き換えも可能データのread/writeが簡単objectId : 識別子cheatMode : 追加したカラムplayerName : 追加したカラムscore : 追加したカラムcreatedAt : オブジェクトの生成日時(GMT)updatedAt : オブジェクトの最終変更日時(GMT)ACL : アクセスコントロール
  • ユーザ登録・ログインが簡単// Signing upPFUser *user = [PFUser user];user.username = @"username"; // requireduser.password = @"password"; // requireduser.email = @"email@example.com"; // optional[user signUpInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {if (!error) {// success    }}];// Logging in[PFUser logInWithUsernameInBackground:@"username"password:@"password"  block:^(PFUser *user, NSError *error) {    if (user) {// Do stuff after successful login.    }}];
  • Facebook/twitter連携が簡単// Linkingif (![PFFacebookUtils isLinkedWithUser:user]) {    [PFFacebookUtils linkUser:userpermissions:nilblock:^(BOOL succeeded, NSError *error) {        if (succeeded) {            NSLog(@"Woohoo, user logged in with Facebook!");        }    }];}// Linkingif (![PFTwitterUtils isLinkedWithUser:user]) {    [PFTwitterUtils linkUser:userblock:^(BOOL succeeded, NSError *error) {        if ([PFTwitterUtils isLinkedWithUser:user]) {            NSLog(@"Woohoo, user logged in with Twitter!");        }    }];}
  • アクセスコントロール設定が簡単{"userId":{"read":true,"write":true}}すべてのオブジェクトに対して、user/roleごとにread/writeのアクセス権限が設定できる
  • メール認証が簡単UserテーブルのデフォルトカラムobjectId : 識別子username : ユーザ名(required)password : パスワード(required)authData : Facebook/twitterの認証情報emailVerified : メール認証フラグemail : メールアドレスcreatedAt : ユーザの生成日時(GMT)updatedAt : ユーザの最終変更日時(GMT)ACL : アクセスコントロール設定画面から Verifying user emails を ON にするだけ1.emailVerified が false のユーザはログインできない2.サインアップ時にメールが届く3.リンクをタップすると emailVerified が true になる
  • プッシュ通知が簡単// Find devices associated with these usersPFQuery *pushQuery = [PFInstallation query];[pushQuery whereKey:@"user" matchesQuery:userQuery]; // Send push notification to queryPFPush *push = [[PFPush alloc] init];[push setQuery:pushQuery]; // Set our Installation query[push setMessage:@"Free hotdogs at the Parse concession stand!"];[push sendPushInBackground];PFInstallation *installation = [PFInstallation currentInstallation];[installation setObject:[PFUser currentUser] forKey:@"owner"];[installation saveInBackground];
  • サーバサイド実装
  • サーバサイドの関数実行が簡単Parse.Cloud.define("averageStars", function(request, response) {   var query = new Parse.Query("Review");   query.equalTo("movie", request.params.movie);   query.find({     success: function(results) {       var sum = 0;       for (var i = 0; i < results.length; ++i) {         sum += results[i].get("stars");       }       response.success(sum / results.length);     },     error: function() {       response.error("movie lookup failed");     }   });});timeout は 15 seconds
  • サーバサイドの関数実行が簡単// iOS[PFCloud callFunctionInBackground:@"averageStars"                   withParameters:@{@"movie": @"The Matrix"}                            block:^(NSNumber *ratings, NSError *error) {   if (!error) {NSLog(@"%@", ratings);  }}];// AndroidHashMap<String, Object> params = new HashMap<String, Object>();params.put("movie", "The Matrix");ParseCloud.callFunctionInBackground("averageStars", params, new FunctionCallback<Float>() {    void done(Float ratings, ParseException e) {        if (e == null) {         Log.d(ratings);        }    }});
  • データ書き込み前後のトリガー実装が簡単Parse.Cloud.beforeSave("Review", function(request, response) {if (request.object.get("stars") < 1 || request.object.get("stars") > 5) {     response.error(); // 書き込み処理が実行されない   }   var comment = request.object.get("comment");   if (comment.length > 140) {     request.object.set("comment", comment.substring(0, 137) + "...");  }   response.success(); });timeout は 3 seconds
  • データ書き込み前後のトリガー実装が簡単Parse.Cloud.afterSave("Comment", function(request) {   query = new Parse.Query("Post");   query.get(request.object.get("post").id, {     success: function(post) {       post.increment("comments");      post.save();     },    error: function(error) {       throw "Got an error " + error.code + " : " + error.message;    }   });});timeout は 3 secondsタイムアウトするとデータの不整合が起こる可能性があるので afterSave は極力使わない方がいい
  • サードパーティとの連携
  • Parse + Twilioが簡単var Twilio = require(twilio);Twilio.initialize(myAccountSid, myAuthToken); //twilio.comで取得Twilio.sendSMS({   From: "+14155551212",   To: "+14155552121",   Body: "Hello from Cloud Code!"}, {  success: function(httpResponse) {     response.success("SMS sent!");   },   error: function(httpResponse) {     response.error("Uh oh, something went wrong");   }});Twilioとは、WebAPIを通して通話やSMS送信が可能なクラウド電話APIサービス
  • Parse + Mailgunが簡単Mailgunとは、メール送信APIサービスvar Mailgun = require(mailgun);Mailgun.initialize(myDomainName, myAPIKey); //mailgun.comで取得Mailgun.sendEmail({   to: "email@example.com",   from: "Mailgun@CloudCode.com",   subject: "Hello from Cloud Code!",   text: "Using Parse and Mailgun is great!"}, {  success: function(httpResponse) {    console.log(httpResponse);     response.success("Email sent!");   },   error: function(httpResponse) {     console.error(httpResponse);     response.error("Uh oh, something went wrong");   }});
  • + CrowdFlower Real Time Foto Moderator- 画像ソリューション(ランキング、カテゴライズ、コンテンツ監視、など)- https://crowdflower.com+ Moment- 日付処理のJSライブラリ- http://momentjs.com+ Stripe- モバイルクレカ決済API- https://stripe.com+ Underscore- ユーティリティライブラリ- http://underscorejs.org
  • 基本無料