GoogleSignIn iOS附加到Google表格

汤米

我目前正在开发一个iOS应用,该应用需要写入登录用户所拥有的Google工作表。

要登录用户,我要使用GoogleSignInPod;要附加到Google工作表,请使用GoogleAPIClientForREST/SheetsPod。

我可以让用户正确登录,但是由于身份验证错误,我一生似乎无法写工作表。我在SO上找到的每个示例(例如,使用Google SpreadSheet API更新iOS Swift中的特定行)之类的状态都使用fetcherAuthorizer()当前用户方法并将其分配给service.authorizer,但是这样甚至不会编译,并出现以下错误value of type 'GIDAuthentication?' has no member 'fetcherAuthorizer'

因此对于我的Podfile,我有:

pod 'GoogleSignIn'
pod 'GoogleAPIClientForREST/Sheets' 

AppDelegate didFinishLaunchingWithOptions有以下内容:

    GIDSignIn.sharedInstance().clientID = "clientIdHere"

    GIDSignIn.sharedInstance()?.scopes.append(kGTLRAuthScopeSheetsSpreadsheets)
    GIDSignIn.sharedInstance()?.scopes.append(kGTLRAuthScopeSheetsDrive)
    GIDSignIn.sharedInstance()?.delegate = self

当我尝试写到工作表时,我使用:

    let service = GTLRSheetsService()
     // following line errors with authorizer not being a property of the service 
     //variable and fetchAuthorizer() not being a method on authentication
service.authorizer = GIDSignIn.sharedInstance().currentUser.authentication.fetcherAuthorizer()
        let spreadsheetId = "id"
        let range = "Sheet1"
        let valueRange = GTLRSheets_ValueRange.init();
        valueRange.values = [
            ["Hello", "World"]
        ]
        let query = GTLRSheetsQuery_SpreadsheetsValuesAppend
            .query(withObject: valueRange, spreadsheetId:spreadsheetId, range:range)
        query.valueInputOption = "USER_ENTERED"

        service.executeQuery(query) { (ticket, any, error) in
            if let error = error {
                print(error)
            }
            print(any)
            print(ticket)
        }

我尝试使用带有authorization标题的标准URLSession,例如

let data = ["range":"Sheet1!A1:D1", "majorDimension":"ROWS", "values": ["123","123","123","123"]] as [String : Any]
    urlRequest.addValue("application/json", forHTTPHeaderField: "content-type")
    urlRequest.addValue(GIDSignIn.sharedInstance()!.currentUser.authentication.accessToken, forHTTPHeaderField: "authorization")
    urlRequest.httpBody = try! JSONSerialization.data(withJSONObject: data, options: .sortedKeys)
    let session = URLSession.shared.dataTask(with: urlRequest) { (data, response, error) in
        if let error = error {
            print(error)
        } else {
            print(String(data: data!, encoding: .utf8))
        }
    }.resume()

但这也无法告诉我我需要传递访问令牌。谁能建议这应该如何工作?我似乎只是在与文档打交道,我能找到的所有其他示例似乎都在使用似乎不存在的方法/属性!

这些是我正在使用的当前Pod版本

Using GTMOAuth2 (1.1.6)
Using GTMSessionFetcher (1.2.0)
Using GoogleAPIClientForREST (1.3.6)
Using GoogleSignIn (4.2.0)
Using GoogleToolboxForMac (2.1.4)

而且,只有在我知道有用户时,才调用该方法写入工作表。

谢谢

汤米

对于其他遇到类似问题的人,我设法使其与GoogleAPIClient一起使用。

问题与Swift默默地删除导入以进行前向声明有关。

所以你需要一个桥接头如下

#import <GTMSessionFetcher/GTMSessionFetcher.h>
#import <GTMSessionFetcher/GTMSessionFetcherService.h>

并且需要在使用此类的任何类中将其导入APIClient框架之前。

例如

import GTMSessionFetcher
import GoogleAPIClientForREST
import GoogleSignIn

然后,您应该能够访问该authorizer属性和fetcherAuthorizer()方法!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

pod“ Google / SignIn”与pod“ GoogleSignIn”

iOS GoogleSignIn:隐藏登录确认消息框

找不到“ GoogleSignIn / GoogleSignIn.h”文件

找不到“ GoogleSignIn / GoogleSignIn.h”文件

在通过Firebase进行GoogleSignIn之后,如何重定向到另一个屏幕?的iOS

带有googleSignIn的ios firebase Auth为后端服务器获取IdToken

对于新的Google Play服务实施,“ GoogleSignIn被标记为内部,不应从应用访问”

带有GoogleSignIn的Google API-错误401-未经授权

如何实施GoogleSignIn

未解决的参考 GoogleSignIn

这是关于 googleSignIn 的错误: MissingPluginException(在频道 plugins.flutter.io/google_sign_in 上找不到方法 init 的实现)

使用 Carthage 集成 Firebase GoogleSignIn

将表格附加到边缘[iOS / SwiftUI]

由于GoogleSignIn,AdMob提交应用程序“应用程序尝试访问没有使用说明的隐私敏感数据”时,iOS 10 GM发布错误

有没有一种方法可以避免将GoogleSignIn和AppAuth-iOS用作静态框架的冲突?

点击GoogleSignIn按钮时应用崩溃

登录前获取电子邮件 - GoogleSignIn

Firebase GoogleSignIn.signIn() 阻止用户交互

GoogleMobileVision GoogleSignIn使用Cocoapods的重复符号?

如何获取React Native GoogleSignIn的accessToken?

如何修复RN GoogleSignin模块链接。

R-使用GoogleSignIn和ObserveEvent

无法使用Firebase进行googleSignIn-Android

如何将 appscript (Google Docs) 中的表格附加到所有其他表格之上

类GoogleSignIn在身份验证库未找到

Android GoogleSignIn:同时多个帐户+失败时推迟登录

当我使用 googleSignIn 时,用户在 Firestore 上重复

GoogleSignIn / Crashlytics / Firebase的自定义编译器标志

如何使用 googleSignIn 未来方法中的命名路线导航?