Ошибка аутентификации firebase: "параметр данных равен нулю" при вызове getidtokenforcingrefresh

Я использую Firebase UI для iOS, чтобы войти в свое приложение через Google или Facebook. Я только что обновил стручки до этих версий:

Installing FBSDKCoreKit 4.31.1 (was 4.31.0)
Installing FBSDKLoginKit 4.31.1 (was 4.31.0)
Installing Fabric 1.7.6 (was 1.7.5)
Installing Firebase 4.12.0 (was 4.9.0)
Installing FirebaseAnalytics 4.1.0 (was 4.0.9)
Installing FirebaseAuth 4.6.0 (was 4.4.3)
Installing FirebaseCore 4.0.19 (was 4.0.15)
Installing FirebaseInstanceID 2.0.10 (was 2.0.9)
Installing FirebaseMessaging 2.2.0 (was 2.1.0)
Installing FirebaseUI 4.5.5 (was 4.5.1)
Installing GTMSessionFetcher 1.1.15 (was 1.1.14)

Но теперь при вызове getIDTokenForcingRefresh выдает ошибку. Вот ошибка:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'data parameter is nil'

В этой части GTMSessionFetcher

- (void)invokeFetchCallbacksOnCallbackQueueWithData:(GTM_NULLABLE NSData *)data
                                              error:(GTM_NULLABLE NSError *)error {
  // Callbacks will be released in the method stopFetchReleasingCallbacks:
  GTMSessionFetcherCompletionHandler handler;
  @synchronized(self) {
    GTMSessionMonitorSynchronized(self);

    handler = _completionHandler;

    if (handler) {
      [self invokeOnCallbackQueueUnlessStopped:^{
        handler(data, error); // <-- Error appends here (data is nil)

        // Post a notification, primarily to allow code to collect responses for
        // testing.
        //
        // The observing code is not likely on the fetcher's callback
        // queue, so this posts explicitly to the main queue.
        NSMutableDictionary *userInfo = [NSMutableDictionary dictionary];
        if (data) {
          userInfo[kGTMSessionFetcherCompletionDataKey] = data;
        }
        if (error) {
          userInfo[kGTMSessionFetcherCompletionErrorKey] = error;
        }
        [self postNotificationOnMainThreadWithName:kGTMSessionFetcherCompletionInvokedNotification
                                          userInfo:userInfo
                                      requireAsync:NO];
      }];
    }
  }  // @synchronized(self)
}

А вот мой код:

func authUI(_ authUI: FUIAuth, didSignInWith authDataResult: AuthDataResult?, error: Error?) {
        if let error = error {
            print(error)
            return
        }
        if let authDataResultUser = authDataResult?.user {
            authDataResultUser.getIDTokenForcingRefresh(true) { idToken, error in
                if error != nil {
                    print()
                    return
                }
                // .....
            }
        }
    }

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

JaredH 11.04.2018 22:59

Да это случилось с обновлением.

Xavier Bauquet 12.04.2018 09:14

Я могу воспроизвести это сейчас с любой формой getIDToken, см. gist.github.com/rromanchuk/8917d4ce212951dd03b85501faac6a44

Ryan Romanchuk 19.04.2018 05:40

Вот последний повторно открытый тикет по проблеме github.com/firebase/firebase-ios-sdk/issues/1140

Ryan Romanchuk 19.04.2018 05:43
2
4
378
2

Ответы 2

Это ошибка Firebase iOS SDK, и теперь проблема исправлена. Исправление будет выпущено как 4.12.1 согласно здесь. Ссылка также содержит инструкции по обходным путям до выхода релиза.

В качестве альтернативы, если вы хотите, чтобы ваши стручки:

Я могу успешно использовать приведенные ниже версии в своем проекте. У меня были небольшие проблемы с привязкой всех конкретных версий библиотек Firebase в моем Podfile, и вместо этого мне пришлось использовать файл .lock. Я могу успешно использовать приведенные ниже версии в своем проекте. Если вы запустите pod install, Cocoapods разрешит зависимости для всего, чего нет в вашем Podfile.lock. Согласно Cocoapods документы,

For pods listed in the Podfile.lock, it downloads the explicit version listed in the Podfile.lock without trying to check if a newer version is available

Я предлагаю попробовать заменить ссылки на Firebase в вашем Podfile.lock на следующие, пока эта проблема не будет решена командой Firebase SDK:

