*

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

関連記事

teach_s.png

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

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

記事を読む

tmp.png

最近のAppStore審査【iOS8】

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

記事を読む

sample.png

cocos2dxでhttp通信のprogressを表示する

cocos2d-xでは、ダウンロードの進捗を取得するインターフェイスが用意されていないような

記事を読む

monster_kolion.png

【イーモン】11月8日デザフェス出展!

デザインフェスタに出展します! デザフェス出展者ページ 英語学習アプリ【イーモン】のキャラ

記事を読む

teach_s.png

English Monsters1.0がAppStoreの審査通過

English Monsterが遂にAppStoreで公開されました。 一度AppStor

記事を読む

AppIcon60x60@2x.png

ホーム画面にショートカットアイコン(スキームアイコン)を作成する

iOSのSafariには共有メニューにがあり、表示させているページへのショートカットアイコン

記事を読む

statusbar2.png

ステータスバーとナビゲーションバーを含まない領域を取得する

iOS7からUIViewControllerのview.boundsはステータスバーやナビゲーシ

記事を読む

no image

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

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

記事を読む

4300d3f14f7f754c5b2cd5b720efb39f.png

cocos2dxでマルチスレッド

cocos2dxでマルチスレッドをいじったときのメモ あらかじめautoreleaseに

記事を読む

cocos2d-xのSupporting IPv6-only Networks対応

2016年6月1日より、AppStoreに更新されるすべてのアプリは、IPv6-only netwo

記事を読む

Sponsored Link

Message

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

Sponsored Link

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

Google+ Google
PAGE TOP ↑