Подтвердить что ты не робот

Извлечение пользователя google из расширения ios

Я пытаюсь создать расширение для моего приложения, которое требует входа в Google из расширения. Я установил цепочку ключей совместного доступа и могу писать из основного приложения и читать цель расширения. Но я не могу войти в Google из расширения, потому что GIDSignIn.sharedInstance().hasAuthInKeychain() всегда возвращает false.

Есть ли способ войти в Google с расширением и как это сделать? Любая помощь будет оценена по достоинству.

4b9b3361

Ответ 1

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, вам придется использовать собственные методы iOS для добавления новых учетных данных в Keychain iOS. Таким образом, они будут использовать метод SecItemAdd(_:_:), который добавит один или несколько элементов в цепочку ключей.

Чтобы получить доступ к одному и тому же объекту связки ключей как в приложении, так и в расширении, вам необходимо включить "Совместное использование ключей" для приложения и расширения из Xcode Capabilities в настройках вашего проекта. Когда вы это сделаете, Xcode, вероятно, захочет обновить ваши идентификаторы приложений и профили предоставления, поскольку они должны отражать эту новую возможность. Вероятно, вам придется повторно авторизовать приложение (шаг 2), чтобы получить учетные данные в нужную группу.

Документация Apple четко заявляет:

Если вы хотите, чтобы новый элемент keychain был разделен между несколькими приложений, включают ключ kSecAttrAccessGroup в атрибутах Словарь. Значение этого ключа должно быть именем связки ключей группа доступа, к которой относятся все программы, которые будут совместно использовать этот элемент принадлежат.

Когда вы используете Xcode для создания приложения, Xcode добавляет идентификатор приложения-идентификатора к набору приложений. Брелок Услуги используют это право, чтобы предоставить доступ к его собственные элементы связки ключей. Вы также можете добавить группы доступа к цепочке ключей право на подачу заявки и в списке прав собственности файла, укажите массив групп доступа к цепочке ключей, к которым приложение принадлежит.

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 для общего экземпляра;

Ответ 2

Для этого вам нужно включить Keychain Sharing в панели проекта "Возможности". Это позволит как расширению, так и главному приложению делиться паролем.

Документация Apple по совместному использованию ключей - здесь.

Ответ 3

Нет ответа до сих пор. Я, наконец, переписываю логин Google, используя Структуру Aerogear. Теперь я могу войти в систему как с главной целью, так и с целью расширения. Это также устранит проблему google logout.