連載
» 2013年11月12日 15時00分 公開

iOSアプリ開発は、BaaSでここまではかどるぞ(後編):BaaSを使えばアカウント認証やプッシュ通知は、もう面倒くさくない (2/3)

[高橋俊光,ティルフィン合同会社]

アカウント認証機構を試す

 Xcodeからプロジェクトを実行して認証機能を確認してみます。アプリが起動すると図3のようにログイン画面が出て、ログイン後にメイン画面が表示されます(初回のみアプリのコネクト許可画面が間に入ります)。

図3 認証画面

補足 認証によるデータへのアクセス制御

管理ポータルのモバイル サービス画面において、[データ]で該当のテーブルを選択、[アクセス許可]からCRUD処理に対しての簡易的なアクセス制限を設定できます。細かい制御はスクリプトで定義できます。


モバイル サービスのプッシュ通知とは

 モバイル サービスではiOSアプリ、Windowsストアアプリ、Google Cloud Messaging for Androidに対応したプッシュ通知機能を備えています。こちらを試してみましょう。

 iOSアプリの場合(APNs、Apple Push Notification Service)では、Appleが発行するアプリの通知用証明書からp12ファイルを書き出して、モバイル サービス側に登録すると準備完了です。通知の実行は、データストアや、その他のサービス側スクリプトにおいて定義します。

APNsの証明書作成

 プッシュ通知用証明書を作成します。OS X(Mac OS X)でキーチェーンアクセスを開きます。

 メニューから[証明書アシスタント]の[認証局に証明書を要求…]を選択します。[メールアドレス]に開発者登録時のものを、[通称]は任意のもの、[CAのメールアドレス]は空のままで進み、[要求の処理]に「ディスクに保存」を選択し、[続ける]をクリックします。任意の場所にCSRファイルを保存します。

 ブラウザから「Member Center - Apple Developer」にアクセスします。ログイン後、[Certificates, Identifiers & Profiles]に行きます。[iOS Apps]の[Identifiers]から今回のプロジェクト用に[App ID]を設定します。[Provisioning Profiles]から、このアプリと実機を結び付けるプロビジョニングプロファイルを作成して、開発機と実機にインストールしておきます。

 さらに[App IDs]の作成したApp IDを選択します。[Edit]ボタンをクリックして、[Service]の[Push Notifications]の右のEnableボックスをチェックします。[Development SSL Certificate]の[Create Certificate…]ボタンをクリックします。

 「About Creating a Certificate Signing Request」で[Continue]ボタンをクリックし、先ほどキーチェーン アクセスで生成したCSRファイルを選択します。[Generate]ボタンをクリックし、「Your certificate is ready.」になったら[Download]ボタンをクリックして、APNsの証明書をローカルに保存します。

 再びキーチェーンアクセスを開いて、左ペインの[ログイン]を選択し、保存した証明書ファイルを右ペインにドラッグアンドドロップします。[Apple Development iOS Push Sevices: <App ID>]を選択してコンテキストメニューを表示します。

 [“Apple Development iOS Push Sevices: <App ID>”を書き出す…] をクリックし、任意の名前でp12ファイルを保存します。書き出す際に証明書の読み込み用パスワード(控えておく)を設定します。

証明書の登録

 Windows Azure管理ポータルのモバイル サービスを開いて、[プッシュ]を開きます。[セクション]の[証明書]の[アップロード]ボタンをクリックします。[証明書のアップロード]ダイアログで、[ファイル]には先ほど書き出したp12ファイルを、[パスワード]にその読み込み用パスワードを設定し、[モード]を「開発」にして、右下のチェックアイコンをクリックすると設定が完了します(図4)。

図4 apple プッシュ通知の設定

デバイストークンを保持するテーブルの作成

 プッシュ通知では、通知先デバイスを特定するトークンを各端末のアプリから提供してもらう必要があります。そのトークンデータを保持するテーブルをモバイル サービスに作成します。

 ブラウザから管理ポータルにアクセスします。当該のモバイル サービスの画面に移動します。上部メニューから[データ]を選択します。下部の[+作成]ボタンをクリックします。

図5 新しいテーブルの作成

 図5のようにダイアログが表示されたら、[テーブル名]に「device」と入力し、各アクセス許可に「認証されたユーザーのみ」を選択します。これでこのテーブルには認証済みユーザーしかアクセスできなくなります。右下のチェックアイコンをクリックするとテーブルが作成されます。

プッシュ通知のためのクライアント実装

 Xcodeでプロジェクトを開きます。端末をプッシュ通知のターゲットとするための処理を実装していきます。

デバイストークンの登録処理

 QQSTodoService.hにregisterDeviceToken:メソッドの宣言を追加し、QSTodoService.mにメソッドの実装を追加します。

- (void)registerDeviceToken:(NSString *)token
{
    MSTable *deviceTbl = [self.client tableWithName:@"device"];
    [deviceTbl insert:@{ @"token": token } completion:^(NSDictionary *item, NSError *error) {
        if (error) {
            NSLog(@"Error: %@", error);
        } else {
            NSLog(@"Success: %@", item);
        }
    }];
}

認証後のプッシュ通知ターゲットとしての登録

 QSTodoListViewController.mのdidSignInメソッド内に次のコードを挿入します。ログイン後にアラート通知を受け取ることをAPNsに登録します。

    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert];

 APNsへの登録結果を処理するため、QSAppDelegate.mに下記のコードを追加します。これによって、先ほどのQSTodoServiceのregisterDeviceToken:メソッド経由でテーブルに登録されます。

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
    NSCharacterSet *charSet = [NSCharacterSet characterSetWithCharactersInString:@"<>"];
    NSString *tokenStr = [[deviceToken description] stringByTrimmingCharactersInSet:charSet];
    [[QSTodoService defaultService] registerDeviceToken:tokenStr];
}
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
{
    NSLog(@"Error: %@", error);
}
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
    NSLog(@"Notificaiton Received: %@", userInfo);
}

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。