こんにちは!最近は Objective-C を使ってiOSアプリの開発も行っています。ささたつです。
さて、サーバ (Rails) と通信するアプリで、iOS側でいちいち再読み込みしなくても新しい情報が流れてくる、みたいなのがやりたくて Websocket をごにょごにょしていたんです。
まずは Rails 側で Websocket 使うには websocket_rails が良さそうだということでこれを使って実装しました。よしよし動いたと思っていたんですが、iOS側で Websocket を扱おうと思ったら、、あれれ。
iOS側では SocketRocket という square が作ったライブラリを利用しようとしたんです。が、Rails側からいくら送信してもいっこうに iOS側にその通知が流れてきません。。いろいろ見てみるとどうも SocketRocket は websocket_rails の channel の仕組みに対応していない模様><。
マジかー、と思って何か別の方法を探しているときに今回紹介する Pusher を見つけました。Pusher は Websocket 通信を良い感じに捌いてくれるクラウドサービスです。

使い方も簡単で、まず Rails側は @object っていうデータを渡すとするとこんな感じ。簡単。
iOSアプリ側では Pusher に websocket 通信をして
あとはこんな感じでデータを受け取れるので、好きなように処理するという感じです。簡単。
非常に簡単に使えるし(チャンネルにも対応してる)、セキュリティ的なところも担保されてるので使いやすそうだなぁと思いました。
さて、サーバ (Rails) と通信するアプリで、iOS側でいちいち再読み込みしなくても新しい情報が流れてくる、みたいなのがやりたくて Websocket をごにょごにょしていたんです。
まずは Rails 側で Websocket 使うには websocket_rails が良さそうだということでこれを使って実装しました。よしよし動いたと思っていたんですが、iOS側で Websocket を扱おうと思ったら、、あれれ。
iOS側では SocketRocket という square が作ったライブラリを利用しようとしたんです。が、Rails側からいくら送信してもいっこうに iOS側にその通知が流れてきません。。いろいろ見てみるとどうも SocketRocket は websocket_rails の channel の仕組みに対応していない模様><。
SocketRocketってchannelに対応してないの。。 / Socket connection between rails and iphone native app - Stack Overflow
http://t.co/gELfBc0BLX
— ささたつ(Tatsuya Sasaki) (@sasata299) March 21, 2014
マジかー、と思って何か別の方法を探しているときに今回紹介する Pusher を見つけました。Pusher は Websocket 通信を良い感じに捌いてくれるクラウドサービスです。
使い方も簡単で、まず Rails側は @object っていうデータを渡すとするとこんな感じ。簡単。
Pusher['チャンネル名'].trigger('create', object: @object)
iOSアプリ側では Pusher に websocket 通信をして
self.client = [PTPusher pusherWithKey:@"Pusherのキー" delegate:self encrypted:YES]; [self.client connect];
あとはこんな感じでデータを受け取れるので、好きなように処理するという感じです。簡単。
PTPusherChannel *channel = [self.client subscribeToChannelNamed:@"チャンネル名"]; [channel bindToEventNamed:@"create" handleWithBlock:^(PTPusherEvent *channelEvent) { // channelEvent.data で渡ってくるデータが受け取れる }];
非常に簡単に使えるし(チャンネルにも対応してる)、セキュリティ的なところも担保されてるので使いやすそうだなぁと思いました。