2017-09-15 7 views
0

J'essaie actuellement d'utiliser l'API google drive pour IOS pour créer un dossier, mettre un fichier dans le dossier, puis partager le fichier. Créer le dossier, et mettre le fichier dans le dossier fonctionne, mais la fonctionnalité de partage ne fonctionne pas. Lorsque je me connecte à l'adresse e-mail avec laquelle j'ai partagé le fichier, elle n'apparaît pas. Est-ce que quelqu'un pourrait m'aider à comprendre où le problème se poserait dans le code Objective -c ci-dessous.Google Drive SDK partage un fichier

L'ordre d'appel des méthodes est initSetup où le dossier est créé, puis dans initsetup, uploadToFolder est appelé, et dans uploadToFolder, le fichier est partagé.

#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 

Répondre

0

ne connaissent pas les codes ios exactement mais je pense aussi longtemps que vous spécifiez le

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

dans Permissions.create, il devrait être le travail.