AndroidでSOAP APIを使ったログイン

はじめに

モバイル案件で実装を検討した結果、Salesforceモバイル案件の要件定義で注意すべき3つのポイントで紹介されているように、ネイティブで独自にブランド化したログイン画面を作りたいなどのニーズにより、OAuth2.0認証、オフライン対応、Rest APIへの容易なアクセスなどの強力な機能を提供する Salesforce Mobile SDK の利用を断念せざるを得ないケースがあるかも知れません。

今回はzkSforceを使ったiOSアプリでSalesforceにログインするで紹介されているSOAP APIを使ったログインをAndroidで実装する方法をお伝えしたいと思います。

Force.com Web Services Connector(WSC)

Android(Java)からSalesforceが提供するSOAP APIへのアクセスは、「Force.com Web Services Connector(WSC)」を使うことにより簡単に行えます。Javaのサンプルコードを含む手順は、Developerforceのサイトに詳細が載っています。

本家のサイトがわかり易いのですが、簡単にどういった手順になるかを紹介しておきます。

1.SalesfoceからWSDLのダウンロード

 Salesforceの 設定 > 開発 > API のページから、Enterprise WSDL または Partner WSDLをダウンロードします。

2.Javaがインストールされていることを確認

 コマンドプロンプトから

 java -version

 で確認します。

3.WSCのjarファイルをダウンロード

 ダウンロードページからWSCのjarファイルをダウンロードします。

 執筆時点(2014/04/12)の最新は「wsc-23.jar」です。

4.JavaコードをWSDLとWSCを使って自動生成

 コマンドプロンプトから

 java -classpath wsc-XX.jar com.sforce.ws.tools.wsdlc partner.wsdl partner.jar  で生成します。

 ※Enterprise WSDLの場合は、java -classpath wsc-XX.jar com.sforce.ws.tools.wsdlc enterprise.wsdl enterprise.jar

追記(4/30)

WSCは https://github.com/forcedotcom/wsc+ maven で最新版が取得できる旨コメント頂きました。ありがとうございます。

5.クライアントサイドの実装

 4.で自動生成したJavaコードを使用して、実装を行います。

ログインのサンプルアプリ

サンプルアプリは、ユーザID/パスワードを入力し、ログインボタン押下でSOAP APIにログインを行うだけの単純なものです。 Androidプロジェクトを作成し、ビルドパスにWSDLから生成した partner.jar または enterprise.jar と wsc-23.jar を追加しておきます。

Login

ログインボタン押下のイベント

ログインボタン押下のイベントから直接SOAP APIへリクエストを行うと「NetworkOnMainThreadException」の例外が発生するので、ログイン処理をAsyncTaskLoaderを使って非同期で実行します。

ログイン処理

WSCを使って、PartnerConnectionのインスタンス生成により、内部的にSOAP APIのloginサービスがコールされます。

【SandboxおよびCommunityへの対応】 Sandboxにログインする場合、ConfigクラスのsetAuthEndpoint(String authEndpoint)メソッドを使って、SandboxのログインURLを指定します。 Communityにログインする場合、LoginScopeHeader を使用して組織IDを指定したうえでログインを行うようにします。

非同期処理の終了後

サンプルでは、PartnerConnectionのインスタンスがnullでないか否かの判定だけ行っていますが、実際には取得できたPartnerConnectionのインスタンスを使いまわして、クエリやレコードの追加・更新等のSOAP APIが提供しているサービスの操作を行うことができます。※APIコールを行う時は、メインスレッドで実行すると例外がスローされるので、非同期処理として実装します。

おわりに

AndroidでSOAP APIを使ったログインを紹介しました。簡単なサンプルですが、AndroidでもWSCを使うことで簡単にSOAP APIが利用できることをお伝えできたと思います。 ただ、この方法はどうしても譲れない要件があった場合の対応方法であり、Androidネイティブの開発を行うなら、やはり強力な機能を持つ Salesforce Mobile SDK for Android を使いたいですね。

機会があれば、Salesforce Mobile SDK for Android を使ったサンプル等をご紹介したいと思います。 今回のサンプルアプリのソースコード全てをこちらのリポジトリに公開してあります。

【告知】 TerraSky Power Night 番外編

テラスカイでは定期的に社内で勉強会を行っていますが、TerraSky Power Night 番外編と題してオンライン配信することにしました。 実際の案件を通じて得た経験をForce.comエンジニアの皆さんと共有し、Force.comコミュニティがますます盛り上がるよう多少なりとも貢献していきたいと思っています。 是非お気軽にご参加ください。

TerraSky Power Night 番外編 ~ テラスカイの社内勉強会をまるっと公開します!~

開催日時:5/9(金) 19:00-20:00

参加費:無料

場所:オンライン配信