この文書ではiOS用のDropboxSDKを用いるにあたって気付いた注意点をいくつか述べます。もちろん、公式のドキュメントも参照してください。なお、DropboxSDKを利用可能な状態にするためには、以前のドキュメントを参照してください。
基本的な処理の流れ
SDKのソースやサンプルアプリケーションDBRouletteのソースを見ればだいたいわかると思いますが、次のようになっています。DBRestClientにはdelegateを設定しておく必要があります。
- DBRestClientのメソッドを呼ぶ (
loadFile:intoPath:
など) - DBRestClientがファイルを取得し、delegateにメッセージを送信 (
restClient:loadedFile:contentType:
など) - delegateが送信された内容に基づいて処理
restClient:loadFileFailedWithError:
など)が送信されることがあります。
注意点や効率化について
DropboxSDKの使用時の注意点や効率化についていくつか述べます。効率化については、簡単に言えばDropboxのサーバへの問い合わせを少なくすべきであるということになります。
- Dropboxファイルシステムは大文字小文字を区別しないことに注意
- 起動時にファイルツリーを走査しない。ディレクトリを開いたときにそこだけ見るようにする
- なんでも勝手にダウンロードしない (ダウンロードするときはユーザに聞くこと)
- ハッシュを利用する (詳しくは後述)
- サムネイルのサイズはsmall (32x32), medium (64x64), large (128x128)以外にもiphone_bestfitがある
ハッシュについて (概要)
Dropboxではディレクトリごとにハッシュ値を持っており、ユーザがディレクトリ内にファイルを追加したり、ディレクトリ内のファイルの内容を変更した場合に、この値が変更します。逆に言えば、ハッシュ値が変更されていない場合にはそのディレクトリ内にあるファイルの内容には変化がないことが保証されます (もちろんハッシュ値ベースなので完全な保証ではありませんが)。
ハッシュ値の取得方法については、loadMetadata:
でディレクトリを指定すると、restClient:loadedMetadata:
で返されるDBMetadataのhashという変数に格納されます。このとき、次の点に注意してください。
- ハッシュ値が取得できるのは
loadMetadata:
でディレクトリを指定したときのみ - ハッシュ値が取得できるのは指定したディレクトリのみで、contents内のファイルのハッシュ値は
nil
のまま - ハッシュ値は子ファイルを変更や追加や削除などをしたときのみのようです (子ディレクトリ内の変更は見ない)
ハッシュの利用 (1)
メタデータをキャッシュしてアクセス効率をよくします。
そのためには、メタデータを取得するときにloadMetdata:withHash:
を利用してハッシュ値を指定します。これによって、指定したハッシュ値から変化がない場合には、restClient:loadedMetadata:
ではなくrestClient:metadataUnchangedAtPath:
が返されるようになります。
そこで、次のようにするとよいでしょう。
restClient:loadedMetadata:
が呼ばれたときはハッシュ値とメタデータをキャッシュしておくrestClient:metadataUnchangedAtPath:
が呼ばれたときはキャッシュしておいたメタデータを復元
キャッシュするにはNSMutableDictionaryなどを利用するとよいでしょうし、DBMetadataはNSCoding準拠なのでファイルに保存して復元するのも簡単にできます。
実際にはメタデータはJSON形式の単一のストリームで返されており、DropboxSDKがそれをDBMetadataオブジェクトに変換しています。そのため、ディレクトリ内に大量のファイルがあるときには毎回loadMetdata:
を呼び出すよりも効率がよくなるでしょう。
ハッシュの利用 (2)
2010/10/16 追記 ファイルの更新については次の記事のようにrevisionでのチェックにしたほうがよいでしょう。
loadFile:intoPath:
などでダウンロードしたファイルはキャッシュしておき、親ディレクトリのハッシュ値が変わったら破棄するようにします。こちらは手順が多少複雑になります。
loadMetdata:withHash:
を呼ぶrestClient:loadedMetadata:
が呼ばれたとき (ファイルが変更された可能性があるので)loadFile:intoPath:
でファイルを取得 (してキャッシュしておく)restClient:metadataUnchangedAtPath:
が呼ばれたときはキャッシュしておいたファイルを利用
まとめ
DropboxSDKの使用時の注意点やハッシュの利用について述べました。
おまけ: icon一覧
DBMetadataのiconで返される値とその拡張子 (やフォルダ) の一覧です。全てであるとは限りません。
iconの文字列 | パスもしくは拡張子 |
---|---|
folder | 下記以外のフォルダ |
folder_star | /GoodReader |
folder_photos | /Photos |
folder_public | /Public |
page_white | 下記以外の拡張子 |
page_white_c | c |
page_white_code | htm, html |
page_white_php | php |
page_white_acrobat | |
page_white_powerpoint | ppt, pptx |
page_white_excel | xls, xlsx |
page_white_gear | exe |
page_white_text | txt, rtf |
page_white_compressed | zip, bz2 |
page_white_picture | png, jpg, gif, tiff |
page_white_sound | aiff, m4a, mp3, wav |
page_white_film | m4v, mov, mp4 |
page_white_word | doc, dock |
page_white | numbers, pages, key |
おまけ: Dropboxが表示に対応しているファイル形式 (2010.9時点)
形式 | 拡張子 |
---|---|
画像 | jpg, tiff, gif |
音源 | mp3, aiff, m4a, wav |
動画 | mov, mp4, m4v |
Office | doc, docx, ppt, pptx, xls, xlsx |
iWork | key, pages, numbers |
HTML | htm, html |
テキスト | txt, rtf |
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。