[FirebaseAuth]OAuthProvider.credential()のParamAuthProviderIDにエラーが発生する
エラー内容
Firebase Authenticator を利用して、AppleID でのログイン処理の中で OAuthProvider.credential()
を利用する必要がある。
しかし OAuthProvider.credential()
の引数で providerID
が要求されるため、 "apple.com"
を渡すと、以下のエラーが発生する。
(AuthProviderID
へのキャストをしてもエラーが解消されない。)
Cannot convert value of type 'String' to expected argument type 'AuthProviderID'
let credential = OAuthProvider.credential(
providerID: "apple.com",
idToken: tokenString,
rawNonce: nonce,
accessToken: nil
)
エラー原因
不明です。ChatGPTに質問すると以下の回答が返ってきましたのでキャストしてみたのですが、エラーが解消されることはありませんでした。
もっとよく調べれば分かりそうですが、そこまで重要ではないので時間があったら調べる予定です。
AuthProviderID は、String の型エイリアス(alias)ですが、Swiftの型推論で「String ではなく AuthProviderID 型として明示的に渡す」必要があるケースがあることがあります。
つまり、"apple.com" は String リテラルなので、AuthProviderID 型に明示的に変換(キャスト)しないとエラーになることがあります。
解決策
FirebaseAuth Framework Reference AuthProviderID をみると、AuthProviderID
には static var apple: Self
のような 静的プロパティ が定義されているようです(これは Firebase SDK のバージョンによって異なりますが、Firebase 10以降の FirebaseAuth では一般的とのこと)。
その定義を利用すればいいみたいです。
そのため providerID
に .apple
を設定することで解決。
let credential = OAuthProvider.credential(
providerID: .apple,
idToken: tokenString,
rawNonce: nonce,
accessToken: nil
)
Discussion