[iPhone/iPad] Dropbox API を使ってみた
iPhone/iPad アプリに Dropbox からファイルの読み込みがしたくて、Dropbox API を使ってみました。SDK が用意されていてそれを使えば簡単にアプリに組み込むことが可能です。
アプリの登録
Dropbox に自分が作成するアプリを登録して API Key などを取得します。まず下記 URL よりアプリを登録します。
https://www.dropbox.com/developers/apps
登録が終わると登録したアプリ一覧の右に Options というリンクがあり、そこから開いたページの一番下の App keys というところに “Key” と “Secret” があります。これはあとで SDK の組み込みで使用します。
SDK の準備
Dropbox API は REST でリクエストを出しても使えます。しかし iOS 用の SDK が用意されているのでこれを使えば簡単に組み込めます。認証も OAuth ですが、そんなこともまったく気にせずにサクサク使えるので余程のことがない限りは SDK を使うことをオススメします。
SDK は下記 URL よりダウンロードできます。
https://www.dropbox.com/developers/releases
SDK を使う
SDK をダウンロードして解凍すると中にサンプルプロジェクトが入っています。簡単な使い方はこれを参考にすると分かりやすいと思います。SDK をプロジェクトに組み込むには DropboxSDK というフォルダごと自分のプロジェクトに入れます。
Dropbox SDK は Security.framework が必要なのでプロジェクトに追加しておきます。
SDK を使う
AppDelegate の application:didFinishLaunchingWithOptions: メソッドに以下を追加します。アプリを登録した際に発行された Key と Secret をここで使います。DropboxSDK.h を import するのをお忘れなく。
DBSession* dbSession = [[[DBSession alloc] initWithConsumerKey:@"YOUR CONSUMER KEY" consumerSecret:@"YOUR CONSUMER SECRET"] autorelease]; [DBSession setSharedSession:dbSession];
で、適当なボタンを作って、押すと以下のメソッドを実行するようにします。
- (IBAction) tapDropbox:(id)sender { DBLoginController* controller = [[DBLoginController new] autorelease]; controller.delegate = self; [controller presentFromController:self]; } - (void)loginControllerDidLogin:(DBLoginController*)controller { // ログイン成功 } - (void)loginControllerDidCancel:(DBLoginController*)controller { // ログイン失敗 }
ビルド&実行してボタンをタップすると下図のように Dropbox のログイン画面が表示されます。
これで Dropbox にログインすることができます。ログイン成功、失敗はデリゲートメソッドがそれぞれ呼ばれます。ただし、この段階でログインできるアカウントはアプリを登録したユーザアカウントだけです。
ログイン後に一覧を表示する
OAuth で認証後は次の起動後は再度ログインする必要がありませんが、上記の方法ではログイン画面がそのたびに表示されてしまいます。そこで以下のように修正することにより、一度ログインすると次からはログイン画面をスキップできます。
- (IBAction) tapDropbox:(id)sender { if ([[DBSession sharedSession] isLinked]) { [self loginControllerDidLogin:nil]; } else { DBLoginController* controller = [[DBLoginController new] autorelease]; controller.delegate = self; [controller presentFromController:self]; } }
そしてログイン後に Dropbox 内のファイル一覧を取得する方法です。
まず、DBRestClient をインスタンス変数として登録しておきます。
DBRestClient* restClient;
次に restClient の getter メソッドを作成します。
- (DBRestClient*)restClient { if (!restClient) { restClient = [[DBRestClient alloc] initWithSession:[DBSession sharedSession]]; restClient.delegate = self; } return restClient; }
そして、ログイン後に以下のようにして一覧を取得したいパスを指定すれば DBMetadata というクラスで一覧が取得できます。
- (void)loginControllerDidLogin:(DBLoginController*)controller { [[self restClient] loadMetadata:@"/"]; }
次にDBRestClient のデリゲートメソッドを作成します。これで上記で指定したパスから読み込みが終わると restClient:loadedMetadata: メソッドが呼ばれます。
- (void)restClient:(DBRestClient*)client loadedMetadata:(DBMetadata*)metadata { // ロード完了 for (DBMetadata* child in metadata.contents) { NSLog(@"%@", child.path); if (child.isDirectory) NSLog(@"directory"); } } - (void)restClient:(DBRestClient*)client loadMetadataFailedWithError:(NSError*)error { // エラー発生 NSLog(@"Error loading metadata: %@", error); }
ファイルの書き込み
Dropbox にファイルを書き込むこともできます。
“hoge” というファイル名でルートディレクトリに (NSString*)filePath にあるファイルを書き込む場合は次のようになります。
[[self restClient] uploadFile:@"hoge" toPath:@"/" fromPath:filePath];
ディレクトリの作成
“foo” というディレクトリをルートディレクトリに作成する場合は以下のようになります。
[[self restClient] createFolder:@"/foo"];
注意事項
途中でも書いたように初期の状態ではアプリを登録したアカウントでしかログインはできません。どうすればだれでもログインできるようになるかというとアプリのステータスを “Production” にしないといけません。Production にするには Dropbox の審査を通さなければいけません。しかし、Dropbox の審査を通すにはアプリをアップルの審査に通すか、AdHoc で送るかしなければいけない。どうすればいいのだろうと困ったのですが、Dropbox の審査に iPhone アプリなのでアップルの審査後でないと審査してもらえない。だから Production にしてほしいんだけどとメールしたら、翌日には “Production にしたよ。でもアップルの審査通ってリリースされたら教えてね、こっちでも審査するから” っていうようなメールがきました。
ですので、アップルの審査を通す前に Production ステータスにしてもらい、テストアカウントを用意してアップルの審査に出してください。
実はこれをしなくて一回リジェクトされましたw
関連する投稿
8 comments
コメントをどうぞ
Additional comments powered by BackType
[...] 2010年11月11日11:21カテゴリニュースApple、日本のiTunes Storeで映画の提供を開始【湯川】湯川鶴章(tsuruaki)ShareTweet[読了時間:1分] Appleが日本のiTunes Storeで映画の提供を開始した。また新型Apple TVも8800円で発売した。 日本でもiPhoneやiPad、iPod touch、Mac、Windows PCで、Apple T… [iPhone/iPad] Dropbox API を使ってみた | Sun Limited Mt. [...]
解説ありがとうございます!DropBoxAPIの使い方、とてもわかりやすかったです!ありがとうございます!
[...] 詳細はこちらを参考に。 http://blog.syuhari.jp/archives/2284 [...]
すみませんが、このアプリを制作したサンプルはないのですか?
是非、参考にさせていただきた、より詳しく知りたいため、サンプルをいただければ幸いです。
お願いします。
I appreciate you discussing this site article.Much thanks. Want more.
こんにちは。
このサイトで勉強を行い、アプリを開発を行おうとしているのですが、バージョンの違いのせいか、所々上手くいきません。
申し訳ないのですが、最新のバージョンでの解説をお願いできないでしょうか。
よろしくお願いします。
上記でbyron hasegawaさんがおっしゃっているのですが、私も是非サンプルを頂きたいのですが、可能でしょうか。
よろしくお願いします。
1superintendent…
…