有没有人设法在
Swift项目中使用Google Drive Api(对象C)
https://developers.google.com/drive/ios/quickstart
我已经尝试了许多不同的方式,但是无法得到它来编译
我最接近的是在下面的链接中使用Rob的方法,并将#import“GTLDrive.h”添加到BridgingHeader.这让我创建一个GTLDrive,但不是Auth becauser我无法获得Xcode注意没有ARC标志.
解决方法
我终于设法通过跟进来做到这一点
#import "GTLDrive.h" #import "GTMOAuth2ViewControllerTouch.h"
为了节省时间,我将Objective-C包含在Google Quickstart中包含的样本的快速翻译中
IOS Quickstart for Google Drive
import UIKit import MobileCoreServices class ViewController: UIViewController,UINavigationControllerDelegate,UIImagePickerControllerDelegate { var window: UIWindow? let driveService : GTLServiceDrive = GTLServiceDrive() let kKeychainItemName : NSString = "Google Drive Quickstart" let kClientID : NSString = "Your Client ID" let kClientSecret : NSString = "Your Secret" func showWaitIndicator(title:String) -> UIAlertView { // println("showWaitIndicator \(title)") var progressAlert = UIAlertView() progressAlert.title = title progressAlert.message = "Please Wait...." progressAlert.show() let activityView = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.White) activityView.center = CGPointMake(progressAlert.bounds.size.width / 2,progressAlert.bounds.size.height - 45) progressAlert.addSubview(activityView) activityView.hidesWhenStopped = true activityView.startAnimating() return progressAlert } override func viewDidLoad() { super.viewDidLoad() self.driveService.authorizer = GTMOAuth2ViewControllerTouch.authForGoogleFromKeychainForName(kKeychainItemName,clientID: kClientID,clientSecret: kClientSecret) } override func viewDidAppear(animated: Bool) { self.showCamera() } func showCamera() { var cameraUI = UIImagePickerController() if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.Camera) { cameraUI.sourceType = UIImagePickerControllerSourceType.Camera } else { cameraUI.sourceType = UIImagePickerControllerSourceType.PhotoLibrary if UIDevice.currentDevice().userInterfaceIdiom == UIUserInterfaceIdiom.Pad { self.showAlert("Error",message: "Ipad Simulator not supported") return } } cameraUI.mediaTypes = [kUTTypeImage as String] cameraUI.allowsEditing = true cameraUI.delegate = self self.presentModalViewController(cameraUI,animated: true) println("Show Camera \(self.isAuthorized())") if (!self.isAuthorized()) { // Not yet authorized,request authorization and push the login UI onto the navigation stack. cameraUI.pushViewController(self.createAuthController(),animated:true); } } // Handle selection of an image func imagePickerController(picker: UIImagePickerController,didFinishPickingMediaWithInfo info:NSDictionary) { println("imagePickerController didFinishPickingMediaWithInfo") let image = info.valueForKey(UIImagePickerControllerOriginalImage) as UIImage self.dismissModalViewControllerAnimated(true) self.uploadPhoto(image) } // Handle cancel from image picker/camera. func imagePickerControllerDidCancel(picker: UIImagePickerController){ self.dismissModalViewControllerAnimated(true) } // Helper to check if user is authorized func isAuthorized() -> Bool { return (self.driveService.authorizer as GTMOAuth2Authentication).canAuthorize } // Creates the auth controller for authorizing access to Google Drive. func createAuthController() -> GTMOAuth2ViewControllerTouch { return GTMOAuth2ViewControllerTouch(scope: kGTLAuthScopeDriveFile,clientSecret: kClientSecret,keychainItemName: kKeychainItemName,delegate: self,finishedSelector: Selector("viewController:finishedWithAuth:error:")) } // “func join(string s1: String,toString s2: String,withJoiner joiner: String)” // Handle completion of the authorization process,and updates the Drive service // with the new credentials. func viewController(viewController: GTMOAuth2ViewControllerTouch,finishedWithAuth authResult: GTMOAuth2Authentication,error:NSError ) { if error != nil { self.showAlert("Authentication Error",message:error.localizedDescription) self.driveService.authorizer = nil } else { println("Authentication success") self.driveService.authorizer = authResult } } // Uploads a photo to Google Drive func uploadPhoto(image: UIImage) { println("uploading Photo") let dateFormat = NSDateFormatter() dateFormat.dateFormat = "'Quickstart Uploaded File ('EEEE MMMM d,YYYY h:mm a,zzz')" let file = GTLDriveFile.object() as GTLDriveFile file.title = dateFormat.stringFromDate(NSDate()) file.descriptionProperty = "Uploaded from Google Drive IOS" file.mimeType = "image/png" let data = UIImagePNGRepresentation(image) let uploadParameters = GTLUploadParameters(data: data,MIMEType: file.mimeType) let query = GTLQueryDrive.queryForFilesInsertWithObject(file,uploadParameters: uploadParameters) as GTLQueryDrive let waitIndicator = self.showWaitIndicator("Uploading To Google Drive") // self.driveService.executeQuery(query,completionHandler: {(ticket: GTLServiceTicket,insertedFile: AnyObject,error: NSError) in { // // // } // elf.driveService.executeQuery(<#query: GTLQueryProtocol?#>,completionHandler: <#((GTLServiceTicket!,AnyObject!,NSError!) -> Void)?#>) self.driveService.executeQuery(query,completionHandler: { (ticket,insertedFile,error) -> Void in let myFile = insertedFile as? GTLDriveFile waitIndicator.dismissWithClickedButtonIndex(0,animated: true) if error == nil { println("File ID \(myFile?.identifier)") self.showAlert("Google Drive",message: "File Saved") } else { println("An Error Occurred! \(error)") self.showAlert("Google Drive",message: "Sorry,an error occurred!") } }) } func showAlert(title: String,message: String ) { let cancel = "OK" println("show Alert") let alert = UIAlertView() alert.title = title alert.message = message alert.addButtonWithTitle(cancel) alert.show() } }