zkSforceを使ったiOSアプリでSalesforceにログインする

はじめに

前回の記事では、「Salesforceモバイル案件の要件定義で注意すべき3つのポイント」を紹介しました。その際、要件のパターンによって使う開発ツールが変わることを説明し、「ログイン画面の独自ブランディングがあり、オフライン要件があるパターン」では、zkSforceを使用するのがよいとご紹介しました。

zkSforceは、一言でいうと「Objective-Cで利用可能なSalesforce SOAP APIのラッパーライブラリ」です。要件によっては、Salesforce公式のMobile SDKを使用するのをおすすめしますが、現時点では、前述のとおりzkSforceを選択すべきケースもあります。zkSforceを利用することで、認証やSOQLを使ったロジックの記述を楽に開発することができます。しかしながら、zkSforceに関する日本語の情報はほぼない状態です。

今回の記事では、そのzkSforceを利用し、ログイン処理を実装する部分を紹介します。

zkSforceのインストール

zkSforceはcocoapodsで簡単にインストールできます。ここでは、cocoapodsのインストール方法の解説は省略しますが、rubyが動作する環境であれば公式サイトに記載されている手順で簡単にインストール可能ですので、公式サイトを確認してください。

cocoapodsのインストールができたら、プロジェクト直下にPodfileというファイルを作成し、以下のようなzkSforceを使用するための設定を1行追加します。

Podfileができたら、プロジェクト直下でコマンドラインから以下のコマンドを入力すれば、実装中のiOSアプリのプロジェクトにzkSforceが組み込まれた状態になります。

$ pod install

zkSforceがpodとして組み込まれた後は、Xcodeを開くときに、MyProject.xcodeprojではなく、MyProject.xcworkspaceファイルのような.xcworkspaceファイルを使って開きます。

通常のログインとコミュニティへのログイン

サンプルアプリスクリーンショット
図1. サンプルアプリスクリーンショット

zkSforceを使用する準備ができましたので、簡単なログイン処理を例に使い方を説明します。といっても、全ソースコードを紹介し、説明すると長くなるので、肝心のログインリクエストの部分だけ説明します。また、Salesforce Communities for Partnerを使用している場合は、少しだけログイン方法が変わるので、それも紹介します。 zkSforceを使って、Salesforceの組織にログインする場合は、ZKSforceClientクラスのloginメソッドを使います。

ログインが成功した場合、ZKLoginResultクラスのインスタンスが取得でき、そのインスタンスにはセッションIDが設定されています。このセッションIDは、その後のSOAP APIの通信で内部的に使用されるものです。結果として得たセッションIDは、ZKLoginResultクラスのsessionIdプロパティにアクセスすることで取得可能です。

通常のSalesforce組織へのログインの場合は、これで良いのですが、Salesforce Communities for Partnerのコミュニティユーザーがログインするようなアプリの場合は、loginメソッドではなく、portalLoginメソッドを使います。また、組織IDも指定する必要があります。

このようにSalesforceへのログイン処理は、zkSforceのライブラリを使って簡単に実装することができます。なお、今回は紹介していませんが、zkSforceでは上記のようにSOAP APIのloginを使用したやり方以外に、OAuth認証もサポートしています。

おわりに

今回は、zkSforceの導入方法を紹介し、また、簡単なログイン処理のサンプルをご紹介しました。ご紹介したサンプルはあくまで説明用のもので非常にシンプルですが、実際の認証機能を構築する場合は、ログイン処理を非同期化してサーバー側でのチェック中にアクティビティインディケーターを表示したり、ログイン後にSalesforceがセッションタイムアウトした場合に、再びログイン画面が表示される仕組みを構築したり、 適切な例外処理を行ったり、さまざまな機能を実装する必要があります。しかしながら、今回のサンプルを確認することで、zkSforceを使用してロジックを構築していくことができそうな気がしてきたのではないでしょうか。

なお、今回、ご紹介したログインのサンプルアプリは、この記事の筆者の個人的なリポジトリに全てのソースコードを公開しておりますので、参考にしてください。