20日目、メッセージング機能の続き
昨日までに、メッセージング機能に必要なバックエンドの要素等作成したのでこれらをそれぞれのコントローラ、ビューで呼び出し完成させていきます。
1.トーク画面
機能作成したfetchMessagesをチャットコントローラのfetchMessagesで呼び出し、さらにそれをviewdidloadで呼び出します。
func fetchMessages() {
MessageService.fetchMessages(forUser: user) { messages in
self.messages = messages
self.collectionView.reloadData()
self.collectionView.scrollToItem(at: [0, self.messages.count - 1],
at: .bottom, animated: true)
}
}
またuploadメッセージは送信ボタンの処理部分にて呼び出します
extension ChatController:CommentInputAccesoryViewDelegate{
func inputView(_ inputView: CommentInputAccesoryView, wantsToUploadComment comment: String) {
MessageService.uploadMessage(comment, to: user) { error in
if let error = error {
print("DEBUG: エラー-> \(error.localizedDescription)")
return
}
inputView.clearCommentTextView()
}
}
}
なおこのCommentInputAccesoryViewDelegateはcommentのところで使ったものを併用しています。
そしてUIを整えると以下のようになりました!(最後に2つのシミュレータで、表示の違いを載せます)
DB上もしっかり機能しています!
次はトークリストのページを完成させていきます!
2.トークリストのページ(conversationController)
fetchRecentMessagesをfetchConversationにて呼び出し、これをviewdidLoadにて呼び出します
func fetchConversations() {
MessageService.fetchRecentMessages { conversations in
conversations.forEach { conversation in
self.conversationsDictionary[conversation.chatPartnerId] = conversation
}
self.conversations = Array(self.conversationsDictionary.values)
self.tableView.reloadData()
}
}
その他UIの遷移、読み込みなどの処理の説明は割愛します。
実行すると以下のようになりました。
できました!
2台のシミュレータで適切に動作するか確かめます!
片方はドラえもん、もう一方はコナンでログインします。
既読機能をつけたいのですがそれに関してはやり方がわかりませんw
とりあえず、メッセージング機能は完成です!
3.その他
今後としては以下のような機能をつけていきたいと思います。
・投稿に位置情報を持たせ、現在地の半径数キロメートル範囲の投稿(フォロワー関係なし)のみを取得、そしてその一覧を表示するページをタイムラインの切り替えによって実現
・投稿にURLを持たせることによって、その投稿が撮られたお店などのWebサイトへ移動できる機能(割と簡単にできる)
・自分のフォロワー、フォロー一覧ページの作成
インスタグラムの下位互換的なアプリではなく、全く別のSNSを作っていこうと思います!
しばらくは大学院生ということもあり研究等で毎日投稿は難しくなりますが、追加機能を実装出来次第、このNOTEを投稿していきます。よろしくお願いします。