Как я могу разместить значение API листов Google V4 в Swift 3 и 4? - PullRequest
0 голосов
/ 25 июня 2018

Я пытался сделать это около двух дней, и, к сожалению, я не понимаю этого API или не могу перевести документацию с одного языка на другой.Любые способы, которыми я пытаюсь выполнить POST-запрос для листов Google с помощью Swift 4.

До сих пор я успешно выполнял GET-запрос.с этим кодом:

private let scopes = [kGTLRAuthScopeSheetsSpreadsheets, kGTLRAuthScopeSheetsDrive]
private let service = GTLRSheetsService()
let signInButton = GIDSignInButton()
let output = UITextView()
var requestType = ""

func gIDPrepare(){
    // Configure Google Sign-in.
    GIDSignIn.sharedInstance().delegate = self
    GIDSignIn.sharedInstance().uiDelegate = self
    GIDSignIn.sharedInstance().scopes = scopes
    GIDSignIn.sharedInstance().signInSilently()
    // Add the sign-in button.
    view.addSubview(signInButton)

}

//GET request for specific tab
//grab the hash and store it
func professorGET(){
    requestType = "PG"
    gIDPrepare()
}


public func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!) {
    if let error = error {
        showAlert("problem", message: "Authentication Error", action: error.localizedDescription)
        self.service.authorizer = nil
    } else {
        self.signInButton.isHidden = true
        self.output.isHidden = false
        self.service.authorizer = user.authentication.fetcherAuthorizer()
        switch requestType {
            case "SG":
                getCells(cellRange: "A1:B")
            case "PG":
                getCells(cellRange: "SHA!B3:B3")
            case "PP":
                postCells(range: "Test!A1:D1")
            default:
                print("something wrong happened")
        }
    }

func getCells(cellRange:String) {
    output.text = "Getting sheet data..."
    let spreadsheetId = "sheetid"
    let query = GTLRSheetsQuery_SpreadsheetsValuesGet.query(withSpreadsheetId: spreadsheetId, range:cellRange)
    service.executeQuery(query, delegate: self, didFinish: #selector(displayResultWithTicket(ticket:finishedWithObject:error:))
    )
}

1 Ответ

0 голосов
/ 25 июня 2018

Радуйтесь, что ваш ответчик здесь, чтобы помочь, если у вас есть какие-либо вопросы! (: Хотя я должен сказать, что я не рекомендую это, потому что это может сделать вашу Систему более связанной.

В любом случае, именно так я успешно выполнил POST с помощью Google Sheets API V4, используя Swift 3 и 4.

  1. Прежде всего, убедитесь, что вы выполнили указания по этой ссылке и сделали GET, чтобы вы правильно проверили модуль. Я использовал эту версию с моим файлом pod.

    pod 'GoogleAPIClientForREST/Sheets', '~> 1.2.1' pod 'GoogleSignIn', '~> 4.1.1'

  2. После этого вам нужно будет увеличить свои возможности. Поэтому измените эту переменную экземпляра на:

    private let scopes = [kGTLRAuthScopeSheetsSpreadsheets, kGTLRAuthScopeSheetsDrive]

  3. Наконец, измените это внутри метода listMajors () из настроек, которые предоставляет Google. На это:

    func listMajors(){
    
        let range = "SheetName!A1:A2"
        let spreadsheetId = "your sheet id as string"
        let descriptions: [String: Any] = ["range" : range,
                                       "majorDimension" : "ROWS",
                                       "values" : [["dog"], ["cat"]]
                                      ]
        let valueRange = GTLRSheets_ValueRange(json: descriptions)
        let query = GTLRSheetsQuery_SpreadsheetsValuesUpdate.query(withObject: valueRange, spreadsheetId: spreadsheetId, range: range)
        query.valueInputOption = "USER_ENTERED"
        service.executeQuery(query, delegate: self, didFinish: #selector(displayResultWithTicket(ticket:finishedWithObject:error:)))
    
    }
    
...