Изменить идентификатор клиента во время выполнения, войти в Google
Я работаю над приложением iOS, которое должно использовать API с нашего сайта. Чтобы подключиться к нему, пользователь должен войти в свою учетную запись Google с устройства, а затем мы автоматически подключаемся к API. Мы используем https://developers.google.com/identity/sign-in/ios/start-integrating для авторизации
Проблема в том, что существует более одного веб-сайта, и каждый из них имеет свой идентификатор клиента.
Я попытался изменить.plist, который хранит CLIENT_ID программно, и он не будет работать:
@IBAction func signInButtonClicked(sender: AnyObject) {
let signInPlistDirectory = *pathToGoogleService-Info.plist*
let signInPlist = NSMutableDictionary(contentsOfFile: signInPlistDirectory)!
if ((webNodeUrl.text?.hasSuffix(".testing-sites.internal")) != nil) {
signInPlist["CLIENT_ID"] = signInPlist["TESTING_CLIENT_ID"]
} else {
signInPlist["CLIENT_ID"] = signInPlist["PROD_CLIENT_ID"]
}
signInPlist.writeToFile(signInPlistDirectory, atomically: true)
}
Может быть, кто-нибудь знает, это вообще возможно сделать?
1 ответ
В документации сказано следующее:
Если вы не добавляли дополнительные службы при создании файла конфигурации, вам не нужно копировать его в свой проект. Однако сохраните файл конфигурации, поскольку он содержит информацию, необходимую для настройки вашего проекта XCode.
Если вы не пользуетесь дополнительными услугами, вы сможете уйти, не беспокоясь о списке (не то, чтобы я был уверен, что вы делаете с примером в вашем вопросе).
Прежде чем представить форму входа, вы можете попробовать что-то вроде следующего:
let manager = GIDSignIn.sharedInstance()
manager.clientId = "CLIENT_ID_YOU_WANT_TO_USE"
manager.delegate = self
manager.uiDelegate = self
manager.shouldFetchBasicProfile = true
manager.scopes = [
"https://www.googleapis.com/auth/plus.me"
]
manager.signIn()
Я не пытался установить clientId
значение для более чем одного идентификатора клиента в течение одного и того же периода времени выполнения, и не задокументировано, будет ли это работать, поскольку это довольно уникальный случай использования, но оно того стоит.
Также помните, что вы должны добавить все схемы URL в ваш проект во время сборки, и другого пути нет.
Отвечая на ваш вопрос, вы говорите, что хотите использовать несколько разных веб-сайтов (с разными идентификаторами клиентов), однако в примере кода это выглядит так, как будто вы просто хотите переключаться между разными средами разработки (prod и тестирования). Если это так, то я рекомендую вам взглянуть на этот ответ. Он содержит несколько полезных советов по управлению несколькими средами.