2012年3月28日水曜日

BaaSサービスのParseを使ってみた(2) Parseで出来る事


前回のエントリ「BaaSサービスのParseを使ってみた」で紹介したBaaSサービスのParseですが、実際Parseを使うと具体的にどういう事が出来るのか、もう少し突っ込んで調べてみました。

ParseのAPI
ParseのAPIは大きく、
  1. iOS API
  2. Android API
  3. REST API
の3つがあり、iOS APIとAndroid APIは見ての通り、それぞれのモバイルデバイスからParseクラウドにアクセスする為のAPIです。

一方、REST APIはモバイルアプリに限らず、HTTP通信が可能なあらゆるものからParseクラウドのデータに対してアクセスが可能です。

つまりモバイルアプリでParseクラウドに蓄積したデータを、サマリ/表示するWebサイトの構築が可能になるので、ソーシャルなサービスも実現が可能になります。

REST APIを使った用途は、以下の様なケースを想定しているようです。

  1. WebサイトにParseクラウドのデータを表示。
  2. 大量のデータをParseクラウドにアップロードする。
  3. Parseクラウドのデータをダウンロードし、分析に利用。
  4. iOS/Android以外のアプリからもParseクラウドのデータを利用。
  5. 他のBaaSサービスに乗替えたい時に、データを全部エクスポート。

一応REST経由で全てのデータにアクセスが可能な様なので、クラウドに集めたデータを加工してWebサイトで表示する様な用途には対応しているみたいですね。

最後の全てのデータをエクスポートできるという点は、後々BaaSプロバイダを乗替える選択肢を手元に残せるので、こういった手段が用意されているのは安心ですね。
iOS APIで何が出来るか
iOS APIは以下の9つのAPIに分類されています。それぞれ機能の簡単な紹介とサンプルのコードを。
  1. データの保存
    PFObjectsというオブジェクトでKey-Value形式でデータを保存。ValueにはString、Number、Boolean、またはArray、DictionaryとJSONエンコードが出来るものは何でもクラウドに保存が可能。
    PFObject *gameScore = [PFObject objectWithClassName:@"GameScore"];
    [gameScore setObject:[NSNumber numberWithInt:1337] forKey:@"score"];
    [gameScore setObject:@"Sean Plott" forKey:@"playerName"];
    [gameScore setObject:[NSNumber numberWithBool:NO] forKey:@"cheatMode"];
    [gameScore save];
    
  2. データの抽出
    PFQueryというオブジェクトを使い、クラウドに保存したデータを抽出する。キャッシュ機構も備えており、オフライン状態でも自動で制御してくれるそう。 
    PFQuery *query = [PFQuery queryWithClassName:@"GameScore"];
    [query whereKey:@"playerName" equalTo:@"Dan Stemkoski"];
    NSArray* scoreArray = [query findObjects];
    
  3. ファイルの保存
    ドキュメント、画像、音源、ビデオ、バイナリファイルなど単体で10Mbを上限としてファイルを保存する事が出来る。 ファイルはPFFileというオブジェクトに変換し、PFObjectに格納する。ダウンロード/アップロードのプログレスの取得も可能。
    NSData *imageData = UIImagePNGRepresentation(image);
    PFFile *imageFile = [PFFile fileWithName:@"image.png" data:imageData];
    [imageFile save];
    
    PFObject *userPhoto = [PFObject objectWithClassName:@"UserPhoto"];
    [userPhoto setObject:@"My trip to Hawaii!" forKey:@"imageName"];
    [userPhoto setObject:imageFile             forKey:@"imageFile"];
    [userPhoto save];
  4. プッシュ通知
    iOSデバイスへのプッシュ通知。Parseの管理コンソールからプッシュ通知を手動で配信する事も可能。
  5. ユーザー管理
    PFObjectのサブクラスのPFUserを使ってユーザーの登録・管理が可能。サインイン、ログイン、パスワードリセットのI/Fを用意。他のPFObjectとの紐付けも容易に出来るよう。
    PFUser *user = [PFUser user];
    user.username = @"my name";
    user.password = @"my pass";
    user.email = @"email@example.com";
    
    // other fields can be set just like with PFObject
    [user setObject:@"415-392-0202" forKey:@"phone"];
    
    [user signUpInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
      if (!error) {
          // Hooray! Let them use the app now.
      } else {
          NSString *errorString = [[error userInfo] objectForKey:@"error"];
          // Show the errorString somewhere and let the user try again.
      }
    }];
  6. Facebook連携
    Parse SDKはFacebook SDKを内包しており、PFUserとFacebookアカウントのリンクが数行で出来てしまうとの事。
  7. Twitter連携
    Facebookと同様にTwitterとの連携もサポート。
  8. ジオデータの保存
    PFGeoPointというオブジェクトで位置情報の保存、抽出が可能。
    PFGeoPoint *point = [PFGeoPoint geoPointWithLatitude:40.0 longitude:-30.0];
    [placeObject setObject:point forKey:@"location"];
  9. ユーザーインターフェース
    今のところPFQueryTableViewControllerというUITableViewしか無いようですが、要するにParseクラウドのデータと直接連携するUITablewViewControllerです。ページネーション、プルでリフレッシュなど機能を備えています。

ちょっとボリュームが多いので、順次試しながら紹介していきたいと思います。