Получить пользователя Google из расширения IOS
Я пытаюсь создать расширение общего доступа для своего приложения, которое требует входа в Google из расширения. Я настроил брелок для группы совместного использования и могу писать из основного приложения и читать цель расширения. Но я не могу войти в Google с расширением, потому что GIDSignIn.sharedInstance().hasAuthInKeychain()
всегда возвращает ложь.
Есть ли способ войти в Google с расширением и как мне это сделать? Любая помощь будет оценена.
3 ответа
1. В Bridging-Header.h
import <GoogleSignIn/GoogleSignIn.h>
import <Google/Core.h>
2. В AppDelegate.swift
import Google
В application:didFinishLaunchingWithOptionslaunchOptions:
настроить GGLContext
объект:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
var configureError: NSError?
GGLContext.sharedInstance().configureWithError(&configureError)
assert(configureError == nil, "Error configuring Google services: \(configureError)")
GIDSignIn.sharedInstance().clientID = "client id"
GIDSignIn.sharedInstance.shouldFetchBasicProfile = true
GIDSignIn.sharedInstance().delegate = self
}
Затем добавьте GIDSignInButton
просмотр вашего приложения.
Наконец, в контроллере представления реализуйте signIn:didSignInForUser:
метод делегата, который будет вызван, когда кнопка входа tapped:
при авторизации приложения.
- (void)signIn:(GIDSignIn *)signIn
didSignInForUser:(GIDGoogleUser *)user
withError:(NSError *)error {
// Perform any operations on signed in user here.
// ...
}
3. Обмен учетными данными между приложениями / расширениями
При входе в Google Framework придется использовать собственные методы iOS, чтобы добавить новые учетные данные в связку ключей iOS. Таким образом, они будут использовать SecItemAdd(_:_:)
метод, который добавит один или несколько элементов в цепочку для ключей.
Чтобы получить доступ к одному и тому же элементу цепочки для ключей как в приложении, так и в расширении, вам необходимо включить "Совместное использование цепочки для ключей" как для приложения, так и для расширения в разделе "Возможности XCode " в настройках вашего проекта. Когда вы сделаете это, Xcode, вероятно, захочет обновить идентификатор вашего приложения и профили обеспечения, поскольку они должны отражать эту новую возможность. Вам, вероятно, придется повторно авторизовать приложение (шаг 2), чтобы ввести учетные данные в нужную группу.
Документация Apple четко гласит:
Если вы хотите, чтобы новый элемент цепочки для ключей был общим для нескольких приложений, включите ключ kSecAttrAccessGroup в словарь атрибутов. Значение этого ключа должно быть именем группы доступа цепочки для ключей, к которой принадлежат все программы, которые будут совместно использовать этот элемент.
Когда вы используете XCode для создания приложения, XCode добавляет право идентификатора приложения в комплект приложения. Keychain Services использует это право для предоставления приложению доступа к своим собственным элементам цепочки для ключей. Вы также можете добавить разрешение keychain-access-groups к приложению и в файле списка свойств полномочий указать массив групп доступа Keychain, к которым принадлежит приложение.
4. Дополнительные подсказки от Google, которые я не упомянул выше.
Пожалуйста, смотрите "Вход в Google для iOS". Вот пример кода для использования GIDSignIn
:
- Получить ссылку на
GIDSignIn
общий экземпляр:GIDSignIn *signIn = [GIDSignIn sharedInstance];
- Установите области OAuth 2.0, которые вы хотите запросить:
[signIn setScopes:[NSArray arrayWithObject:@"https://www.googleapis.com/auth/plus.login"]];
- Вызов
[signIn setDelegate:self];
- Установить метод делегата
signIn:didSignInForUser:withError:
, - Вызов
handleURL
на общем экземпляре изapplication:openUrl:
... в вашем приложении делегат. - Вызов
signIn
на общем экземпляре;
Нет ответа до сих пор. Наконец-то я переписал логин Google с помощью фреймворка Aerogear. Теперь я могу войти как из основной цели, так и из расширения. Это также решает эту проблему выхода из Google.
Для этого нужно включить Keychain Sharing
в панели "Возможности" вашего проекта. Это позволит как расширению, так и основному приложению совместно использовать пароль.
Документация Apple по обмену ключами находится здесь.