前提
MessageKit + Firebaseのメッセージアプリを作成しています。
直面している問題
Firebase storageで downloadURL
が 取得できない問題に直面しています。
処理の順番は以下の通りです。
- 録音ボタンを長押ししている間は録音し、長押しが終わった段階で停止
- 停止したらあらかじめ指定したローカルの保存先URLからファイルをFirebase storageにアップロード
- downloadURLを取得し、audioURLプロパティを持つメッセージデータを作成
- firestoreに保存
- snapchatでメッセージの変更・追加を取得して、メッセージオブジェクトを作成
- メッセージとしてユーザーに表示
今回は1~4までの部分を担当するメソッドで問題が起きています。
問題箇所は3の部分です。
AVFoundation
、 Firebase
ともにまだ慣れていない部分が多く、初歩的なミスかもしれませんがご回答頂けますと幸いです。
※抜粋(後半に該当コードを全て載せています) 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
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。