Firebase Phone Auth не работает в флаттере ни в симуляторе iOS, ни в реальном устройстве - PullRequest
1 голос
/ 29 января 2020

Я пытался и искал различные методы, чтобы заставить Firebase Phone Auth работать в моем приложении. (Существует открытая проблема , в которой говорится о конфликтах между Firebase Cloud Messaging и Firebase Phone Auth, но я не уверен, что моя проблема связана с этим. Я использую Firebase Cloud Messaging, который прекрасно работает.).

В iOS симуляторе всякий раз, когда я вызываю FirebaseAuth.instance.verifyPhoneNumber, мое приложение открывает веб-страницу для рабочего процесса reCAPTCHA и возвращается обратно в приложение. Затем я вижу журналы ошибок, как показано ниже в verificationFailed обратном вызове. (Ожидается, что поток reCAPTCHA будет следовать для iOS Simulator согласно Проверка подлинности телефона Firebase c)

flutter: Instance of 'AuthException'
flutter: {"error":{"code":403,"message":"Requests from this ios client application <empty> are blocked.","errors":[{"message":"Requests from this ios client application <empty> are blocked.","domain":"global","reason":"forbidden"}],"status":"PERMISSION_DENIED"}}

Подозрительно, что сообщение об ошибке использует <empty> в качестве имя моего приложения вместо моего реального имени приложения (или имени приложения по умолчанию для firebase, которое __FIRAPP_DEFAULT), но я не уверен, почему это происходит.

В реальном iOS устройстве , всякий раз, когда Я звоню FirebaseAuth.instance.verifyPhoneNumber, приложение снова вызывает обратный вызов verificationFailed, и я получаю ошибку с verifyPhoneNumberError в качестве кода и Token mismatch в качестве сообщения об ошибке. Это происходит как в отладочной, так и в сборочной версии.

Я использую следующие версии SDK и библиотеки.

  • Flutter SDK = 1.12.13 + hotfix.5
  • firebase_core = 0.4.3
  • firebase_auth = 0.15.4
  • firebase_messaging = 6.0.9

Кто-нибудь смог получить Firebase Auth Phone auth работает в iOS? Я застрял в этом состоянии неопределенности, потому что я не могу искать любую информацию в Интернете, связанную с этим. Я настроил iOS APN, GoogleService-info.plist, учетные данные Google Cloud до сих пор несколько раз, но безуспешно. (Учитывая, что Firebase Cloud Messaging работает отлично, я сомневаюсь, что это проблема с учетными данными или настройкой APN.)

1 Ответ

0 голосов
/ 02 февраля 2020

Отвечая на мой собственный вопрос, поскольку я выяснил причину root.

В Google Cloud Project, который подключен к Firebase, мне удалось найти набор API-ключей, созданных Firebase.

https://console.cloud.google.com/apis/credentials

Для каждого приложения, которое вы определяете и создаете в Firebase, автоматически создается новый ключ API в разделе ключей API. В моем случае, один был для ключа iOS (автоматически созданный Firebase) ', а другой для ключа Android (автоматически созданный Firebase) '.

Ну, по умолчанию, они не накладывают никаких ограничений, и вы видите желтый треугольник рядом с ключом. Поэтому я добавил ограничения к этим ключам, чтобы их можно было использовать только в моем приложении. Это делается путем установки Ограничения приложения с соответствующим идентификатором пакета для iOS и другим идентификатором приложения для Android на каждой странице сведений о ключах API.

Это ограничение фактически было причиной того, что Phone Auth не работает в моих приложениях. Как только я вернул изменение обратно на Нет , я больше не встречал Token mismatch или AuthException.

В идеале я должен ограничить использование этих ключей API только для своего приложения, но похоже, что мое приложение Flutter не может подтвердить свой идентификатор / appId / bundleId для служб Google, и Google отклоняет запросы от моего приложения. Наверное, поэтому я видел сообщение об ошибке Requests from this ios client application <empty> are blocked..

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...