2

Dropbox を iOS アプリと統合するために Core API を使用しています。アカウントを認証し、ファイルを正常にアップロードできます。

ただし、認証後、ユーザーがドロップボックス アカウントからアプリ フォルダーを削除するか、ドロップボックス設定からアプリをアンインストールするとします。

その後、ファイルをアップロードしようとすると、ファイル全体がアップロードされ (進行状況が 0 から 1 に達します) 、 https://の標準 API エラーに-1021対応するNSURLErrorRequestBodyStreamExhaustedエラー コードもエラー コードも受け取りません。 www.dropbox.com/developers/core/api。 問題は、アカウント自体がリンク解除されていなくても、iOS 6 を搭載したデバイスでこれが発生していることです。コア API ドキュメントで説明されているように、認証エラー (エラー コード 401) であるエラー コード (ただし、ファイル全体がアップロードされた後も) を取得する iOS 5 を搭載したデバイスがあります。また、アカウントは自動的にリンク解除されます。401
401

更新:このバグは、最新の Dropbox コア API ビルドで解決されています。

4

1 に答える 1

1

次のコードは、アプリの起動時にユーザーの Dropbox アカウント情報 (現在リンクされている場合) をすぐに要求します。ユーザーがアプリ フォルダを削除するか、Dropbox.com からアプリへのアクセスを取り消した場合、アプリの起動時にユーザーのリンクはすぐに解除されます。SDK にファイルのアップロード時に 401 を返さないバグがあるかどうかに関係なく、これは良い方法だと思います。

didFinishLaunchingWithOptionsDropbox を初期化するアプリのデリゲート メソッドにこれを追加します。

DBSession* dbSession = [[[DBSession alloc] initWithAppKey:DROPBOX_KEY appSecret:DROPBOX_SECRET root:kDBRootAppFolder] autorelease];
[DBSession setSharedSession:dbSession];
if ([[DBSession sharedSession] isLinked]) {
    DBRestClient* dbRestClient = [[DBRestClient alloc] initWithSession:[DBSession sharedSession]];
    [dbRestClient setDelegate:self];
    [dbRestClient loadAccountInfo];
}

次に、アプリのデリゲートに次のメソッドを追加します

- (void)restClient:(DBRestClient*)client loadAccountInfoFailedWithError:(NSError*)error {
    if (error.code == 401) {
        [[DBSession sharedSession] unlinkAll];
    }
}
于 2013-04-14T23:29:51.633 に答える