флаттер: сбой аутентификации по телефону-ОШИБКА: Неверный токен.. Попробуй еще раз позже

# #firebase #flutter

Вопрос:

Авторизация телефона Firebase работает в симуляторе, а не на реальном устройстве.

я уже создал ключ apn в developer.apple.com и добавьте это в firebase и включенный фоновый режим, а также проверьте выборку, процесс и фон.

Вот что выводит консоль:

 Runner[11345:2633540] GTMSessionFetcher invoking fetch callbacks, data {length = 252, bytes = 0x7b0a2020 22657272 6f72223a 207b0a20 ... 5d0a2020 7d0a7d0a }, error Error Domain=com.google.HTTPStatus Code=400 "(null)" UserInfo={data={length = 252, bytes = 0x7b0a2020 22657272 6f72223a 207b0a20 ... 5d0a2020 7d0a7d0a }, data_content_type=application/json; charset=UTF-8} 2021-10-29 22:07:22.273998 0300 Runner[11345:2633546] flutter: Invalid token. 2021-10-29 22:07:22.523814 0300 Runner[11345:2633540] [connection] nw_resolver_start_query_timer_block_invoke [C3.1] Query fired: did not receive all answers in time for www.googleapis.com:443  

Мой код флаттера выглядит следующим образом

 Futurelt;voidgt; verifyPhone() async {  await _auth.verifyPhoneNumber(  phoneNumber: _phoneNumber,  verificationCompleted: (PhoneAuthCredential credential) async {  await FirebaseAuth.instance.signInWithCredential(credential);  final snackBar = SnackBar(content: Text("Login Success"));  ScaffoldMessenger.of(context).showSnackBar(snackBar);  },  verificationFailed: (FirebaseAuthException e) {  print(e.message);  final snackBar =  SnackBar(content: Text("verificationFailed ${e.message}"));  ScaffoldMessenger.of(context).showSnackBar(snackBar);  },  codeSent: (String verficationId, int resendToken) {  setState(() {  codeSent = true;  verId = verficationId;  });  },  codeAutoRetrievalTimeout: (String verificationId) {  setState(() {  verId = verificationId;  });  },  timeout: Duration(seconds: 60),  );  }  

AppDelegate.swift

 import UIKit import Flutter import Firebase  @UIApplicationMain @objc class AppDelegate: FlutterAppDelegate {  override func application(  _ application: UIApplication,  didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?  ) -gt; Bool {  FirebaseApp.configure()  GeneratedPluginRegistrant.register(with: self)  return super.application(application, didFinishLaunchingWithOptions: launchOptions)  } }  

Подфайл

 # Uncomment this line to define a global platform for your project # platform :ios, '9.0' platform :ios, '10.0' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true'  project 'Runner', {  'Debug' =gt; :debug,  'Profile' =gt; :release,  'Release' =gt; :release, }  def flutter_root  generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__)  unless File.exist?(generated_xcode_build_settings_path)  raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first"  end   File.foreach(generated_xcode_build_settings_path) do |line|  matches = line.match(/FLUTTER_ROOT=(.*)/)  return matches[1].strip if matches  end  raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" end  require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)  flutter_ios_podfile_setup  target 'Runner' do  use_frameworks!  use_modular_headers!   flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) end  post_install do |installer|  installer.pods_project.targets.each do |target|  flutter_additional_ios_build_settings(target)  end end  

