Я пытаюсь читать и писать в ячейку в Google Sheet.Использование GoogleSignIn у меня работает, но только с использованием аутентификации пользователя (для моего собственного тестирования и обучения).Однако в моем приложении я не хочу, чтобы пользователи входили в систему. Лист предназначен исключительно для чтения и записи самого приложения.
Я нашел этот ресурс Google Cloud иЯ пытаюсь использовать это, но это не написано в Swift.Я также упомянул это (и часами искал и пытался следовать фрагментам в SO и других местах).
У меня есть служебная учетная запись и файл credentials.json, загруженный из Google.Я установил GOOGLE_APPLICATION_CREDENTIALS в AppDelegate.swift следующим образом:
setenv("GOOGLE_APPLICATION_CREDENTIALS","/home/user/Downloads/credentials.json", 1)
В ViewController.swift я импортирую следующим образом:
import GTMSessionFetcher
import GoogleAPIClientForREST
import GoogleSignIn
В viewDidLoad () Iиметь следующий код:
let credentials = ProcessInfo.processInfo.environment["GOOGLE_APPLICATION_CREDENTIALS"]
print("CREDENTIALS: \(credentials ?? noToken)") // prints "/home/user/Downloads/credentials.json"
GIDSignIn.sharedInstance().clientID = "{Google-generated-client-ID_}"
GIDSignIn.sharedInstance()?.serverClientID = "_{Google-generated-serverClientID}_"
GIDSignIn.sharedInstance().delegate = self
GIDSignIn.sharedInstance().uiDelegate = self
GIDSignIn.sharedInstance().scopes = scopes
GIDSignIn.sharedInstance().signInSilently()
Вот код входа для аутентификации пользователя.Я пытаюсь преобразовать это в идентификацию приложения, используя данные credentials.json.Как и выше, у меня теперь есть путь к файлу credentials.json в моей переменной credentials .
func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!,
withError error: Error!) {
if let error = error {
print("\(error.localizedDescription)")
self.service.authorizer = nil
} else {
// Perform any operations on signed in user here.
let userId = user.userID // For client-side use only!
token = user.authentication.idToken // Safe to send to the server
let fullName = user.profile.name
let givenName = user.profile.givenName
let familyName = user.profile.familyName
let email = user.profile.email
// ...
self.service.authorizer = user.authentication.fetcherAuthorizer()
print("SIGN IN SUCCESSFUL: \(userId), \(token), \(fullName), \(givenName), \(familyName), \(email)")
}
}
В другой функции мой фактический код для вызова API Google Sheets выглядит следующим образом:
let spreadsheetId = "_{spreadsheetID}_"
let range = "Sheet1!A1:F3"
let query = GTLRSheetsQuery_SpreadsheetsValuesGet.query(withSpreadsheetId: spreadsheetId, range:range)
service.executeQuery(query,
delegate: self,
didFinish: #selector(ViewController.displayResultWithTicket(ticket:finishedWithObject:error:))
)
Я понимаю, что приведенный выше код предназначен почти для идентификации пользователя.Итог: в Swift, для приложения для iOS, я бы хотел, чтобы мое приложение считывало и записывало в единый Google Sheet под моим контролем без необходимости входа пользователя.