🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

869閲覧

【Firebase+Swift】iOS電話番号認証の仕方

Romay

総合スコア40

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2019/10/16 10:14

前提・実現したいこと

Swift+FirebaseでiOSアプリを開発しています。
Firebaseの電話番号認証でユーザー登録をしたいのですが、いくつかつまづいておりご教授いただきたいです。

はじめてSwiftを触っており、iOSに関してはかなり初心者であることご容赦ください。

発生している問題・エラーメッセージ

入力値の型の問題かと思うのですが、以下のエラーが出現します。

Cannot convert value of type 'UITextField?' to expected argument type 'String'
let phoneNumber = phoneTextField

とする際に、型を変更するべきなのかとも思いましたが調べてもあまりよくわかりませんでした。

該当のソースコード

以下ログイン画面です。
シンプルに、電話番号を入力し、「新規登録」ボタンを押すとFirebaseによる電話番号認証が始まりユーザー登録できるというフローです。

swift

1import UIKit 2import Firebase 3 4class LoginViewController: UIViewController { 5 6 @IBOutlet weak var phoneTextField: UITextField! 7 8 override func viewDidLoad() { 9 super.viewDidLoad() 10 self.phoneTextField.keyboardType = UIKeyboardType.numberPad 11 //数字キーボードをデフォルト表示 12 13 } 14 15 @IBAction func CreateNewUSer(_ sender: Any) { 16 17 //新規ユーザー登録 18 // Change language code to japanese. 19 Auth.auth().languageCode = "ja"; 20 21 let phoneNumber = phoneTextField 22     //ここで入力値の型のエラー出現 23 PhoneAuthProvider.provider().verifyPhoneNumber(phoneNumber, uiDelegate: nil) { (verificationID, error) in 24 if let error = error { 25 self.showMessagePrompt(message: "ErrorDescription (error.localizedDescription)") 26 return 27 } 28 // 確認IDをアプリ側で保持しておく 29 if let verificationID = verificationID { 30 print("verificationID (verificationID)") 31 UserDefaults.standard.authVerificationID = verificationID 32 } 33 } 34 35 36 37     guard let verificationID = UserDefaults.standard.authVerificationID else { 38 self.showMessagePrompt(message: "NoVerificationID") 39 return 40 } 41 let verificationCode = "123456" 42 let credential = PhoneAuthProvider.provider().credential(withVerificationID: verificationID, verificationCode: verificationCode) 43 Auth.auth().signInAndRetrieveData(with: credential) { (authResult, error) in 44 if let error = error { 45 self.showMessagePrompt(message: "ErrorDescription (error.localizedDescription)") 46 return 47 } 48 if let authResult = authResult { 49 self.showMessagePrompt(message: "AuthResult (authResult.user) (String(describing: authResult.additionalUserInfo))") 50 } 51 } 52 53 } 54 55 56 57 58} 59

試したこと

見よう見まねで以下の記事のコードを参考にしていましたが、どこにこのコードを書くべきかわからずうまく進んでおりません。
iOSで電話番号認証を行う方法

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

型が合っていません。
verifyPhoneNumberの第一引数はStringにも関わらず、UITextField型を渡しています。
以下のようにUITextFieldに入力されたTextを取得してください。

Swift

1let phoneNumber = phoneTextField.text ?? ""

※ UITextFieldのtextはOptionalのため、nilであれば空文字を返すようにしています。

投稿2019/10/16 16:41

nakasho_dev

総合スコア2655

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Romay

2019/10/19 12:55

ありがとうございます!アドバイスいただいた点を変更し、こちらのエラーは解消されました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問