スマートウォッチとMBassを連携したアプリの未来は明るい

スマートウォッチアプリについて

全画面_2015_07_21_15_14

 

スマートフォンほどではないですが、世界的にスマートウォッチの普及率は急激に上がりつつあります。Apple Watchを例にすると1年間、3,600万台が売れたそうです。 http://japan.cnet.com/news/business/35064877/

また、AppleとGoogleの中心としてスマートウォッチアプリ開発のプラットフォームが用意されていますのでアプリも簡単に作れます。わざわざスマートフォンをポケットから出さなくてもスマートウォッチでユーザーの要求を満たす時代はすぐ近くまで来ています。

ということでスマートウォッチ(Apple Watch)とMBass(Parse)連携したアプリを作ってみることにしました。 Parseについてはこちら

 

アプリを作ってみよう

 

スマートウォッチから打刻をするアプリをいかに簡単につくれるのか紹介したいと思います。IOS開発経験者を対象に説明しますが、初心者でもすぐ理解できるレベルですのでぜひ最後までよんでみてください。

 

開発環境

  • Xcode 6.4
  • IOS 8.4
  • Swift

 

プロジェクト作成

  1. IOS用の新しいプロジェクト(Single View Application)を作成する。
  2.  Xcode > File > New > Targetを選択
  3. WatchKit App を追加

add watchkit

 

 

画面仕様

Check Inボタンをクリックした時に画面1のインタフェースが呼ばれるようになっています。WatchKit Extentionフォルダ配下にCheckInControllerファイルを作成し、画面1に紐付けます。 ※Check Outも同様

Interface_storyboard

 

 

CheckInControllerを実装

  1. WatchKitフレームワークをインポート。
  2. WKInterfaceControllerクラスを継承します。
  3. CheckInControllerが呼ばれた時に最初に実行されるwillActivateメソッドを実装します。
  4. 現在の時刻を取得。
  5. ここがポイント! 処理内容を親アプリ(IPhone)に伝えます。

 

import WatchKit // <1>
import Foundation


class CheckInController: WKInterfaceController { // <2>

    @IBOutlet weak var message: WKInterfaceLabel!
    
    override func awakeWithContext(context: AnyObject?) {
        super.awakeWithContext(context)
        
        // Configure interface objects here.
        message.setText("Success! Check In");
    }

    override func willActivate() { // <3>
        // This method is called when watch view controller is about to be visible to user
        super.willActivate()
        
        // 現在時間を取得 // <4>
        let now = NSDate() 
        let dateFormater = NSDateFormatter()
        dateFormater.dateFormat = "yyyy/MM/dd HH:mm"
        
        let request = [
            "type": "1",
            "time": dateFormater.stringFromDate(now)as String
        ]
        
        let isSuccess = WKInterfaceController.openParentApplication(request,reply:nil) // <5>
    }

    override func didDeactivate() {
        // This method is called when watch view controller is no longer visible
        super.didDeactivate()
    }
    

}

 

 

Parse SDKを導入

SDKダウンロードページにアクセスしIOS用のSDKをダウンロードします。

Linked Frameworks and Librariesから先程ダウンロードしたフレームワークの中からParse.framework と Bolts.frameworkを追加します。

job_time_recoder_xcodeproj

 

また、Parseフレームワークの依存する以下のフレームワークを一緒に追加しておきます。

  • SystemConfiguration.framework
  • AudioToolbox.framework
  • libsqlite3.dylib

 

Parse アクセスキKeyを取得

Parseのアカウント作成、アプリ作成についてはGoogle検索からすぐ出ますので割愛させていただきます。

Settings > Keys 画面を開き、Application IDとClient Keyをメモしましょう。

Edit_Your_App___Parse 2

 

今回のアプリで使用する以下のカラムを追加しておきましょう。

  • user_id (Number) ユーザー
  • type (String) Check In/Out 区別するフラグ
  • time (Date) Check In/Outの時間

 

time_history___Parse

 

 

IPhoneアプリ側を実装

  1. Parseフレームワークをインポート
  2. idにParseのApplication ID、keyにParseのClient Keyを定義
  3. Watchkit ExtentionのContorllerのWKInterfaceController.openParentApplicationメソットの受け取る側を実装
  4. パラメータを取得(type, time)
  5. **ここからがポイント!**アプリケーションIDを設定します。
  6. Parseオブジェクトを生成
  7. Parseに登録する値を設定
  8. Parseに登録

 

import UIKit
import Parse // <1>

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    // <2>
    let id = "xxxxx"
    let key = "xxxxx"

    func application(application: UIApplication, handleWatchKitExtensionRequest userInfo:[NSObject:AnyObject]?, reply:(([NSObject:AnyObject]!)->Void)!) { // <3>
        
        // requestからメッセージを取得 <4>
        var dic = userInfo as! Dictionary<String,String>
        var type = dic["type"]
        var time = dic["time"]
        var date_fomatter = NSDateFormatter()
        date_fomatter.dateFormat = "yyyy/MM/dd HH:mm"
        
        // データ登録
        Parse.setApplicationId(self.id, clientKey:self.key) // <5>
        var time_history = PFObject(className: "time_history") // <6>
        // <7>
        time_history["user_id"] = 1 as Int 
        time_history["type"] = type
        time_history["time"] = date_fomatter.dateFromString(time!)
        time_history.saveInBackgroundWithBlock{ // <8>
            (success: Bool, error: NSError?) -> Void in
            if (success) {
                println("Success! input Data. Type is \(type) And Time is \(time)")
            }else {
                println("Failed! input Data. Type is \(type) And Time is \(time)")
            }
        }
        
        // ViewControllerを調べる
        let vc = self.window?.rootViewController as? ViewController
        vc?.setMessage(type!, time: time!)

    }

これで完成です!

 

アプリを起動してみましょう!

 

Check In ボタンをクリック

Apple_Watch_38mm

Apple_Watch_38mm 2

Apple_Watch_38mm

Apple_Watch_38mm 2

 

Parseのデータ確認

time_history___Parse

 

 

感想

Apple WatchとParseを連携したアプリ開発は思ったより楽にできました。この記事ではデータの登録のみの紹介でしたが、Parseに登録されたデータをWebサーバー側で取得、分析して見せることもできます。

また、ウェアラブルデバイスだけでなくIoTデバイスのデータもParseを使えばデータの収集できますし、何でもつなげられるのではないかと思いました!そのデータを分析/加工すれば様々な付加価値を得ることができるのではないでしょうか。

開発者として思ったことをすぐ作れる恵まれた世界に生まれたことに感謝しています! :)