2014-06-06 11 views
10

Qualcuno è riuscito a utilizzare Google Drive Api (Objjective C) in un progetto SwiftGoogle Objective-C API 'GTL' con Swift

https://developers.google.com/drive/ios/quickstart

Ho provato un certo numero di modi diversi, ma non riesco a ottenere per compilare

Il più vicino a cui sono arrivato stava usando la metodologia di Rob nel link sottostante e aggiungendo #import "GTLDrive.h" al BridgingHeader. Questo mi ha permesso di creare un GTLDrive ma non l'Auth perchè non potevo ottenere Xcode per prestare attenzione alle flag No ARC.

Stackoverflow 11370752

+0

HII @ Ryan Heitner ha u implementato calendario di Google in rapida –

risposta

14

alla fine ho riuscito a farlo seguendo

Stack OverFlow 11370752

e l'aggiunta di un file di ponte-header.h con

#import "GTLDrive.h" 
#import "GTMOAuth2ViewControllerTouch.h" 

Per risparmiare tempo qualcuno includo il mio Conversione da Objective-C a Swift del campione incluso nel Quickstart di Google

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, 
     clientID: kClientID, 
     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() 
} 

} 
1

meglio utilizzare Pod per l'aggiunta di Google Objective-C API 'GTL' al progetto iPhone riferimento questo link Dopo di che è possibile implementare @ Ryan Heitner rispondere

1
Non

davvero una risposta a questa domanda ma in questo repository ho effettuato l'accesso a Google Form da un'app iOS senza utilizzare l'API di Google. https://github.com/goktugyil/QorumLogs

Ecco il tutorial di come configurarlo: https://github.com/goktugyil/QorumLogs/blob/master/Log%20To%20GoogleDocs.md

Heres il codice per farlo:

private static var googleFormLink: String! 
private static var googleFormAppVersionField: String! 
private static var googleFormUserInfoField: String! 
private static var googleFormMethodInfoField: String! 
private static var googleFormErrorTextField: String! 

/// Setup Google Form links 
static func setupOnlineLogs(#formLink: String, versionField: String, userInfoField: String, methodInfoField: String, textField: String) { 
    googleFormLink = formLink 
    googleFormAppVersionField = versionField 
    googleFormUserInfoField = userInfoField 
    googleFormMethodInfoField = methodInfoField 
    googleFormErrorTextField = textField 
} 

private static func sendError(#text: String) { 
    var url = NSURL(string: googleFormLink) 
    var postData = googleFormAppVersionField + "=" + text 
    postData += "&" + googleFormUserInfoField + "=" + "anothertext"   
    postData += "&" + googleFormMethodInfoField + "=" + "anothertext" 
    postData += "&" + googleFormErrorTextField + "=" + "anothertext" 

    var request = NSMutableURLRequest(URL: url!) 
    request.HTTPMethod = "POST" 
    request.setValue("application/x-www-form-urlencoded; charset=utf-8", forHTTPHeaderField: "Content-Type") 
    request.HTTPBody = postData.dataUsingEncoding(NSUTF8StringEncoding) 
    var connection = NSURLConnection(request: request, delegate: nil, startImmediately: true) 

}