Изменить идентификатор клиента во время выполнения, войти в 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 и тестирования). Если это так, то я рекомендую вам взглянуть на этот ответ. Он содержит несколько полезных советов по управлению несколькими средами.

Другие вопросы по тегам