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

时间:2016-08-30 17:42:15

标签: ios swift google-signin clientid

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

问题是有多个网站,每个网站都有不同的客户ID。

我试图更改以编程方式存储CLIENT_ID的.plist,但它无法运行:

@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 个答案:

答案 0 :(得分:0)

文档说明如下:

  

如果在创建配置文件时未添加其他服务,则无需将其复制到项目中。但是,请保留配置文件,因为它包含设置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方案添加到项目中,没有其他办法。

根据您的问题,您说您想要使用多个不同的网站(具有不同的客户端ID),但是在代码示例中,您似乎只想在不同的开发环境(prod和测试)之间切换。如果是这种情况,那么我建议你看一下this answer。它提供了一些有关管理多个环境的有用提示。