質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
Firebase

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

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

Q&A

解決済

1回答

1021閲覧

FirestoreのDataBaseにAuthenticationに保存されているユーザー情報を保存したい。

退会済みユーザー

退会済みユーザー

総合スコア0

Firebase

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

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

0グッド

1クリップ

投稿2018/06/07 02:08

編集2018/06/07 10:17

前提・実現したいこと

FirestoreのDatabaseにAuthenticationに保存されているユーザー情報を保存したい。

開発環境

xcode 9.4
swift 4
SNSアプリを開発中

質問の詳細

現在、Swift4を使ってSNSアプリを作成しております。
FirestoreのDataBaseに投稿した内容を保存しているのですがその際、一緒にユーザー情報(displayName, photoURL, Uidなど)を保存しようとしています。

しかし、

let currentUser = Auth.auth().currentUser

を保存しようとすると

Unsupported type: FIRUser

というエラーが出てしまいます。

そのため、今は代わりにdisplayName, photoURL, Uidなどをそれぞれ別々に保存しております。

別々に保存することなく、ユーザー情報を保存することは可能でしょうか?

追記

  • 現在のコード
func postStrings() { let currentUser = Auth.auth().currentUser //保存するデータをセット let post: [String: Any] = [ "category": category!, "postUid": currentUser.uid, "postUserName": currentUser.displayName!, "postUserPhotoURL": currentUser.photoURL!, "placeName": placeName!, "singleWord": singleWord!, "createDate": self.date ] SVProgressHUD.show() self.defaultStore.collection("Post").addDocument(data: post) { (error) in if let error = error { SVProgressHUD.showError(withStatus: error.localizedDescription) SVProgressHUD.dismiss() } else { SVProgressHUD.dismiss() SVProgressHUD.showSuccess(withStatus: "投稿完了") //閉じる self.dismiss(animated: true, completion: nil) } } }

今、ユーザー名、ユーザーIdを別々のコレクションに保存しています。("postUid","postUserName","postUserPhotoURL")

  • やりたいこと

ユーザ情報をいちいち別々に保存することなく、まとめて「ユーザー情報」として保存したいです。
(ユーザー情報を同じコレクションに保存するイメージ)

userInfo |--uid |--displayName |--photoURL

また、以下のようにすると上記のエラーが出ます。(Unsupported type: FIRUser )

let post: [String: Any] = [ "userInfo": currentUser, ]

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

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

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

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

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

xenbeat

2018/06/07 09:29 編集

現状のソースコードを追記ください。 あと保存結果のイメージ(ドキュメントのフィールドがどのようになっているか)もあると回答しやすいかと思います。
退会済みユーザー

退会済みユーザー

2018/06/07 10:18

コメントありがとうございます。追記致しました。宜しくお願い致します。
guest

回答1

0

ベストアンサー

Unsupported type: FIRUser

その型がAPIでサポートされてないだけっぽいので
以下のようなStructを自分で定義して

Swift

1struct User { 2 var uid: String 3 var displayName: String 4 var photoURL: URL 5}

それをそのまま突っ込んだらうまくいかないですかね?

Swift

1let userStruct = User(uid: currentUser.uid, 2 displayName: currentUser.displayName!, 3 photoURL: currentUser.photoURL!) 4 5 6let post: [String: Any] = [ 7 "category": category!, 8 "userInfo": userStruct, 9 "placeName": placeName!, 10 "singleWord": singleWord!, 11 "createDate": self.date 12]

SwiftでFirestoreを扱ったことがないので、はずすかもしれないですが、要はAuth.auth().currentUserをそのまま突っ込もうとせずに、Structを突っ込めばうまくいくんじゃないかってことが言いたいです。

少しでも参考になれば幸いです。

追記1

Structでもうまくいかないようなのでdictionaryで試してみてください。

Swift

1let user: [String: Any] = [ 2 "uid": currentUser.uid, 3 "displayName": currentUser.displayName!, 4 "photoURL": currentUser.photoURL!, 5] 6 7let post: [String: Any] = [ 8 "category": category!, 9 "userInfo": user, 10 "placeName": placeName!, 11 "singleWord": singleWord!, 12 "createDate": self.date 13]
追記2

dictionaryで問題なくいけるはずです。
今更ですがAPI仕様を確認しました。
https://firebase.google.com/docs/reference/swift/firebasefirestore/api/reference/Classes/CollectionReference?hl=ja#/c:objc(cs)FIRCollectionReference(im)addDocumentWithData:

投稿2018/06/07 11:17

編集2018/06/11 14:05
xenbeat

総合スコア4258

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

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

退会済みユーザー

退会済みユーザー

2018/06/11 13:29

Structも対応してないみたいです、、、。
xenbeat

2018/06/11 13:55 編集

追記しました。
退会済みユーザー

退会済みユーザー

2018/06/11 16:08

問題なく保存ができました。 ご丁寧な対応、ありがとうございます。 ドキュメントを読むことの大切さを学びました、、、。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問