在运行时更改客户端ID,Google登录

问题描述:

我正在使用iOS应用程序,它应该使用我们网站上的API。 为了连接到它,用户应该从设备登录到他的谷歌帐户,然后我们自动连接到API。我们使用https://developers.google.com/identity/sign-in/ios/start-integrating 进行授权在运行时更改客户端ID,Google登录

问题是存在多个网站,并且每个网站都有不同的客户端ID。

我试图改变的.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) 
} 

也许有人知道,是它甚至有可能吗?

文档说以下内容:

如果您在创建配置文件并没有增加额外的服务,你不需要把它复制到你的项目。但是,请保留配置文件,因为它包含您需要设置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方案添加到您的项目中,并且没有其他方法。


从你的问题,你说你要在它的外观代码示例但是使用多个不同的网站(与不同的客户端ID的)像你只是想一个不同的开发环境(PROD和测试)之间切换。如果是这种情况,那么我建议你看看this answer。它提供了一些关于管理多个环境的有用技巧。