2014-11-22 116 views
3

我正在編寫iOS應用程序以通過電子郵件共享網頁鏈接,並且作爲其中的一部分,我希望用戶能夠登錄Google plus。我有使用說明,包含應用程序工作正常,從這裏開始:Google plus登錄xcode共享擴展

https://developers.google.com/+/mobile/ios/sign-in

,現在我想添加共享擴展,還可以訪問用戶的谷歌+個人資料。我開始嘗試將登錄按鈕添加到共享擴展中,但我認爲這不會起作用,因爲點擊按鈕後,您將從應用程序中移出瀏覽器以接受權限,然後沒有辦法重定向到共享擴展(或者至少我看不到方法)。

我現在希望的是,用戶可以在主(含)應用程序中登錄和接受權限,但之後再使用共享擴展,並仍然使用相同的配置文件登錄。我使用的共享擴展自定義的UIViewController,並作爲第一次嘗試,我試圖用同一個客戶端ID在共享擴展爲包括應用程序,並在viewDidLoad方法調用這個:

GPPSignIn *signIn = [GPPSignIn sharedInstance]; 
signIn.shouldFetchGooglePlusUser = YES; 
signIn.shouldFetchGoogleUserEmail = YES; 
signIn.clientID = kClientID; 
signIn.scopes = @[ @"profile" ]; 
signIn.delegate = self; 
if ([signIn hasAuthInKeychain]) { 
    NSLog(@"Has auth in keychain"); 
} else { 
    NSLog(@"No auth in keychain"); 
} 
包含應用程序hasAuthInKeychain中的

返回true,但在共享擴展中它是錯誤的。我使用的客戶端ID綁定到主應用程序包,所以我不確定我是否應該能夠在共享擴展中使用它,但是如果我嘗試爲共享創建單獨的客戶端ID那麼推測大概我需要再次通過授權過程?

有沒有一種方法可以從主應用程序訪問現有的身份驗證令牌並在共享擴展中使用它?

回答

0

你在正確的軌道上。

要在應用程序和擴展程序中訪問相同的鑰匙串,您需要在Xcode中爲它們啓用「鑰匙串共享」功能。當你這樣做時,Xcode可能會想要更新你的應用ID和配置文件,因爲它們需要反映新的功能。

這是否足夠取決於Google框架如何處理鑰匙串。它的可能是所有你需要的,因爲作爲docs for SecItemAdd indicate,項目將默認添加到第一個列出的組。但我不知道谷歌的代碼如何工作,所以我不能確定這一點。

一旦你這樣做,你可能不得不重新授權應用程序,以獲得憑證進入正確的組。然後,應用程序和擴展程序都可以查找現有的值。

+0

我必須註冊蘋果的開發者計劃才能檢查出來,但一旦照顧好了,我就可以使用相同的鑰匙串組名稱嚮應用程序和擴展程序添加鑰匙串共享功能。然後,我只需確保我在兩個地方使用的GPPSignIn對象具有相同的鑰匙串名稱集: 'signIn.keychainName = @「signinchainname」' 然後hasAuthInKeychain返回true。如果我然後使用trySilentAuthentication,我可以得到一個auth對象。 感謝您的幫助! – 2014-12-03 21:40:53