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

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

詳細はこちら
Firebase

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

Swift

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

Q&A

解決済

1回答

1237閲覧

Firebase storageで downloadURL が 取得できない【Swift】【Firebase】

tomoya_ios

総合スコア6

Firebase

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

Swift

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

0グッド

0クリップ

投稿2019/09/09 17:01

前提

MessageKit + Firebaseのメッセージアプリを作成しています。

直面している問題

Firebase storageで downloadURL が 取得できない問題に直面しています。
処理の順番は以下の通りです。

  1. 録音ボタンを長押ししている間は録音し、長押しが終わった段階で停止
  2. 停止したらあらかじめ指定したローカルの保存先URLからファイルをFirebase storageにアップロード
  3. downloadURLを取得し、audioURLプロパティを持つメッセージデータを作成
  4. firestoreに保存
  5. snapchatでメッセージの変更・追加を取得して、メッセージオブジェクトを作成
  6. メッセージとしてユーザーに表示

今回は1~4までの部分を担当するメソッドで問題が起きています。
問題箇所は3の部分です。

AVFoundationFirebase ともにまだ慣れていない部分が多く、初歩的なミスかもしれませんがご回答頂けますと幸いです。

※抜粋(後半に該当コードを全て載せています) print("get url") print(url) // ここで nil がprintされます

エラー文

Failed to retrieve a download URL.

問題の箇所のコード

@objc func startRecording(_ sender: UILongPressGestureRecognizer) { let loacalURL = createLocalURL() if sender.state == .began { print("recording start") let session = AVAudioSession.sharedInstance() let settings = [AVFormatIDKey: Int(kAudioFormatMPEG4AAC), AVSampleRateKey: 44100, AVNumberOfChannelsKey: 2, AVEncoderAudioQualityKey: AVAudioQuality.high.rawValue] try! session.setCategory(AVAudioSession.Category.playAndRecord, mode: .default, options: .defaultToSpeaker) try! session.setActive(true, options: .notifyOthersOnDeactivation) audioRecorder = try! AVAudioRecorder(url: loacalURL, settings: settings) audioRecorder.delegate = self audioRecorder.record() } else if sender.state == .ended { audioRecorder.stop() print("record stop") // 以降でローカルから取得したURLを元にfirebaseに保存する let fileName = Date.timeIntervalBetween1970AndReferenceDate.description let ref = Storage.storage().reference() ref.child("audio/(fileName)").putFile(from: loacalURL, metadata: nil) { metaData, error in if let error = error { print("audio save fail") print(error.localizedDescription) } ref.downloadURL(completion: { [weak self] url, error in print("get url") print(url) guard let self = self else { return } if error != nil { print(error!.localizedDescription) print("fail get downloadURL") } guard let url = url else { return } self.presenter.saveAudioMessage(url) print("finish saveaudio message") }) } } }

見つけた記事

https://stackoverflow.com/questions/38481592/fail-get-download-url-from-firebasedatabase

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

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

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

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

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

guest

回答1

0

自己解決

ref.downloadURLの部分で childの指定が抜けていました。

投稿2019/09/09 17:21

tomoya_ios

総合スコア6

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問