PODS:
  - Firebase/Auth (4.8.2):
    - Firebase/Core
    - FirebaseAuth (= 4.4.2)
  - Firebase/Core (4.8.2):
    - FirebaseAnalytics (= 4.0.9)
    - FirebaseCore (= 4.0.14)
  - Firebase/Database (4.8.2):
    - Firebase/Core
    - FirebaseDatabase (= 4.1.4)
  - Firebase/DynamicLinks (4.8.2):
    - Firebase/Core
    - FirebaseDynamicLinks (= 2.3.2)
  - Firebase/Firestore (4.8.2):
    - Firebase/Core
    - FirebaseFirestore (= 0.10.0)
  - Firebase/Messaging (4.8.2):
    - Firebase/Core
    - FirebaseMessaging (= 2.0.8)
  - Firebase/Performance (4.8.2):
    - Firebase/Core
    - FirebasePerformance (= 1.1.1)
  - Firebase/Storage (4.8.2):
    - Firebase/Core
    - FirebaseStorage (= 2.1.2)
  - FirebaseAnalytics (4.0.9):
    - FirebaseCore (~> 4.0)
    - FirebaseInstanceID (~> 2.0)
    - "GoogleToolboxForMac/NSData+zlib (~> 2.1)"
    - nanopb (~> 0.3)
  - FirebaseAuth (4.4.2):
    - FirebaseAnalytics (~> 4.0)
    - "GoogleToolboxForMac/NSDictionary+URLArguments (~> 2.1)"
    - GTMSessionFetcher/Core (~> 1.1)
  - FirebaseCore (4.0.14):
    - "GoogleToolboxForMac/NSData+zlib (~> 2.1)"
  - FirebaseDatabase (4.1.4):
    - FirebaseAnalytics (~> 4.0)
    - FirebaseCore (~> 4.0)
    - leveldb-library (~> 1.18)
  - FirebaseDynamicLinks (2.3.2):
    - FirebaseAnalytics (~> 4.0)
  - FirebaseFirestore (0.10.0):
    - FirebaseAnalytics (~> 4.0)
    - FirebaseCore (~> 4.0)
    - gRPC-ProtoRPC (~> 1.0)
    - leveldb-library (~> 1.18)
    - Protobuf (~> 3.1)
  - FirebaseInstanceID (2.0.8):
    - FirebaseCore (~> 4.0)
  - FirebaseMessaging (2.0.8):
    - FirebaseAnalytics (~> 4.0)
    - FirebaseCore (~> 4.0)
    - FirebaseInstanceID (~> 2.0)
    - GoogleToolboxForMac/Logger (~> 2.1)
    - Protobuf (~> 3.1)
  - FirebasePerformance (1.1.1):
    - FirebaseAnalytics (~> 4.0)
    - FirebaseInstanceID (~> 2.0)
    - FirebaseSwizzlingUtilities (~> 1.0)
    - GoogleToolboxForMac/Logger (~> 2.1)
    - "GoogleToolboxForMac/NSData+zlib (~> 2.1)"
    - GTMSessionFetcher/Core (~> 1.1)
    - Protobuf (~> 3.1)
  - FirebaseStorage (2.1.2):
    - FirebaseAnalytics (~> 4.0)
    - FirebaseCore (~> 4.0)
    - GTMSessionFetcher/Core (~> 1.1)
  - FirebaseSwizzlingUtilities (1.0.0)
  - FirebaseUI (4.5.1):
    - FirebaseUI/All (= 4.5.1)
  - FirebaseUI/All (4.5.1):
    - FirebaseUI/Auth
    - FirebaseUI/Database
    - FirebaseUI/Facebook
    - FirebaseUI/Firestore
    - FirebaseUI/Google
    - FirebaseUI/Phone
    - FirebaseUI/Storage
    - FirebaseUI/Twitter
  - FirebaseUI/Auth (4.5.1):
    - Firebase/Auth (~> 4.2)
  - FirebaseUI/Database (4.5.1):
    - Firebase/Database (~> 4.0)
  - FirebaseUI/Facebook (4.5.1):
    - FBSDKLoginKit (~> 4.0)
    - FirebaseUI/Auth
  - FirebaseUI/Firestore (4.5.1):
    - Firebase/Firestore
  - FirebaseUI/Google (4.5.1):
    - FirebaseUI/Auth
    - GoogleSignIn (~> 4.0)
  - FirebaseUI/Phone (4.5.1):
    - FirebaseUI/Auth
  - FirebaseUI/Storage (4.5.1):
    - Firebase/Storage (~> 4.0)
    - SDWebImage (~> 4.0)
  - FirebaseUI/Twitter (4.5.1):
    - FirebaseUI/Auth
    - TwitterKit (~> 3.0)

Похоже, Firebase нашла обходной путь. Если вы запустите pod install, несколько библиотек будут переведены на более раннюю версию:

Installing Firebase 4.5.0 (was 4.12.0)
Installing FirebaseAnalytics 4.0.4 (was 4.1.0)
Installing FirebaseAuth 4.3.1 (was 4.6.0)
Installing FirebaseCore 4.0.10 (was 4.0.19)
Installing FirebaseMessaging 2.0.6 (was 2.2.0)

После этого он снова работает.

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