Info.plist

 lt;?xml version="1.0" encoding="UTF-8"?gt; lt;!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"gt; lt;plist version="1.0"gt; lt;dictgt;  lt;keygt;CFBundleDevelopmentRegionlt;/keygt;  lt;stringgt;$(DEVELOPMENT_LANGUAGE)lt;/stringgt;  lt;keygt;CFBundleDisplayNamelt;/keygt;  lt;stringgt;DOTHawalalt;/stringgt;  lt;keygt;CFBundleExecutablelt;/keygt;  lt;stringgt;$(EXECUTABLE_NAME)lt;/stringgt;  lt;keygt;CFBundleIdentifierlt;/keygt;  lt;stringgt;$(PRODUCT_BUNDLE_IDENTIFIER)lt;/stringgt;  lt;keygt;CFBundleInfoDictionaryVersionlt;/keygt;  lt;stringgt;6.0lt;/stringgt;  lt;keygt;CFBundleLocalizationslt;/keygt;  lt;arraygt;  lt;stringgt;enlt;/stringgt;  lt;stringgt;falt;/stringgt;  lt;stringgt;arlt;/stringgt;  lt;/arraygt;  lt;keygt;CFBundleNamelt;/keygt;  lt;stringgt;dot_exchangelt;/stringgt;  lt;keygt;CFBundlePackageTypelt;/keygt;  lt;stringgt;APPLlt;/stringgt;  lt;keygt;CFBundleShortVersionStringlt;/keygt;  lt;stringgt;$(FLUTTER_BUILD_NAME)lt;/stringgt;  lt;keygt;CFBundleSignaturelt;/keygt;  lt;stringgt;????lt;/stringgt;  lt;keygt;CFBundleURLTypeslt;/keygt;  lt;arraygt;  lt;dictgt;  lt;keygt;CFBundleTypeRolelt;/keygt;  lt;stringgt;Editorlt;/stringgt;  lt;keygt;CFBundleURLSchemeslt;/keygt;  lt;arraygt;  lt;stringgt;com.googleusercontent.apps.768659512914-kgtssn20sbm0ioj47dnp8ekcgsgou7b8lt;/stringgt;  lt;/arraygt;  lt;/dictgt;  lt;/arraygt;  lt;keygt;CFBundleVersionlt;/keygt;  lt;stringgt;$(FLUTTER_BUILD_NUMBER)lt;/stringgt;  lt;keygt;LSApplicationQueriesSchemeslt;/keygt;  lt;arraygt;  lt;stringgt;httpslt;/stringgt;  lt;stringgt;httplt;/stringgt;  lt;/arraygt;  lt;keygt;LSRequiresIPhoneOSlt;/keygt;  lt;true/gt;  lt;keygt;NSAppTransportSecuritylt;/keygt;  lt;dictgt;  lt;keygt;NSAllowsArbitraryLoadslt;/keygt;  lt;true/gt;  lt;/dictgt;  lt;keygt;UIBackgroundModeslt;/keygt;  lt;arraygt;  lt;stringgt;fetchlt;/stringgt;  lt;stringgt;processinglt;/stringgt;  lt;stringgt;remote-notificationlt;/stringgt;  lt;/arraygt;  lt;keygt;UILaunchStoryboardNamelt;/keygt;  lt;stringgt;LaunchScreenlt;/stringgt;  lt;keygt;UIMainStoryboardFilelt;/keygt;  lt;stringgt;Mainlt;/stringgt;  lt;keygt;UISupportedInterfaceOrientationslt;/keygt;  lt;arraygt;  lt;stringgt;UIInterfaceOrientationPortraitlt;/stringgt;  lt;stringgt;UIInterfaceOrientationLandscapeLeftlt;/stringgt;  lt;stringgt;UIInterfaceOrientationLandscapeRightlt;/stringgt;  lt;/arraygt;  lt;keygt;UISupportedInterfaceOrientations~ipadlt;/keygt;  lt;arraygt;  lt;stringgt;UIInterfaceOrientationPortraitlt;/stringgt;  lt;stringgt;UIInterfaceOrientationPortraitUpsideDownlt;/stringgt;  lt;stringgt;UIInterfaceOrientationLandscapeLeftlt;/stringgt;  lt;stringgt;UIInterfaceOrientationLandscapeRightlt;/stringgt;  lt;/arraygt;  lt;keygt;UIViewControllerBasedStatusBarAppearancelt;/keygt;  lt;false/gt; lt;/dictgt; lt;/plistgt;  

Ответ №1:

Создайте ключ apn в developer.apple.com и добавьте это в firebase. Затем в xcode добавьте схему URL — адреса и вставьте в нее обратный идентификатор клиента. Включите push-уведомление в настройках, включите фоновый режим и проверьте выборку, процесс и фон.

Отредактируйте и добавьте эти строки в свой список info.plist lt;keygt;FirebaseAppDelegateProxyEnabledlt;/keygt; lt;false/gt;

и в коде добавьте

 FirebaseMessaging.instance.getToken().then((token) {  print('$token'); });  

просто чтобы проверить, получаете ли вы токен так, как ожидалось.

Комментарии:

1. Я сделал все, чтобы в лесном выпуске все работало, но после этого остановилось и показало мне эту ошибку

2. Вы также добавили тип URL-адреса в раздел «Информация»?

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

4. Вы установили коды в appdeligate.swift? Было бы полезно, если бы вы могли опубликовать делегат приложения, файл модуля и info.plist, а также скриншот Xcode, показывающий возможности

5. да, я все сделал

Ответ №2:

Я столкнулся с точно такой же проблемой и решил ее.

  1. Прежде всего, убедитесь, что firebase_messaging это указано в разделе pubspec.yaml .
  2. Если вы установите параметр для Info.plist lt;keygt;FirebaseAppDelegateProxyEnabledlt;/keygt; lt;false/gt; , это будет решено путем добавления этой реализации ios/Runner/AppDelegate.swift . (или, возможно, просто удалить lt;keygt;FirebaseAppDelegateProxyEnabledlt;/keygt; lt;false/gt; из Info.plist, это будет решено просто.)
 import UIKit import Flutter import FirebaseMessaging  @UIApplicationMain @objc class AppDelegate: FlutterAppDelegate {  override func application(  _ application: UIApplication,  didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?  ) -gt; Bool {  GeneratedPluginRegistrant.register(with: self)  return super.application(application, didFinishLaunchingWithOptions: launchOptions)  } }  // 👇 this block  override func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {  // NOTE: For logging  // let deviceTokenString = deviceToken.reduce("", {$0   String(format: "X", $1)})  // print("==== didRegisterForRemoteNotificationsWithDeviceToken ====")  // print(deviceTokenString)  Messaging.messaging().apnsToken = deviceToken  } }