この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
こんにちは。最近は朝のコーヒーが欠かせない田宮です。今朝は追加でコンソメスープを飲んできました。 さて、この前書いた記事では、iOSのサンプルプロジェクトをつくって、SDK を導入し、SendBird 公式サンプルからいろいろコピーしてきて、SendBirdのオープンチャット画面を実現するところまでやりました。
[iOS] SendBirdを使ってみた! | Developers.IO
今回は、API Document を見ながら、いろいろ動かしてみたいと思います。
3つ試してみた
1.チャットに書き込む
SendBird.sendMessage("test from code")
これでチャットにメッセージを書き込めます。
override func viewDidAppear(animated: Bool) {
self.startSendBird()
let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(3 * Double(NSEC_PER_SEC)))
dispatch_after(delayTime, dispatch_get_main_queue()) { () -> Void in
let formatter = NSDateFormatter()
formatter.dateFormat = "HH:mm"
let now = NSDate()
let message = formatter.stringFromDate(now) + "入室しました ノシ"
SendBird.sendMessage("\(message)")
}
}
前回の記事のコードに追記してきます。 オープンチャット画面に遷移したタイミングで、こんなふうに書いておくと、チャット部屋に入室したことを自動的に書き込まなくてもOKな仕 組みを簡単に提供出来るかと思います。
機能を実装した様子はこちらです。
2.写真をアップロードする
// UIImageをNSDataに変換
let imageFileData = UIImagePNGRepresentation(UIImage(named: imageName)!)
// 画像データをアップロード
SendBird.uploadFile(imageFileData, type: "image/png", hasSizeOfFile:UInt(imageFileData!.length), withCustomField: "") { (fileInfo:SendBirdFileInfo!, error:NSError!) -> Void in
}
ファイル SendBird が用意している外部サーバにアップロードされます。 この時点では、アップロードされるのみで、タイムライン上に画像は表示されません。
3. 写真ファイルをタイムラインに貼る
let imageFileData = UIImagePNGRepresentation(UIImage(named: imageName)!)
SendBird.uploadFile(imageFileData, type: "image/png", hasSizeOfFile:UInt(imageFileData!.length), withCustomField: "") { (fileInfo:SendBirdFileInfo!, error:NSError!) -> Void in
//画像データをアップロード後返ってくる fileInfo を、後述の sendFileUrl() に渡す
self.sendFileUrl(fileInfo.url, name: fileInfo.name, type: fileInfo.type, sizeOfFile: fileInfo.size, customField: "")
}
(1)でファイルアップロード後に得られるファイル情報を、以下のsendFileUrl()に渡します。
func sendFileUrl(url: String, name: String, type: String, sizeOfFile: UInt, customField: String) {
let fileInfo: SendBirdFileInfo = SendBirdFileInfo.init(url: url, name: name, type: type, size: sizeOfFile, customField: customField)
SendBird.sendFile(fileInfo)
}
ファイルのURLや各種情報を受け取り、画像をタイムラインに貼ります。
応用例
internal func uploadAppropriateImages() {
let formatter = NSDateFormatter()
formatter.dateFormat = "HH"
let now = NSDate()
let hour = Int(formatter.stringFromDate(now))
var imageName = ""
if hour > 18 || hour < 6 { // 18時から6時は夜の画像
imageName = "night"
} else if hour < 9 { // 6時から9時は朝の画像
imageName = "morning"
} else {
imageName = "day" // それ以外は昼の画像
}
let imageFileData = UIImagePNGRepresentation(UIImage(named: imageName)!)
SendBird.uploadFile(imageFileData, type: "image/png", hasSizeOfFile:UInt(imageFileData!.length), withCustomField: "") { (fileInfo:SendBirdFileInfo!, error:NSError!) -> Void in
self.sendFileUrl(fileInfo.url, name: fileInfo.name, type: fileInfo.type, sizeOfFile: fileInfo.size, customField: "")
}
}
internal func sendFileUrl(url: String, name: String, type: String, sizeOfFile: UInt, customField: String) {
let fileInfo: SendBirdFileInfo = SendBirdFileInfo.init(url: url, name: name, type: type, size: sizeOfFile, customField: customField)
SendBird.sendFile(fileInfo)
}
ルームに入室した時間帯によって、イメージ画像をタイムラインに貼るコードがこちらです。
uploadAppropriateImages()を、ひとまずviewDidAppear()の中から呼ぶと良いでしょう。
このようになります。
おまけ
ちなみに、画像のURLを確認してみますと、どうやら AWS の S3 にアップされているようですね。
まとめ
今回は、どのようにしてメッセージや画像をタイムラインに貼る事ができるかを見てきました。 次回は、複数端末間でチャットしている様子と、Tipsなどをお伝えできればと思います。