JP:Getting Started with the Force.com Toolkit for iOS
Force.com Toolkit for iOS の基本を学ぶ
摘要
Force.com Toolkit for iOS を利用すると、Force.com プラットフォームと連携する iPhone アプリケーションや iPad アプリケーションの開発が可能になります。この記事では、Force.com Toolkit for iOS でアプリケーション開発を始めるための手順と、サポートされる基本操作について説明し、サンプルアプリケーションを使って具体的に機能を紹介します。
はじめに
現在、モバイルデバイスの急速な普及が進んでいます。中でも、Apple 社の iPhone と iPad の普及には目を見張るものがあります。こうした背景のもと、ますます多くの企業において、モバイルデバイスから企業の重要データにアクセスする必要性が高まっていますが、数多くの企業ではそのようなデータを Force.com プラットフォームで開発されたアプリケーションで管理しています。Force.com Toolkit for iOS は、従来 Objective-C を利用してきた開発者が Force.com と連携する iOS アプリケーションを容易に開発できるツールキットとして提供されます。
このツールキットは、iOS での開発経験があり、Force.com プラットフォームについて一定の知識をお持ちの開発者向けに設計されています。詳しい情報を得たい方は、ページの最後にある参考資料を参照してください。
Force.com Toolkit for iOS を利用する準備
次のような準備が整っていれば、Force.com Toolkit for iOS をすぐに使い始めることができます。
- 最初に、Apple 社の開発者向けサイトで iOS SDK と Xcode を入手します。ツールをダウンロードするには、開発者コミュニティのメンバー登録を済ませている必要があります。iPhone または iPad 用のアプリケーションを開発するには、このメンバー登録が必須です。登録を行うと数多くの便利なコンテンツを使用できるようになります。
- 次に、iOS アプリケーションを連携させる Force.com 組織を用意する必要があります。Force.com での開発が初めての場合は、まずこちらの記事を参照して情報を収集してください。その後、こちらでサインアップして無償の Developer Edition のアカウントを取得します (すでにアカウントをお持ちの方は、この手順は不要です)。後続のセクションで取り上げるサンプルアプリケーションでは、Salesforce の取引先オブジェクトを取得して iPhone や iPad に表示しますが、その際、Developer Edition のアカウント (組織) が必要になります。
- 最後に、Force.com Toolkit for iOS を入手します。Force.com Toolkit for iOS は、セールスフォース・ドットコムによるオープンソースプロジェクトであり、GitHub からダウンロードできます。Force.com との連携で使用するソースコードのほか、この記事で取り上げるサンプルアプリケーションの全コードが含まれています。
Force.com Toolkit for iOS を利用する
必要となる環境についての説明が済んだので、この後は、Force.com Toolkit for iOS を使ったサンプルアプリケーションの作成手順を紹介します。スピーディーに学んでいただけるよう、基本事項を中心に説明します。
プロジェクトにライブラリをインポートする
Force.com Toolkit for iOS を使用するには、Xcode プロジェクトにライブラリコードをインポートする必要があります。Xcode のユーザインターフェースでプロジェクトの [Groups & File] (グループとファイル) ペインに ZKSforce フォルダをドラッグし、デフォルトの設定を受け入れて [Add] (追加) をクリックします。
XML サポートを設定する
Force.com Toolkit for iOS では、Xcode に組み込まれている標準の libxml 実装を使用します。libxml は組み込み済みですが、プロジェクトとリンクさせるためには、次の手順を実行してプロジェクトのプロパティを変更する必要があります。
1. プロジェクトをダブルクリックして、プロジェクトの情報ウィンドウを開きます。
2. [Build] (ビルド) ツールバーボタンをクリックします。
3. 検索フィールドに「flags」と入力します。
4. [Other Linker Flags] (他のリンカフラグ) の値として「-lxml2」を入力します。
5. 検索フィールドに「search」と入力します。
6. [Header Search Paths] (ヘッダ検索パス) の値として「/usr/include/libxml2」を入力します。
7. プロジェクトの情報ウィンドウを閉じます。
ZKServerSwitchboard オブジェクト
コードのアクセス先となる Force.com Toolkit for iOS 内のメインクラスは ZKServerSwitchboard オブジェクトです。このオブジェクトはシングルトンとして設計されているため、アプリケーション内で生成されるインスタンスは 1 つだけです。ZKServerSwitchboard の関数にアクセスするには、この Force.com Toolkit for iOS のメインヘッダーをインクルードする必要があります。次のように import ステートメントを追加すると、ZKServerSwitchboard switchboard コマンドを使って、簡単にスイッチボードにアクセスできます。
#import "ZKSforce.h"
Force.com にログインする
Force.com からデータを取得するには、まず組織に対して認証を行います。Force.com Toolkit for iOS は、現在、2 種類の認証メカニズムをサポートしています。1 つはスイッチボード上でユーザ名とパスワードを受け取るシンプルなログイン方法、もう 1 つは OAuth を実装する方法です。Force.com に認証が委譲され、iOS アプリケーションでユーザの資格情報を処理する必要がないという点から、OAuth を使った認証がお勧めです。
シンプルなログイン方法
スイッチボードからログインする方法では、次のようなメソッドシグネチャを定義します。
- (void)loginWithUsername:(NSString *)username password:(NSString *)password target:(id)target selector:(SEL)selector;
このメソッドは、パラメータとして、ユーザ名とパスワードという 2 つの NSString オブジェクトを受け取ります。この処理は非同期で実行されるため、ログインに対する応答を受け取るには、コールバックのターゲットとセレクタを指定する必要があります。サンプルアプリケーションでは、次のように記述されています。
- (IBAction)login:(id)sender
{
NSString *username = @"my username";
NSString *password = @"my password";
NSString *token = @"access token"; // (セキュリティトークンを取得するには [<あなたの名前>] -> [設定] -> [私の個人情報] -> [セキュリティトークンのリセット] の順にクリック)
NSString *passwordToken = [NSString stringWithFormat:@"%@%@", password, token];
[[ZKServerSwitchboard switchboard] loginWithUsername:username password:passwordToken target:self selector:@selector(loginResult:error:)];
}
- (void)loginResult:(ZKLoginResult *)result error:(NSError *)error
{
if (result && !error)
{
NSLog(@"Hey, we logged in!");
}
else if (error)
{
NSLog(@"An error occurred while trying to login.")
}
}
OAuth を使ったログイン方法
Force.com Toolkit for iOS は、ZKOAuthViewController を介して OAuth 2.0 をサポートします。そのまま使用することも、サブクラスを定義してデザインや操作性をカスタマイズすることも可能です。
OAuth を使用するには、事前に Salesforce 組織でリモートサイトを設定しておく必要があります。[<あなたの名前>] -> [設定] -> [開発] -> [リモートアクセス] の順にクリックしてリモートアクセスの編集ページを開き、[コールバック URL] に「https://login.salesforce.com/services/oauth2/success」、または「my-app://login/success」などのカスタムの URL スキームを設定します。これにより、Force.com Toolkit for iOS ではセッションキーを定期的に自動更新して、ユーザのログインを保持します。
リモートサイトを設定したら、コンシューマ鍵をアプリケーションにコピーして、ビューコントローラとサーバースイッチボードに渡します。OAuth を使用する方法は、スイッチボードからログインする方法と同じくらい簡単ですが、非常に高度なセキュリティをユーザに提供します。次に、OAuth を実装したコードの例を示します。
#define kSFOAuthConsumerKey @"3MVG9Km_cBLhsuPx1wfiUYQnz8DJA.dWDx8FcddHJrhuNVSbVSIjb.G8InICLCqhL2ln.FpWhtbwpR.dsFUvM"
- (IBAction)login:(id)sender
{
oAuthViewController = [[ZKOAuthViewController alloc] initWithTarget:self selector:@selector(loginOAuth:error:) clientId:kSFOAuthConsumerKey];
oAuthViewController.modalPresentationStyle = UIModalPresentationFormSheet;
[mainViewController presentModalViewController:oAuthViewController animated:YES];
}
- (void)loginOAuth:(ZKOAuthViewController *)oAuthViewController error:(NSError *)error
{
if ([oAuthViewController accessToken] && !error)
{
NSLog(@"Hey, we logged in!");
[[ZKServerSwitchboard switchboard] setClientId:kSFOAuthConsumerKey];
[[ZKServerSwitchboard switchboard] setApiUrlFromOAuthInstanceUrl:[oAuthViewController instanceUrl]];
[[ZKServerSwitchboard switchboard] setSessionId:[oAuthViewController accessToken]];
[[ZKServerSwitchboard switchboard] setOAuthRefreshToken:[oAuthViewController refreshToken]];
[mainViewController dismissModalViewControllerAnimated:YES];
[oAuthViewController autorelease];
}
else if (error)
{
NSLog(@"An error occurred while trying to login.");
}
}
クエリを実行する
ログインに成功すると、シングルトンオブジェクト ZKServerSwitchboard を使って Force.com からデータを取得できるようになります。この処理はクエリメソッドによって実現されますが、ここでは、次のようなパラメータを使用します。
- SOQL クエリのテキスト (NSString として指定)
- 処理の完了時に呼び出すオブジェクトとセレクタ
- 結果と一緒に戻すコンテキストオブジェクト (指定は任意)
次に、取引先オブジェクトの情報を取得するコードの例を示します。
- (void)fetchAccounts
{
NSString *queryString = @"Select Id, Name, BillingStreet, BillingCity, BillingState, BillingPostalCode, BillingCountry, Phone, ShippingStreet, ShippingCity, ShippingState, ShippingPostalCode, ShippingCountry, Type, Website From Account";
[[ZKServerSwitchboard switchboard] query:queryString target:self selector:@selector(queryResult:error:context:) context:nil];
}
- (void)queryResult:(ZKQueryResult *)result error:(NSError *)error context:(id)context
{
if (result && !error)
{
NSLog(@"We got back %i results", [[result records] count]);
self.dataRows = [NSMutableArray arrayWithArray:[result records]];
[self.tableView reloadData];
}
else if (error)
{
NSLog(@"handle error");
}
}
ZKQueryResult オブジェクトには、結果のレコードを配列 NSArray として返す records メソッドがあります。
このレコード配列に格納される各オブジェクトは、動的なプロパティを持つ ZKSObject であり、Force.com のオブジェクト内で定義された項目に対応付けられた -fieldValue を介してアクセスできます。ここで、ZKSObject は、Force.com で使用される SObject の Objective-C 版であると考えることができます。
CRUD のサポートとその他の操作
今回の記事では基本的な操作を中心に紹介してきましたが、Force.com Toolkit for iOS は、Force.com との連携に関して CRUD (作成、参照、更新、削除) の各操作を完全にサポートしており、これらは、上記と同様の手順で実行できます。すなわち、スイッチボードを使ってメソッドを呼び出し、処理の完了時に呼び出すターゲットとセレクタを指定し、必要に応じてコンテキストオブジェクトを指定するという、iOS 開発者が日ごろ慣れ親しんだパターンで Force.com を利用できるようになっています。次のセクションで紹介するサンプルアプリケーションには、この CRUD を使用するコードや、Force.com を通じて公開されるカスタム Web サービスにアクセスするためのコードが記述されています。完全なコードは Force.com Toolkit for iOS 内に格納されていますが、全体に目を通していただければ、今回取り上げなかったその他の機能についての理解も深まるでしょう。
サンプルコード
GitHub で公開されている Force.com Toolkit for iOS プロジェクトには、サンプルのコードが含まれています (今回の記事で使用したコードも、このサンプルコードが元になっています)。サンプルアプリケーションは、[SVNTest] フォルダに格納されています。このフォルダには、Xcode プロジェクト用のファイルも含まれており、ファイルをダブルクリックすると、プロジェクトが開きます。
サンプルアプリケーションを使用するには、前に説明した方法でリモートサイトを作成し、コンシューマ鍵を SVNTestAppDelegate.m ファイルにコピーする必要があります。
コピーが済んだら [Build and Run] (ビルドと実行) をクリックすれば、サンプルアプリケーションを実行できます。
まとめ
日ごろ Objective-C を使って iOS アプリケーションを開発している開発者の皆さんは、Force.com Toolkit for iOS を利用することで、Salesforce CRM アプリケーションや Force.com プラットフォームと連携するアプリケーションの開発をスピーディーに進められるようになります。今回の記事では、すぐに開発をスタートしていただけるよう、基本的な操作に的を絞って解説しました。Force.com Toolkit for iOS は、このほかにも、カスタムの Web サービスのサポート、一般的な CRUD 操作など、Force.com でよく使用される数多くの機能に対応しています。
執筆者について
Quinton Wall は、セールスフォース・ドットコムのデベロッパーエバンジェリストとして、クラウドコンピューティングと Force.com の普及、推進のため、日々コードを書き、ドキュメントを執筆し、テクノロジーに取り組んでいます。コードを書いていないときにはファンタジー小説を書いています。詳しくは本人のサイト (英語) をご覧ください。
Rick Fillion は、Centrix.ca 社のリードデベロッパーです。カナダ在住の Rick は、雪かきにいそしみつつ、Mac や iOS 用のすばらしいアプリケーションを開発しています。Force.com Toolkit for iOS のコードの大部分は、彼の手によるものです。ブログ (英語) も随時更新しています。
Dave Carroll は、サンプルアプリケーションの最初のバージョンをとりまとめ、いつものことながら、画期的な成果物を生み出してくれました。
Simon Fell は、このすばらしいツールキットの最初のひな形を作成し、プロジェクトの生みの親として多大な貢献をしてくれました。
参考資料
- Force.com プラットフォームでの開発に関するリソース
- GitHub 上の Force.com Toolkit for iOS のダウンロードページ (英語)
- OAuth のホームページ (英語)
- Apple 社の開発者向けサイト内の iOS Dev Center (英語)
