2016-08-30 115 views
0

我正在使用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) 
} 

也許有人知道,是它甚至有可能嗎?

回答

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方案添加到您的項目中,並且沒有其他方法。


從你的問題,你說你要在它的外觀代碼示例但是使用多個不同的網站(與不同的客戶端ID的)像你只是想一個不同的開發環境(PROD和測試)之間切換。如果是這種情況,那麼我建議你看看this answer。它提供了一些關於管理多個環境的有用技巧。