*

KiiCloudでファイルアップロード

公開日: : iOS ,

KiiCloudではサーバーと通信が必要な処理は、同期タイプ(Synchronous)と非同タイプ(withBlock)のAPIがそれぞれ用意されている。
いずれのタイプも処理の成否はNSErrorで受けとる。
最新のSDK(2.1.12)ではKiiObjectにBody属性があり、ファイルを保存することができる。これも同期タイプと非同期タイプが用意されている。

//KiiObject
-(KiiUploader*) uploader : (NSString*) localPath;
-(KiiDownloader*) downloader : (NSString*) localPath;
- (void) deleteBodyWithBlock:(KiiObjectBlock)block;
- (void) deleteBodySynchronous:(NSError**)error;

ファイルのアップロードは以下のようなコードで簡単にできる。ユーザのアバターで利用したかったので丁度よかった♪

    KiiUploader *uploader = [object uploader:path];
    [uploader transferWithProgressBlock:^(id transferObject, NSError *error) {
        KiiRTransferInfo *info = [transferObject info];
        NSLog(@"progress:%d, %d, %d", info.completedSizeInBytes, info.totalSizeInBytes, info.status);
    } andCompletionBlock:^(id transferObject, NSError *error) {
        KiiRTransferInfo *info = [transferObject info];
        NSLog(@"upload completion:%d, %d, %d, %@", info.completedSizeInBytes, info.totalSizeInBytes, info.status, error);
    }];

起動するたびにファイルをダウンロードするのはコストが高いので実際にはキャッシュディレクトリにファイルをキャッシュして使うようにする。

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
    NSString *path = [paths objectAtIndex:0];
    path = [path stringByAppendingPathComponent:fileName];

KiiObjectがファイルをもっているかどうかを判定する都合の良い方法がないので、
KiiObjectにファイルのメタ情報を保存して対応する。

試しに実装したサンプル

Uploader

サンプルソース

エラー処理(メモ)

Push通知を購読するためのサブスクリプションを登録しようとした場合に、すでに登録済みの場合以下のエラーがでる。

Error Domain=KiiSDK Code=0 "The operation couldn’t be completed. (KiiSDK error 0.)" UserInfo=0x15e79a40 {server_message=Already exists a push subscription for: objectScope b1de7c54/da8ec4a7-2ec3-40c1-b64a-5d7546b88cfe | topic: mh_notify | subject U:da8ec4a7-2ec3-40c1-b64a-5d7546b88cfe@b1de7c54, server_code=PUSH_SUBSCRIPTION_ALREADY_EXISTS}

このエラーは、KiiError.hで定義されているsubscriptionAlreadyExistかと思ったが、Code=0となっていて一致しない。

/* Push subscription already exist */
+ (NSError*) subscriptionAlreadyExist;
/* 中身
:Error Domain=KiiSDK Code=702 "The operation couldn’t be completed. (KiiSDK error 702.)" UserInfo=0x1763b4a0 {error_code=702, description=Subscription already exists}
*/

バグだと思うが、この場合は以下のようにserver_codeを確認するしかなさそう。しかし、バージョンアップなどでserver_codeも変更される可能性があるので、バージョンアップのときには確認が漏れないように注意。

    NSDictionary *userInfo = [error userInfo];
    NSString *server_code = [userInfo objectForKey:@"server_code"];
    return [code isEqualToString:server_code];

Sponsored Link

関連記事

df40.png

【イーモン】デザフェス用ミニゲーム

2014年11月8日のデザインフェスタ用に作ったミニゲームです! シルエットまたは単語の意味が

記事を読む

icloud.jpeg

iCloudその1:NSMetadataQueryDidUpdateNotification

iCloudのファイル管理についてよくわかってないので、以下の点について実際に確認しながらまとめてい

記事を読む

teach_s.png

[eMon] English Monstersレビュー申請中

先日、新しいiOSアプリを審査に出しました。 English Monsters(略してeM

記事を読む

2015_ec1.png

イーモン プレビュー動画

動画2作目、お正月っぽく

記事を読む

5017d1a195d95dfed9f60e9fd5d82c13.png

苦手な英語の発音を真面目に考えてみた

最近、英語の発音に真面目に取り組んでます。 これまで読み書きが中心で、リスニングやスピーキン

記事を読む

nice_slice.png

9スライスによる画像の拡大(9 Slice Scaling Image)

画像を拡大する方法には、引き伸す、ピクセルを繰り返す、パターンを繰り返すなどの方法があります。 U

記事を読む

icloud.jpeg

アプリからiCloudを使うための準備

iOSではアプリがiCloud上にデータを保存するための仕組みが提供されている。 iCloudは

記事を読む

no image

UIAlertのTextFieldでキーボードが表示されない(iOS7)

TextField付きのUIAlertViewでたまにキーボードが表示されないことがあり、 ながら

記事を読む

tmp.png

最近のAppStore審査【iOS8】

紹介動画でリジェクト!?(App Preview) AppStoreのアプリ紹介にに機能や

記事を読む

badge.png

iOSでバックグラウンドタスク(BackgroundTask)

iOSでは何もしなければアプリケーションがバックグラウンドに移行するとすぐにRunLoopやワ

記事を読む

Sponsored Link

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Sponsored Link

  • 発音辞書イーモン
  • English Monsters
  • sLog(時間管理アプリ)
  • 生粋のC++プログラマーです。 最近は、Objective-Cやxcode、cocos2d-xなどを学びながらiPhoneアプリを開発しています。

Google+ Google
PAGE TOP ↑