iOSアプリと連携させて使えるデバイスたち

第4回 1,600万色の表現力をもつLED電球「hue」と連携するiOSアプリをつくる その2:応用編

この記事を読むのに必要な時間:およそ 3 分

⑤Parseに証明書を登録

キーチェーンから,④で作成した証明書をp12形式で書き出します(パスワード設定不要⁠⁠。

画像

Parseダッシュボードの,[Settings] > [Push notifications] > [Apple Push Certificate] から,書き出したp12を登録します。

まずはここまでで,通知が送れるようになっています。アプリを起動し,プッシュ通知を許可したうえでバックグラウンド状態にし,Parseダッシュボードの,[Push Notifications] にある「+ Send a push」ボタンから通知を送ってみると,iOSデバイス側で通知を受け取れます。

⑥通知を受け取ったらhueを光らせる

通知を受け取ったらアプリを起動しなくてもバックグラウンドで処理できるよう,[Capabilities] > [Backgound Modes]で,"Background fetch"と"Remote notifications"にチェックを入れておきます。

画像

③で実装したapplication:didFinishLaunchingWithOptions:のregisterForRemoteNotificationTypes:まわりの処理を次のように書き換えてください。

[application unregisterForRemoteNotifications];
[application registerForRemoteNotificationTypes:
 UIRemoteNotificationTypeBadge|
 UIRemoteNotificationTypeAlert|
 UIRemoteNotificationTypeSound|
 UIRemoteNotificationTypeNewsstandContentAvailability];

[application setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum];

通知を受け取った際に呼ばれるデリゲートメソッド,application:didReceiveRemoteNotification:fetchCompletionHandler: でhueを光らせる処理をおこないます。⁠その1:基礎編」で解説した,アラートモードを使用します。

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler
{
    NSLog(@"notification received:%@", userInfo);

    // PHLightオブジェクトを取得
    PHBridgeResourcesCache *cache = [PHBridgeResourcesReader readBridgeResourcesCache];
    PHLight *light = [cache.lights.allValues firstObject];
    
    // PHLightStateオブジェクトの設定
    PHLightState *lightState = [[PHLightState alloc] init];
    lightState.alert = ALERT_LSELECT;
    
    // ライト(PHLightオブジェクト)に状態(PHLightStateオブジェクト)を送信
    id bridgeSendAPI = [[[PHOverallFactory alloc] init] bridgeSendAPI];
    [bridgeSendAPI updateLightStateForId:light.identifier
                           withLighState:lightState
                       completionHandler:^(NSArray *errors)
     {
         // 送信完了時の処理
         completionHandler(UIBackgroundFetchResultNoData);
     }];
}

以上で実装は完了です。

試してみる

Parseからバックグラウンド処理のトリガとなる通知を送ります。Parseダッシュボードの[Push Notifications]の「+ Send a Push」ボタンを押して出てくる送信画面の,⁠Compose message」の欄に "{ "aps": { "content-available": 1} }" と入力し,スイッチを動かしてJSON形式を指定してください。

画像

通知を送信すると,アプリがバックグラウンドにある状態でもhueが明滅します。

まとめ

hueと連携するiOSアプリの事例として,⁠プッシュ通知がきたときにhueを光らせる」アプリの実装方法を説明しました。hueは出力側のデバイスなので(※もちろんhueの光を入力とすることも可能ですが)他のiOSの機能やデバイスと連携させやすく,今後も何か別のデバイスを紹介する際に応用事例としてhueを絡めて紹介することも検討しています。国内のアップルストアAmazonで日本仕様正規品が販売されていて手に入れやすく,また普通の照明器具に取り付けられて非常に使いまわしやすいデバイスなので,ぜひお試しください。

著者プロフィール

堤修一(つつみしゅういち)

1978年生まれ。京都大学工学部を卒業後,同大学院修了。その後,NTTデータにて音声認識技術の研究開発,キヤノンにて画像処理機能の設計に携わる。

2010年より面白法人カヤックに入社。3年間ほぼiOSアプリ開発に専念し,フルスクラッチで開発しリリースしたアプリは30本以上。代表作は150万ユーザを突破した「バウンドモンスターズ」,AppStore Best of 2012を獲得した「タップ忍者」,カンヌ国際広告祭でブロンズを獲得した「Domino's App」など。

現在は,米国シリコンバレーのマウンテンビューにあるAppSocially社の一員として活躍中。

著書=『iOSアプリ開発 達人のレシピ100―開発現場で実証された実用コード集』

ブログ=Over&Outその後

Github=shu223

Twitter=shu223