post Image
Rails 5 Action CableチャットアプリのiOSクライアント側を作る

はじめに

iOSでリアルタイム通信がデモできるアプリを作りたいと思っていたところ。
RailsのAction Cableを使ったアプリケーションと通信する簡単なiOSアプリを作ってみました。

今回のRailsとiOSのコードはGithubに上げましたので、ご興味があれば動かしてみてください。
ariiyu/ActionCableSample: Action Cable Sample with Rails 5.1 and Swift 3.1

Action Cableとは

Ruby on Rails 5で導入された、WebSocketによる双方向通信とRailsを統合するための仕組みです。
Action Cable の概要 | Rails ガイド

Railsアプリケーション

※ruby 2.4.1、Rails 5.1.0
以下の記事を元に、Rails側の実装を行いました。
コードはほぼそのままです。

Rails 5 + ActionCableで作る!シンプルなチャットアプリ(DHH氏のデモ動画より) – Qiita

iOS側からのリクエストを許可

以下の記述を加えておきます。

config.environment/development.rb
config.action_cable.allowed_request_origins = ['ws://localhost:3000']

Swiftアプリ

Swift-ActionCableClientというライブラリを利用しました。
WebViewを使わずに、ネイティブのコードを書いてRailsのAction Cableアプリケーションとやりとりします。

接続

接続が成功したらonConnectedが呼ばれます。

var client: ActionCableClient!

self.client = ActionCableClient(url: URL(string: "ws://localhost:3000/cable")!)
client.connect()

client.onConnected = {
  print("Connected!")
}

client.onDisconnected = {(error: Error?) in
  print("Disconnected!")
}

チャンネル作成・購読

client.createでチャンネルを購読します。

self.roomChannel = self.client.create("RoomChannel")

メッセージ受信

メッセージを受信したらonReceiveが呼ばれます。

roomChannel.onReceive = { (JSON : Any?, error : Error?) in
  if let json = JSON {
    self.receivedBodyLabel.text = (json as! NSDictionary)["message"] as? String
  } 
}

roomChannel.onSubscribed = {
  print("Subscribed")
}

roomChannel.onUnsubscribed = {
  print("Unsubscribed")
}

roomChannel.onRejected = {
  print("Rejected")
}

アクション送信

if let error = roomChannel["speak"](["message": "hello: " + String(random)]) {
    print("Error: ", error)
} else {
    print("spoke message")
}

動作確認

$ rails s

Railsサーバーを起動してWebブラウザでhttp://localhost:3000にアクセスすると、チャット画面が表示されます。
iOSアプリをシミュレータで実行してmessageを送受信すると、それぞれの端末の画面の表示がリアルタイムに更新されることを確認します。

おわりに

Action Cableを使ったサーバーと通信するiOSクライアントアプリを作ってみました。
今回は単純なサンプルを作るのが目的でしたが、Rails側、iOS側ともにサクッと作れたように思います。

参考


『 Swift 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。