はじめに
前回 まででMilkococoa をサーバ側で利用するためのMilkcocoa Node.js SDKの概要や、SDKを使ったアプリケーション実装方法などを紹介してきました。
今回はiPhoneやiPad上で動作するiOSとの連携が出来るMilkococoa iOS SDKを紹介したいと思います。前回、IoTという単語が出てきていましたが、IoT領域ではスマートフォン連携も需要が高くなっていますので覚えておいて損は無いと思います。
Milkcocoa iOS SDK
これまでに紹介したMilkcocoaのSDKは全てJavaScript向けのSDKでした。今回は、冒頭に述べたようにiPhoneとの連携を図るために、iOSアプリケーション構築用言語の一つであるSwift 向けのSDK を紹介します。他のBaaSサービスもiOS向けのSDKがありますが、この時期(2015年3月時点)にSwiftに対応しているのは珍しいのではないでしょうか。
Milkcocoa iOS SDKはまだ開発版で、Milkcocoaの機能のうちsendメソッド
しか対応出来ていません。Webアプリケーションの一つのパーツとしてiOSを使う場合や簡単な連携を行う場合に活用できます。
なお、今回はあくまで、Milkcocoa iOS SDKの話になるため、Swift自体については深くは触れません。Swiftについては超初心者向けSwift解説、勉強会レポート【スライド付】 などを参考にしてください。
SDKの取得方法
Milkcocoa iOS SDKは開発途中でまだ公開されていませんが、株式会社テクニカルロックスターズ に問い合わせをすることで限定的に使う事ができます。
contact AT mlkcca.com(「 AT」を「@」に変更)まで連絡をして、SDK利用を希望していることをお伝えください。
本記事の対象
以下のような方が今回の対象となります。
筆者と同じように、Web制作者だけどiOS開発やSwiftにチャレンジしてみたい方
簡単にiOSとWebでリアルタイム通信をしたいと思っている方
開発環境
今回のMilkcocoa iOS SDKを紹介するうえで簡単なサンプルを作りますが、サンプルを作った際の筆者の環境を紹介します。
Mac OS X 10.10 Yosemite
Xcode 6.2
iOS 8.2
Milkcocoa JavaScript SDK 0.2.8(通常のブラウザJavaScriptのSDK)
Milkcocoa iOS SDK(テストユーザ[1] )
Swiftプロジェクトの始め方
この節はWebアプリケーションがメインでiOSアプリケーション制作が初めてという方向けです。iOSアプリケーションを作成したことがある人は読み飛ばしてください。
iOSの統合開発環境であるXcode をお使いのMacにインストールしてください。
まず始めに、Xcodeを起動します。
図1 Xcodeを起動
Create a new Xcode project を選択しましょう。
作成するアプリケーションの種類を選択します。Single View Application を選択して次に進みます。
図2 Single View Applicationを選択
Product Nameの項目に、任意のアプリケーションのプロダクト名を設定します。
LanguageはSwift
にして進めます。
図3 各項目を設定する
プロジェクトファイルの保存場所を指定してCreate を選択すると、プロジェクトが作成されます。
図4 プロジェクトが作成される
このような画面が表示されれば問題ないです。
図5 このような画面が表示されれば問題ない
SwiftとMilkcocoaのHello World
それでは実際に作って行きたいと思います。前回まで と同様にio-xxxxxxx
というMilkcocoaのアプリIDを取得しておきましょう。
SDKの確認
株式会社テクニカルロックスターズに連絡をするとMilkcocoa.framework
というiOS向けのライブラリが提供されます。
図6 Milkcocoa.frameworkというiOS向けのライブラリが提供される
このファイルがMilkcocoa iOS SDKのコアになりますので、大事に保管しましょう。
Web側の実装
まずはWeb側を作って行きたいと思います。io-xxxxxx
となっているアプリIDの部分だけ各々のものに書き換えてください。
app.html
01: <!doctype html>
02: <html lang = "ja" >
03: <head>
04: <meta charset = "UTF-8" >
05: <title> simple chat! </title>
06: <script src = "http://cdn.mlkcca.com/v0.2.8/milkcocoa.js" ></script>
07: <script>
08: var milkcocoa = new MilkCocoa ( "https://io-xxxxxx.mlkcca.com/" );
09: var iosDS = milkcocoa . dataStore ( 'ios' );
10:
11: function clickEvent (){
12: iosDS . send ({ msg : 'hello! iOS! I am JS' });
13: }
14:
15: iosDS . on ( 'send' , function ( data ){
16: console . log ( 'receive:' , data . value . msg );
17: });
18: </script>
19: </head>
20: <body>
21: <button name = "button" onClick = " clickEvent () " > send! </button>
22: </body>
23: </html>
基本的に今までのMilkcocoaの説明と同様です。Milkcocaのメソッドの詳細はドキュメント をご確認ください。
6行目:MilkcocoaのSDKをcdnから読み込みます。
8行目:Milkcocoaアプリケーションに接続します。
9行目:ios
というデータストアにアクセスします。
11~13行目:iosデータストア
に対してsendメソッド
を実行するclickEvent()
を設定します。
15~17行目:iosデータストア
に対するsendイベント
をonメソッド
で監視します。sendメソッド
が実行されたタイミングで16行目が実行されます。
21行目:clickEvent()
を発火するボタンを設置します。
画面的にはsend!
とだけ書かれたwebページになります。
図7 「 send!」とだけ書かれたwebページ
コンソールにconnected
と表示されていればMilkcocoaとの接続に成功しています。
図8 「 connected」と表示されていればMilkcocoaに接続されている
iOS側(Swift)の実装
Milkcocoa.framework
の読み込み準備
Xcodeのプロジェクトの設定でBuild Phases →( 左上の)+ →New Copy Files Phase でCopy Files の項目を表示させます(環境によってはデフォルトでCopy Filesの項目が表示されている場合もあるかもしれません) 。
図9 順に項目を選択する(サムネイルでは表示が崩れます。ご了承ください。)
Copy Files の部分にMilkcocoa.framework
をドラッグ&ドロップ(または)で追加します。モーダルが表示されるので、Copy items if needed にチェックを入れてFinishを選択します。
また、Destination の項目はFrameworks にしておきます。
図10 順に設定する(サムネイルでは表示が崩れます。ご了承ください。)
Copy items if needed のチェックを入れることでプロジェクトのフォルダ内にもMilkcocoa.framework
のファイルがコピーされます。
図11 読み込み前
図12 読み込み後
左側のフォルダツリーにMilkcocoa.framework
が表示されていることを確認しましょう。
図13 「 Milkcocoa.framework」が表示されていることを確認
この左側のフォルダツリーに表示されているMilkcocoa.framework
をドラッグ&ドロップでLink Binary With Libraries に追加します。
図14 「 Milkcocoa.framework」をドラッグ&ドロップで「Link Binary With Libraries」に追加(サムネイルでは表示が崩れます。ご了承ください。)
これでライブラリを読み込む準備が整いました。
ViewController.swiftへの記述
次はViewController.swif
に実際のSwiftコードを記述していきます。
図15 実際のSwiftコードを記述する
以下のように書き換えてください。io-xxxxxx
は先ほどのWeb側と同様のアプリIDにしましょう。
ViewController.swift
01: import UIKit
02: import Milkcocoa
03:
04: class ViewController : UIViewController {
05: let milkcocoa = Milkcocoa ( url : "https://io-xxxxxx.mlkcca.com" )
06:
07: override func viewDidLoad () {
08: super . viewDidLoad ()
09: let dataStore = milkcocoa . dataStore ( "ios" )
10:
11: dataStore . on ( "send" , { data in
12: println ( data . value [ "msg" ]. asString !)
13: })
14:
15: dataStore . send ([ "msg" : "hello! JS! I am iOS" ])
16: }
17:
18: override func didReceiveMemoryWarning () {
19: super . didReceiveMemoryWarning ()
20: }
21:
22: }
基本的に先ほどのapp.html
でのJavascriptコードとほぼ同様の解説になります。
2行目:Milkcocoa ios SDKを読み込みます。
5行目:Milkcocoaアプリケーションに接続します。
9行目:ios
というデータストアにアクセスします。
11~13行目:iosデータストア
に対するsendイベント
をonメソッド
で監視します。データストアに対してsendメソッド
が実行されたタイミングで12行目が実行されます。
15行目:iosデータストア
に対してsendメソッド
を実行します(アプリケーションが起動したタイミングで実行となります) 。
実行して確認
この状態で左上の三角形のBuildボタンを押すと、ビルドが実行されてビルドターゲットに指定してあるデバイス(今回の画面だとiPhone 6)のエミュレータが起動します。
図16 iPhone 6のエミュレータが起動(サムネイルでは表示が崩れます。ご了承ください。)
コンソールにwebsocket is connected
と表示されたら、Milkcocoa
との接続に成功です。
Web側とiOS側の連携を確認
それでは先ほど作ったWebページとiOSアプリケーションの両方のコンソールを観られる状態にして、iOSアプリケーションを起動してみます。
お互いのコンソールにメッセージの送受信がリアルタイムに行われているのが分かると思います。
図17 お互いのコンソールにメッセージの送受信がリアルタイムに行われている(サムネイルでは表示が崩れます。ご了承ください。)
さらに、Web側で実装したsend!
ボタンを押すことでメッセージが送れている様子が分かると思います。
図18 Web側で実装した「send!」ボタンを押すことでメッセージが送れている(サムネイルでは表示が崩れます。ご了承ください。)
iOSアプリの色をWebから制御してみる
少し応用的な処理をしてみたいと思います。見た目でリアルタイム通信を感じられるようにiOSアプリケーションの画面の色をWebから操作してみます。
Web側の実装
先ほど作成したapp.html
を微修正します。
app.html
01: <!doctype html>
02: <html lang = "ja" >
03: <head>
04: <meta charset = "UTF-8" >
05: <title> simple chat! </title>
06: <script src = "http://cdn.mlkcca.com/v0.2.8/milkcocoa.js" ></script>
07: <script>
08:
09: var milkcocoa = new MilkCocoa ( "https://io-xxxxxx.mlkcca.com/" );
10: var iosDS = milkcocoa . dataStore ( 'ios' );
11:
12: function clickEvent ( color ){
13: iosDS . send ({
14: msg : 'hello! iOS! I am JS' ,
15: color : color
16: });
17: }
18:
19: iosDS . on ( 'send' , function ( data ){
20: console . log ( 'receive:' , data . value . msg );
21: });
22: </script>
23: </head>
24: <body>
25:
26: <button name = "button" onClick = " clickEvent ( 'red' ) " > red </button>
27: <button name = "button" onClick = " clickEvent ( 'green' ) " > green </button>
28: <button name = "button" onClick = " clickEvent ( 'yellow' ) " > yellow </button>
29:
30: </body>
31: </html>
最初のapp.html
から変更した部分の解説をします。
12~17行目:clickEvent()
が実行されたら引数であるcolor
の値をsendメソッド
でcolor
というキー名で送信しています。
26~29行目:red、green、yellowのそれぞれの色を送るためのボタンを3つ設置します。
このような感じで3つのボタンが表示されるページが出来ます。
図19 3つのボタンが表示されるページ
iOS側の実装
こちらも先ほどのViewController.swift
を修正します。
ViewController.swift
01: import UIKit
02: import Milkcocoa
03:
04: class ViewController : UIViewController {
05: let milkcocoa = Milkcocoa ( url : "https://io-ci1s1iu9p.mlkcca.com" )
06:
07: override func viewDidLoad () {
08: super . viewDidLoad ()
09: let dataStore = milkcocoa . dataStore ( "ios" )
10:
11: dataStore . on ( "send" , { data in
12: println ( data . value [ "msg" ]. asString !)
13: //送信された色によって背景色を変更する
14: var color = data . value [ "color" ]. asString !
15: if color == "red" {
16: self . view . backgroundColor = UIColor . redColor ()
17: } else if color == "green" {
18: self . view . backgroundColor = UIColor . greenColor ()
19: } else if color == "yellow" {
20: self . view . backgroundColor = UIColor . yellowColor ()
21: } else if color == "white" {
22: self . view . backgroundColor = UIColor . whiteColor ()
23: }
24: })
25:
26: dataStore . send ([ "msg" : "hello! JS! I am iOS" , "color" : "white" ])
27: }
28:
29: override func didReceiveMemoryWarning () {
30: super . didReceiveMemoryWarning ()
31: }
32:
33: }
if文などが入ってきますが、SwiftのコードはJavaScriptなどに文法が似ているので読むことは可能だと思います。
14~23行目:sendイベント
で受信したcolor
の値によって背景色を変更しています。
26行目:アプリケーション起動時にsendメソッド
を実行しますが、その際にcolor
の値としてwhite
を送信しています。
実行して確認
先ほどと同じようにiOSアプリケーションをエミュレータでビルドしましょう。その状態でWebページ上の色のボタンを押すとiOSアプリケーションの画面色がリアルタイムに変化するのが分かると思います。
図20 Webページ上の色のボタンを押すとiOSアプリケーションの画面色がリアルタイムに変化する(サムネイルでは表示が崩れます。ご了承ください。)
実機でのアプリケーション実行の仕方は今回は紹介していませんが、実機でもちゃんと動作します。
図21 実機でも動作する(サムネイルでは表示が崩れます。ご了承ください。)
まとめ
このような感じでMilkcocoaを使うことでiOSとWebの連携をカンタンにすることができました。
Webエンジニアである筆者にとって、iOSとWebの連携は当初は凄く難しいイメージがあったのですが、Milkcocoaはその敷居を格段に下げてくれました。Milkcocoaを初めて触って数分でWebチャットアプリを作ったときにも感じましたが、やはりシンプルで分かり易いというのはライブラリやサービスでは重要な要素だと思います。
説明が無くても直感的に分かるシンプルさが筆者がMilkcocoaが好きな理由です。それと、ユーザへの対応も丁寧にしてくれるという点もあり、凄く応援しています。
最後になりますがiOS SDKは開発途中なので、興味のある方はcontact AT mlkcca.com(「 AT」を「@」に変更)まで連絡をよろしくお願いします。また、情報が少ないと思いますので、FacebookでMilkcocoaのユーザーグループ がありますのでこちらで質問などを投げかけると答えが見つかりやすくなるかもしれません。