2017-09-14 3 views
0

Je suis en train de jouer avec l'API google drive et d'essayer de créer une application simple qui télécharge une image sur mon disque google. L'application est supposée télécharger une image une fois que l'utilisateur est connecté, mais il donne une erreur deAutorisations IOS de l'API Google Drive de GTLRDriveService

"2017-09-14 00: 55: 20.342237-0400 driveTest [6705: 1647551] Une erreur s'est produite: Erreur Domaine = Code com.google.GTLRErrorObjectDomain = 403 "Permission insuffisante" UserInfo = {GTLRStructuredError = GTLRErrorObject 0x1c4251d30: {message: erreurs "Permission insuffisante": [1] Code: 403}, NSLocalizedDescription = Permission insuffisante} »

Je essayé de lui passer le service qui est de type GTLRDriveService à la fonction initSetup() de la classe userSetUp, mais en vain. Est-ce que quelqu'un pourrait me diriger vers la bonne piste pour savoir pourquoi mes permissions ne fonctionnent pas même si je me suis connecté correctement, et la partie où je passe dans le GTLRDriveService est dans le code qui fonctionne après une connexion réussie.

J'instancier un objet usersetup et je nous setUpUser = usersetup() setUpUser.initSetup (service)

Je usersetup écrit en tant que tel c objectif et il est comblé correctement que je suis en mesure de instancier dans mon fichier viewcontroller qui est écrit dans swift.

usersetup :::::::

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


@implementation userSetUp 
- (void) initSetup:(GTLRDriveService *) driveService { 


    printf("heloooooaiosuoiadoidauoalo"); 
    //GTLRDriveService *driveService = [GTLRDriveService new]; 
    //NSData *fileData = [[NSFileManager defaultManager] contentsAtPath:@"files/apple.jpg"]; 
    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"; 

    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) { 
      //NSLog(@"File ID %@", file.identifier); 
      printf("it worked"); 
     } else { 
      NSLog(@"An error occurred: %@", error); 
     } 
    }]; 



printf("upload complete!"); 


} 
@end 

Et viewController. rapide importation GoogleAPIClientForREST importation GoogleSignIn importation UIKit

class ViewController: UIViewController, GIDSignInDelegate, GIDSignInUIDelegate  { 


// If modifying these scopes, delete your previously saved credentials by 
// resetting the iOS simulator or uninstall the app. 
private let scopes = [kGTLRAuthScopeDriveReadonly] 

let service = GTLRDriveService() 
let signInButton = GIDSignInButton() 
let output = UITextView() 

override func viewDidLoad() { 
    super.viewDidLoad() 

    // Configure Google Sign-in. 
    GIDSignIn.sharedInstance().delegate = self 
    GIDSignIn.sharedInstance().uiDelegate = self 
    GIDSignIn.sharedInstance().scopes = scopes 

    GIDSignIn.sharedInstance().signInSilently() 
    signInButton.frame = CGRect(x: view.frame.width/2 - signInButton.frame.width , y: view.frame.height/2, width: signInButton.frame.width, height: signInButton.frame.height) 
    // Add the sign-in button. 
    view.addSubview(signInButton) 

    // Add a UITextView to display output. 
    output.frame = view.bounds 
    output.isEditable = false 
    output.contentInset = UIEdgeInsets(top: 20, left: 0, bottom: 20, right: 0) 
    output.autoresizingMask = [.flexibleHeight, .flexibleWidth] 
    output.isHidden = true 
    view.addSubview(output); 
    //let itsASetup() 
} 

func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, 
      withError error: Error!) { 
    if let error = error { 
     showAlert(title: "Authentication Error", message: error.localizedDescription) 
     self.service.authorizer = nil 
    } else { 
     self.signInButton.isHidden = true 
     self.output.isHidden = false 
     self.service.authorizer = user.authentication.fetcherAuthorizer() 

     listFiles() 
    } 
} 

// List up to 10 files in Drive 
func listFiles() { 
    let query = GTLRDriveQuery_FilesList.query() 
    query.pageSize = 10 
    service.executeQuery(query, 
         delegate: self, 
         didFinish: #selector(displayResultWithTicket(ticket:finishedWithObject:error:)) 
    ) 

} 

// Process the response and display output 
@objc func displayResultWithTicket(ticket: GTLRServiceTicket, 
          finishedWithObject result : GTLRDrive_FileList, 
          error : NSError?) { 

    if let error = error { 
     showAlert(title: "Error", message: error.localizedDescription) 
     return 
    } 

    var text = ""; 
    if let files = result.files, !files.isEmpty { 
     text += "Files:\n" 
     for file in files { 
      text += "\(file.name!) (\(file.identifier!))\n" 
     } 
    } else { 
     text += "No files found." 
    } 
    output.text = text 
    let setUpUser = userSetUp() 
    setUpUser.initSetup(service) 
} 


// Helper for showing an alert 
func showAlert(title : String, message: String) { 
    let alert = UIAlertController(
     title: title, 
     message: message, 
     preferredStyle: UIAlertControllerStyle.alert 
    ) 
    let ok = UIAlertAction(
     title: "OK", 
     style: UIAlertActionStyle.default, 
     handler: nil 
    ) 
    alert.addAction(ok) 
    present(alert, animated: true, completion: nil) 
} 
} 

Répondre

0

essayer de changer votre champ comme:

class ViewController: UIViewController, GIDSignInDelegate, GIDSignInUIDelegate 
{ 
    // If modifying these scopes, delete your previously saved credentials by 

    private let scopes = ["https://www.googleapis.com/auth/drive"] 

    ... 
} 
+1

Merci beaucoup cela a fonctionné !! – JustANoob