やること
iOSからSlackのWebSocketを使ってメッセージのやり取りをできる状態にする
事前準備
redirect urlを用意せずにモバイルアプリ単体でアクセストークンを取得するのは無理っぽいのでとりあえずテスト用のを使う
- テスト用のアクセストークンの取得
手順
- Web APIのrtm.startを使ってWebSocket Message ServerのURLを取得する(30秒しか有効期間がないので毎回取得が必要)
- 取得したURLを使ってWebSocketのコネクションをはる
超適当なサンプル
- 適当にXcodeでプロジェクトを作成
- Podfileに以下を記載(cocoapods 1.0以上)
target 'プロジェクト名' do use_frameworks! pod 'Alamofire', '~> 3.4' pod 'Starscream', '~> 1.1.3' end
- $ pod install
- ViewControllerを以下のように書く(accessTokenのところにaccessTokenを入れる)
import Alamofire import Starscream class ViewController: UIViewController, WebSocketDelegate { var socket: WebSocket? let accessToken = "xxx" override func viewDidLoad() { super.viewDidLoad() let URL = "https://slack.com/api/rtm.start?token=\(accessToken)" Alamofire.request(.POST, URL, encoding: .JSON) .responseJSON { [weak self] response in print(response.request) // original URL request print(response.response) // URL response print(response.data) // server data print(response.result) // result of response serialization if let JSON = response.result.value { print("JSON: \(JSON)") print("url:", JSON["url"]) if let urlString = JSON["url"] as? String { self?.socket = WebSocket(url: NSURL(string: urlString)!) self?.socket?.delegate = self self?.socket?.connect() } } } } // MARK: WebSocket Delegate func websocketDidConnect(socket: WebSocket) { print("did connect") } func websocketDidDisconnect(socket: WebSocket, error: NSError?) { } func websocketDidReceiveMessage(socket: WebSocket, text: String) { print("message:", text) } func websocketDidReceiveData(socket: WebSocket, data: NSData) { print("data:", data) } }
動かして以下が表示されればOK
did connect message: {"type":"hello"}