Как использовать один и тот же токен аутентифицированного пользователя между основным приложением iOS и его расширением общего доступа

У нас есть основное приложение, интегрированное с Firebase SDK. Пользователь входит в систему через основное приложение, используя электронную почту, Google или Facebook.

Теперь у нас реализовано расширение общего доступа, которое в идеале должно использовать один и тот же сеанс аутентификации внутри, чтобы данные можно было отправлять в Firebase с тем же пользователем, не запрашивая его повторный вход в систему через расширение.

Итак, кто-нибудь знает, как разделить сеанс аутентификации Firebase между основным приложением и расширением общего доступа?

  1. Либо мы отправили какой-то внутренний вызов основному приложению для выполнения действий Firebase, потому что в нем есть детали аутентификации.

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

  3. Или Firebase предоставляет какой-то способ сделать это,

Я не знаю, что осуществимо сверху. Я нашел метод signInWithCustomToken:completion:, но он не связан с тем, что я на самом деле ищу.


person Mrug    schedule 09.06.2017    source источник
comment
Любое обновление по этому поводу? встречаю такую ​​же ситуацию...   -  person JerryZhou    schedule 09.08.2019


Ответы (1)


Чтобы прочитать и сохранить из одного и того же набора NSUserDefaults, вам необходимо сделать следующее:

  1. В главном приложении выберите свой проект в навигаторе проектов.
  2. Выберите основное целевое приложение и перейдите на вкладку возможностей.
  3. Включите группы приложений (это будет взаимодействовать с порталом разработчика, так как он генерирует набор прав, соответствующий идентификатор приложения и т. д.).
  4. Создайте новый контейнер. Согласно справке, он должен начинаться с «group.», поэтому дайте ему имя, например, «group.myapp.test».
  5. Выберите цель расширения «Сегодня» и повторите этот процесс включения групп приложений. Не создавайте новую, а выберите эту вновь созданную группу, чтобы обозначить, что сегодняшнее расширение является членом группы.

Напишите в свой NSUserDefaults:

    // In this example I´m setting FirstLaunch value to true 
NSUserDefaults(suiteName: "group.myapp.test")!.setBool(true, forKey: "FirstLaunch")

Чтение из NSUserDefaults:

// Getting the value from FirstLaunch
let firstLaunch = NSUserDefaults(suiteName: "group.myapp.test")!.boolForKey("FirstLaunch")

if !firstLaunch  {
   ...
}
person Jasveer Singh    schedule 09.06.2017
comment
Сэр, на самом деле я знаю, как обмениваться данными между основным приложением и расширением. моя проблема заключается в использовании одного и того же сеанса аутентификации между основным приложением и расширением. - person Mrug; 09.06.2017
comment
У вас есть какой-либо токен аутентификации для него? Если нет, то вы можете напрямую сохранить свойство в пользовательских настройках по умолчанию, isUserAuthenticated и пропустить аутентификацию в расширении. Если у вас есть токен аутентификации, вы можете сохранить его в настройках пользователя по умолчанию и поделиться им с расширением, чтобы проверить, действителен ли токен. - person Jasveer Singh; 09.06.2017
comment
Это не решение. На самом деле я ищу способ поделиться сеансом Firebase между основным приложением и расширением. Пожалуйста, пройдите вопрос. - person Mrug; 09.06.2017