🫠

[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'

Error Occur Block
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 を設定することで解決。

Error Occur Block
let credential = OAuthProvider.credential(
    providerID: .apple,
    idToken: tokenString,
    rawNonce: nonce,
    accessToken: nil
)

Discussion