実装したいこと
FirebaseでのTwitterログイン成功時に返ってきたresult?.additionalUserInfo?.profileからid, name, screen_nameを取得してFirestoreに保存する。
ドキュメント名はAuth.auth().currentUser!から取得したuidを使用。
問題点
下記コードを実行するとsetDataの部分で以下のようなエラーが出てクラッシュします。
Thread 1: Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value
uIDがnilになってしまってるのではと思い書き込みの直前でprintにて値を確認しましたがきちんと値は入っていました。
その他のエラーはありませんでした。
調べてみましたがlabelのOutlet接続がされてないパターンしか見つけることができず今回の件にはあまり関係がないように感じ解決方法を見つけれずにいます。
解決策をご教授いただけると幸いです。
書き込みたいデータ構造
users{ uID{ "ID": "displayName": "screenName": } … }
現在記述中のコード(2019/11/29最終更新)
swift
1 var provider: OAuthProvider? 2 var db: Firestore! 3 4 func signInWithTwitter(){ 5 provider!.getCredentialWith(nil) { credential, error in 6 if error != nil { 7 //Handleエラー 8 print("error") 9 return 10 } 11 if credential != nil { 12 Auth.auth().signIn(with: credential!) { (result, error) in 13 if error != nil { 14 //ログインエラー 15 print("error") 16 return 17 } 18 //アクセストークン・シークレットトークンをunwrap 19 let credential = result?.credential as? OAuthCredential 20 let accessToken = credential?.accessToken 21 let secretToken = credential?.secret 22 //Twitterアクセストークン・シークレットトークンの値を保存 23 UserDefaults.standard.set(accessToken, forKey:"twitterAccessToken") 24 UserDefaults.standard.set(secretToken, forKey:"twitterSecretToken") 25 26 //ユーザー別のDBを構築 27 let user = Auth.auth().currentUser! 28 let uID = user.uid 29 let userInfo = result?.additionalUserInfo?.profile 30 let twtrID = userInfo!["id"] as! Int 31 let displayName = userInfo!["name"] as! String 32 let screenName = userInfo!["screen_name"] as! String 33 self.db.collection("users").document(uID).setData([ 34 "ID": twtrID, 35 "displayName": displayName, 36 "screenName": screenName 37 ]) { err in 38 if let err = err { 39 print("Error writing document: (err)") 40 } else { 41 print("Document successfully written!") 42 //HomeViewControllerへtoMainを介して遷移 43 self.performSegue(withIdentifier: "toMain", sender: nil) 44 } 45 } 46 } 47 } 48 } 49 }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/01 21:36 編集
2019/12/02 00:23
2019/12/02 15:08