"Произошла ошибка при доступе к связке ключей"

Я использую плагин Firebase Auth для Flutter, чтобы войти в систему с помощью Google в своем приложении, и он отлично работает как на iOS, так и на Android.

Моя проблема начинается, когда я пытаюсь использовать Firebase Auth в моем iOS "Share Extension". Я новичок в iOS, поэтому я не очень хорошо знаком со Swift и Xcode, но, насколько я понимаю, я должен включить кросс-прикладную аутентификацию с помощью общей цепочки ключей iOS, чтобы аутентифицировать пользователя в моем общем расширении.

У меня есть 2 цели в моем проекте, "Runner" и "Share Extension", поэтому я включил Keychain Sharing для них обоих:

Когда совместное использование связки ключей включено, я получаю следующую ошибку, когда пытаюсь войти в систему с помощью Firebase Auth:

Unhandled Exception: PlatformException(ERROR_KEYCHAIN_ERROR, An error occurred when accessing the keychain. The @c NSLocalizedFailureReasonErrorKey field in the @c NSError.userInfo dictionary will contain more information about the error encountered, null)
#0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:569:7)
#1      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:321:33)
<asynchronous suspension>
#2      MethodChannel.invokeMapMethod (package:flutter/src/services/platform_channel.dart:349:48)
#3      MethodChannelFirebaseAuth.signInWithCredential (package:firebase_auth_platform_interface/src/method_channel_firebase_auth.dart:161:23)
#4      FirebaseAuth.signInWithCredential (package:firebase_auth/src/firebase_auth.dart:208:10)
#5      signInWithGoogle (package:matkonit/google_sign_in.dart:17:45)
<asynchronous suspension>
#6      LoginPageState.signInButton.<anonymous closure>.<anonymous clo<…>

Вот что я получаю, когда печатаю NSLocalizedFailureReasonErrorKey:

SecItemCopyMatching (-34018)

Что я могу сделать, чтобы это исправить?


Изменить: я заметил, что перезапуск симулятора заставляет войти в систему, но только иногда... Я не мог понять, почему.

2 ответа

Решение

Я не добавлял префикс Team ID перед своим App ID, поэтому это не сработало. Для этого вам потребуется учетная запись разработчика Apple и идентификатор группы, например:

Auth.auth().useUserAccessGroup("XK********.com.matkonit.SharedItems")

У меня это сработало, когда я установил «Apple Development» как CODE_SIGN_IDENTITY и выбрал свою личную учетную запись как DEVELOPMENT_TEAM.

Я также добавил это в DebugProfile.entitlements:

      <key>keychain-access-groups</key>
<array>
    <string>$(AppIdentifierPrefix)com.example</string>
</array>

Где «com.example» — это идентификатор пакета.

У меня есть бесплатная учетная запись разработчика, поэтому я использую этот пример с профилем отладки, но считаю, что это необходимо и при использовании профиля выпуска.

Другие вопросы по тегам