2016-08-30 4 views
0

Я работаю над приложением iOS, которое должно использовать API с нашего сайта. Чтобы подключиться к нему, пользователь должен Войти в свою учетную запись google с устройства, а затем мы автоматически подключаемся к API. Мы используем https://developers.google.com/identity/sign-in/ios/start-integrating для авторизацииИзменить идентификатор клиента во время выполнения, Google Войти

Проблема в том, что существует более одного веб-сайта, и каждый из них имеет другой идентификатор клиента.

Я попытался изменить .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) 
} 

Может быть кто-нибудь знает, есть ли еще можно сделать?

ответ

0

В документации говорится следующее:

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


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