そのため、2 人のユーザーがそれぞれの Google ドライブにあるファイルを交換できるようにしようとしています。これには、相手のファイルの ID を知り、API 呼び出しを使用してそれを取得することが含まれます。両方のファイルは、誰でも/パブリックに共有されているフォルダーにあります。
問題は、以下のコードを実行すると、各ユーザーが所有するファイルに対応する downloadUrl しか使用できないことがわかります。他のユーザーは 404 を返します。この場合、アカウントに応じて「私のもの」または「自分のもの」のいずれかですログインしました。
// _driveService and its authorizer setup elsewhere
// Retrieve the metadata then the actual data
NSString *mine = @"0B4Pba9IBDsR3T1NVTC1XSGJTenc";
NSString *theirs = @"0B4n9OyY8tqWpNlNaN1dUc3FsNG8";
NSString *get = [NSString stringWithFormat:@"https://www.googleapis.com/drive/v2/files/%@",theirs];
[_driveService fetchObjectWithURL:[NSURL URLWithString:get] completionHandler:^
(GTLServiceTicket *ticket, GTLDriveFile *file, NSError *error)
{
if (error != nil)
NSLog(@"Error retrieving metadata: %@", error);
else
{
// Download the actual data
GTMHTTPFetcher *fetcher = [_driveService.fetcherService fetcherWithURLString:file.downloadUrl];
[fetcher beginFetchWithCompletionHandler:^
(NSData *data, NSError *error)
{
if (error != nil)
NSLog(@"Error retrieving actual data: %@", error);
else
{
NSString *content = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"Content: %@", content);
}
}];
}
}];
実際のデータの取得中にエラーが発生しました: エラー Domain=com.google.HTTPStatus Code=404 "The operation could not be completed. (com.google.HTTPStatus error 404.)"
ここで何が間違っていますか?パーミッションの問題なら、なぜメタデータを取得できるのですか?
これは iOS アプリ用であり、両方のファイルが作成され、公式のクライアント API (rev 353) を使用してアプリからアップロードされたことに注意してください。