🎄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++と共存することが意図されています

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Q&A

解決済

2回答

2675閲覧

プロフィール写真をFIrebaseにユーザー情報と紐付けて、アップロードしたい(Swift)

rea_sna

総合スコア32

Firebase

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

iOS

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

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

0グッド

0クリップ

投稿2020/01/06 03:20

前提・実現したいこと

Swiftの初心者です。
Firebaseを使ったアプリを開発していますが、プロフィール編集画面で自分のプロフィール写真を端末上から指定して、Firebaseにアップロードし、
必要な画面でプロフィール写真を読み込みたいと考えています。

発生している問題

しかし、写真のアップロードの仕方やFirebase側の設定もよくわからず、どうしていいかわかりません。。。

以下が該当部分のストーリーボードのキャプチャです。
イメージ説明
【写真①】 今、UIImageViewがある部分にプロフィール写真、右の「NAME」の部分に、ニックネームを表示させたいです。
イメージ説明
【写真②】 【写真①】の右上の「編集」を押した先がこの画面です。「ニックネーム」の部分に自分のニックネームを入力してもらい、プロフィール写真をアップロードしてもらうボタン?を付けたいと思っています。

該当のソースコード

写真1の部分です。

import UIKit import Firebase import GoogleSignIn import CryptoKit import AuthenticationServices import PKHUD class MyPageViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() } }

このようにまだ何も手をつけられていません。。。

写真2の部分です。

import UIKit class EditMyPageViewController: UIViewController { @IBOutlet weak var textView: UITextView! override func viewDidLoad() { super.viewDidLoad() //枠のカラー textView.layer.borderColor = UIColor.black.cgColor //枠の幅 textView.layer.borderWidth = 1.0 } }

試したこと

ネット上で記事を探しましたが、見つからず...

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

Xcode:11.3

よろしくお願い致します。

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

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

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

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

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

s.m_1

2020/01/09 11:58

ネット上には関連する記事がたくさん転がっているかと思います. どのようにして Google で検索したのか分かりませんが,[swift firebase 写真 アプロード] で検索しましたか?
guest

回答2

0

2重に投稿してしまったので、以下の「解決済」をご確認ください。

投稿2020/08/03 04:05

編集2020/08/03 04:08
rea_sna

総合スコア32

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

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

0

自己解決

プロバイダーの写真を取得するように、仕様を変更しました。

<追記 2020/08/03>
以下のように仕様を変更しました。
プロフィール写真はファイル名にユーザー識別子(user!.uid)をつけ、FirebaseStorageにアップ。

Swift

1// カメラロールから写真を選ぶ 2 func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { 3 4 dismiss(animated: true, completion: nil) 5 //保存のアラートを出す 6 let alert: UIAlertController = UIAlertController(title: "保存しますか?", message: "Want to save?", preferredStyle: UIAlertController.Style.alert) 7 8 // OKの場合 9 let defaultAction: UIAlertAction = UIAlertAction(title: "OK", style: UIAlertAction.Style.default, handler:{ 10 11 (action: UIAlertAction!) -> Void in 12 print("OK") 13 14 if let pickedImage = info[.originalImage] as? UIImage { 15 self.imageView.contentMode = .scaleAspectFit 16 self.imageView.image = pickedImage 17 } 18 19 self.upload() 20 self.SuccessAlert() 21 }) 22 23 //キャンセルの場合 24 let cancelAction: UIAlertAction = UIAlertAction(title: "キャンセル", style: UIAlertAction.Style.cancel, handler:{ 25 26 (action: UIAlertAction!) -> Void in 27 print("選択をキャンセルしました") 28 }) 29 30 31 alert.addAction(defaultAction) 32 alert.addAction(cancelAction) 33 34 35 self.present(alert, animated: true, completion: nil) 36 } 37 38 // Firebaseにアップロード 39 fileprivate func upload() { 40 41 let storageRef = Storage.storage().reference(forURL: "gs://XXXXXXXXXXXXXXXXXXX.appspot.com").child("users").child("profile").child("(user!.uid).jpg") 42 let metaData = StorageMetadata() 43 metaData.contentType = "image/jpg" 44 if let uploadData = self.imageView.image?.jpegData(compressionQuality: 0.3) { 45 storageRef.putData(uploadData, metadata: metaData) { (metadata , error) in 46 if error != nil { 47 print("error: (error!.localizedDescription)") 48 return 49 } 50 storageRef.downloadURL(completion: { (url, error) in 51 if error != nil { 52 print("error: (error!.localizedDescription)") 53 } 54 print("url: (url!.absoluteString)") 55 let changeRequest = self.firebaseAuth.currentUser?.createProfileChangeRequest() 56 if let photoURL = URL(string: url!.absoluteString){ 57 changeRequest?.photoURL = photoURL 58 } 59 changeRequest?.commitChanges { (error) in 60 // ... 61 } 62 63 }) 64 } 65 } 66 } 67 68 // 写真を選ぶのをキャンセル 69 func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { 70 dismiss(animated: true, completion: nil) 71 print("キャンセルされました") 72 } 73 74 75 func SuccessAlert() { 76 77 var errortitle = "Save complete." 78 var message = "Saved to camera roll." 79 var errorok = "OK" 80 81 errortitle = NSLocalizedString("Save complete.", comment: "") 82 message = NSLocalizedString("Saved to camera roll.", comment: "") 83 errorok = NSLocalizedString("OK", comment: "") 84 85 86 let alert: UIAlertController = UIAlertController(title: errortitle, message: message, preferredStyle: UIAlertController.Style.alert) 87 88 let defaultAction: UIAlertAction = UIAlertAction(title: errorok, style: UIAlertAction.Style.default, handler:{ 89 // ボタンが押された時の処理を書く(クロージャ実装) 90 (action: UIAlertAction!) -> Void in 91 print("OK") 92 }) 93 94 // ③ UIAlertControllerにActionを追加 95 alert.addAction(defaultAction) 96 97 // ④ Alertを表示 98 present(alert, animated: true, completion: nil) 99 100 }

投稿2020/02/22 14:06

編集2021/02/02 12:31
rea_sna

総合スコア32

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問