在运行时更改客户端ID, Google Sign in



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

问题是有多个网站,每个网站都有不同的客户端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),但在代码示例中,它看起来像你只是想在不同的开发环境(生产和测试)之间切换。如果是这样的话,我建议你看看这个答案。它提供了一些关于管理多个环境的有用技巧。

最新更新