2017-09-15 25 views
0

現在、GoogleドライブAPIを使用してフォルダを作成し、フォルダにファイルを入れてからファイルを共有しようとしています。フォルダを作成し、そのフォルダにファイルを置くことはできますが、共有機能は動作しません。私がファイルを共有した電子メールアドレスにログオンすると、表示されません。誰かが、以下のObjective-cコードで問題がどこで発生するかを理解するのを助けてくれますか?GoogleドライブSDKファイルを共有する

このメソッドが呼び出される順序は、フォルダが作成されたinitSetupです。その後、initsetupでuploadToFolderが呼び出され、uploadToFolderで呼び出されると、ファイルが共有されます。

#import "userSetUp.h" 
#import <GoogleSignIn/GoogleSignIn.h> 
@import GoogleAPIClientForREST; 


@implementation userSetUp 
NSString *folderID; 
-(id) initWithDriveService:(GTLRDriveService *)driveService{ 
self = [ super init]; 
if(self){ 
    self.driveService = driveService; 
} 
return self; 
} 
- (void) initSetup{ 



GTLRDrive_File *metadata = [GTLRDrive_File object]; 
metadata.name = @"AName"; 
metadata.mimeType = @"application/vnd.google-apps.folder"; 
GTLRDriveQuery_FilesCreate *query = [GTLRDriveQuery_FilesCreate queryWithObject:metadata 
                   uploadParameters:nil]; 
query.fields = @"id"; 
[_driveService executeQuery:query completionHandler:^(GTLRServiceTicket *ticket, 
                GTLRDrive_File *file, 
                NSError *error) { 
    if (error == nil) { 
     folderID = file.identifier; 
     //[self shareToDrive:file.identifier]; 
     //printf("the folder id is" + file.identifier) 
     [self uploadToFolder: file.identifier]; 
     NSLog(@" FOLDER File ID %@", file.identifier); 
    } else { 
     NSLog(@"An error occurred: %@", error); 
    } 
}]; 




} 
- (void) uploadToFolder:(NSString *) folderId { 


NSString *filePath = [[NSBundle mainBundle] pathForResource:@"apple" ofType:@"jpg"]; 
NSData *fileData = [NSData dataWithContentsOfFile:filePath]; 
GTLRDrive_File *metadata = [GTLRDrive_File object]; 
metadata.name = @"apple.jpg"; 

//metadata.mimeType = @"application/vnd.google-apps.document"; 
metadata.parents = [NSArray arrayWithObject:folderId]; 

GTLRUploadParameters *uploadParameters = [GTLRUploadParameters uploadParametersWithData:fileData 
                       MIMEType:@"image/jpeg"]; 
uploadParameters.shouldUploadWithSingleRequest = TRUE; 
GTLRDriveQuery_FilesCreate *query = [GTLRDriveQuery_FilesCreate queryWithObject:metadata 
                   uploadParameters:uploadParameters]; 
query.fields = @"id"; 
[_driveService executeQuery:query completionHandler:^(GTLRServiceTicket *ticket, 
                GTLRDrive_File *file, 
                NSError *error) { 
    if (error == nil) { 
     /** 
     * 
     *This is where the file id of the file gets sent to be shared 
     * 
     */ 
     [self shareToDrive:file.identifier]; 
     NSLog(@"File ID %@", file.identifier); 
    } else { 
     NSLog(@"An error occurred: %@", error); 
    } 
}]; 
printf("uploaded image to folder"); 
} 
- (void) shareToDrive:(NSString *) fileId{ 
GTLRBatchQuery *batchQuery = [GTLRBatchQuery batchQuery]; 

GTLRDrive_Permission *userPermission = [GTLRDrive_Permission object]; 
userPermission.type = @"user"; 
userPermission.role = @"reader"; 
userPermission.emailAddress = @"[email protected]"; 
GTLRDriveQuery_PermissionsCreate *createUserPermission = 
[GTLRDriveQuery_PermissionsCreate queryWithObject:userPermission 
              fileId:fileId]; 
createUserPermission.fields = @"id"; 
createUserPermission.completionBlock = ^(GTLRServiceTicket *ticket, 
             GTLRDrive_Permission *permission, 
             NSError *error) { 
    if (error == nil) { 
     printf("we out here"); 
     NSLog(@"Permisson ID: %@", permission.identifier); 
    } else { 
     //printf("oh no an error!"); 
     NSLog(@"An error occurred: %@", error); 
    } 

}; 
[batchQuery addQuery:createUserPermission]; 
printf("file shared"); 
} 
@end 

答えて

0

は正確にIOSコードを知ってはいけないが、私は限り、あなたは Permissions.create

"emailAddress": "[email protected]", 
    "role": "reader", 
    "type": "user" 

を指定すると、それが仕事であるべきだと思います。

関連する問題