Вход в Google Plus для расширения общего доступа xcode

Я пишу приложение для iOS, чтобы делиться ссылками на веб-страницы по электронной почте, и в рамках этого я хочу, чтобы пользователи могли входить в Google Plus. У меня есть содержащее приложение, которое работает нормально, используя инструкции отсюда:

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

и теперь я пытаюсь добавить расширение общего доступа, которое также может получить доступ к профилю пользователя Google+. Я начал с попытки добавить кнопку входа в расширение общего доступа, но я не думаю, что это сработает, потому что после нажатия кнопки вы выходите из приложения в браузер, чтобы принять разрешения, а затем есть нет способа перенаправить обратно на расширение общего доступа (или, по крайней мере, я не вижу способа).

Теперь я надеюсь, что пользователь может войти и принять разрешения в основном (содержащем) приложении, но затем использовать расширение общего доступа и по-прежнему входить в систему с тем же профилем. Я использую пользовательский UIViewController в расширении общего ресурса, и в качестве первой попытки я попытался использовать тот же идентификатор клиента в расширении общего ресурса, что и содержащее приложение, и вызвать это в методе 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, но в расширении общего доступа — false. Идентификатор клиента, который я использую, привязан к пакету основного приложения, поэтому я не уверен, смогу ли я в любом случае использовать его в расширении общего ресурса, но если я попытаюсь создать отдельный идентификатор клиента для общего ресурса расширение, то, вероятно, мне нужно будет снова пройти процесс авторизации?

Есть ли способ получить доступ к существующему токену аутентификации из основного приложения и использовать его в расширении общего доступа?


person James Burke    schedule 22.11.2014    source источник


Ответы (1)


Вы на правильном пути.

Чтобы получить доступ к одной и той же цепочке ключей как в приложении, так и в расширении, вам необходимо включить возможность «Общий доступ к цепочке ключей» для обоих из них в Xcode. Когда вы сделаете это, Xcode, вероятно, захочет обновить идентификатор вашего приложения и профили подготовки, потому что они должны отражать новую возможность.

Однако достаточно ли этого, зависит от того, как инфраструктура Google обрабатывает связку ключей. Это вероятно все, что вам нужно, поскольку документы для SecItemAdd указывают, элементы будут добавлены в первую группу в списке по умолчанию. Но я не знаю, как работает код Google, поэтому не могу быть в этом уверен.

Как только вы это сделаете, вам, вероятно, придется повторно авторизовать приложение, чтобы получить учетные данные в нужной группе. Однако после этого и приложение, и расширение могут искать существующие значения.

person Tom Harrington    schedule 25.11.2014
comment
Мне пришлось зарегистрироваться в программе разработчиков Apple, чтобы проверить это, но как только об этом позаботились, я смог добавить возможность совместного использования цепочки для ключей как в приложение, так и в расширение с тем же именем группы цепочки для ключей. Затем мне просто нужно было убедиться, что объект GPPSignIn, который я использовал в обоих местах, имел одно и то же имя связки ключей: signIn.keychainName = @“signinchainname” И тогда hasAuthInKeychain возвращает true. Если я затем использую trySilentAuthentication, я могу получить объект аутентификации. Спасибо за вашу помощь! - person James Burke; 04.12.2014