Изменение идентификатора клиента во время выполнения, вход через 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)
}

Может кто знает, это вообще возможно сделать?


person Nurlan Zhussupov    schedule 30.08.2016    source источник


Ответы (1)


В документации сказано следующее:

Если вы не добавили дополнительные службы при создании файла конфигурации, вам не нужно копировать его в свой проект. Однако сохраните файл конфигурации, так как он содержит информацию, необходимую для настройки проекта Xcode.

Если вы не используете дополнительные услуги, вы сможете уйти, не беспокоясь о plist (не то чтобы я уверен, что вы делаете с примером в вашем вопросе).

Прежде чем представить форму входа, вы можете попробовать что-то вроде следующего:

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 в свой проект во время сборки, и другого пути нет.


Из вашего вопроса вы говорите, что хотите использовать несколько разных веб-сайтов (с разными идентификаторами клиентов), однако в примере кода похоже, что вы просто хотите переключаться между разными средами разработки (производство и тестирование). Если это так, я рекомендую вам взглянуть на этот ответ. Он содержит несколько полезных советов по управлению несколькими средами.

person liamnichols    schedule 31.08.2016