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)
}
}
Merci beaucoup cela a fonctionné !! – JustANoob