forcedroid アプリケーションについて
学習の目的
この単元を完了すると、次のことができるようになります。
- Salesforce Mobile SDK for Android ネイティブアプリケーションの全体的なフローを説明する
- forcedroid アプリケーションの 2 つの主なクラスを特定する
- SalesforceSDKManager で処理されるタスクを挙げる
アプリケーションフローの概要
新しい forcedroid ネイティブアプリケーションを作成し、実行しました。そのしくみはどうなっているのでしょうか。
次の図は、アプリケーションの起動フローの全体的なしくみを表したものです。
アプリケーション内で「Application オブジェクト」は MainApplication クラスのインスタンスで、「メインアクティビティ」は MainActivity クラスを表します。MainApplication クラスはアプリケーションの基本コンポーネントを作成してから、制御を MobileSyncSDKManager シングルトンオブジェクトに渡します。次に、MobileSyncSDKManager (SalesforceSDKManager のサブクラス) が Salesforce ログインフローを起動し、ユーザー認証が成功した場合は、制御を MainActivity クラスに渡します。MainActivity はリストビュー画面に表示されるすべてのものをインスタンス化して表示します。
パスコード、ログイン、ログアウト、クリーンアップは MobileSyncSDKManager シングルトンで管理されるタスクです。OAuth プロトコルは内部クラスオブジェクトで処理されます。ご覧のとおり、フローのパスコード部分は省略可能です。接続アプリケーションでパスコードが有効になっている場合のみ実行されます。Salesforce システム管理者はそのポリシーをいつでも戻すことができます。ただし、いずれの場合でもパスコードについて心配する必要はありません。Mobile SDK は、バックグラウンドで完全な実装を提供しています。
forcedroid アプリケーションに含まれているもの
- Salesforce レコードに対する CRUD (作成、参照、更新、削除) 操作の実行
- カスタムアクティビティの追加
- その他のコンポーネントのコール
- プロジェクトの範囲、自分自身の想像力、そして現在のテクノロジーが許す限りのあらゆること
forcedroid でネイティブアプリケーションが作成されるときには、Mobile SDK テンプレートプロジェクトのコピーが作成され、コマンドライン入力に合わせてこのコピーがカスタマイズされます。このクッキー型で生成される標準項目をいくつか見てみましょう。
- android.app.Application を拡張するアプリケーションクラス。このクラスはアプリケーションのエントリポイントとして機能します。今回のアプリケーションでは、クラスの名前は MainApplication です。
- android.app.Activity を拡張するメインアクティビティクラス。このクラスは画面を定義し、アプリケーションのカスタムロジックのほとんどを含みます。forcedroid アプリケーションでは、このクラスの名前は MainActivity です。このクラスは SalesforceActivity を拡張し、さらにそれが android.app.Activity を拡張します。
あらゆる Android アプリケーションと同様に、AndroidManifest.xml ファイルによってアプリケーションの設定が指定され、アプリケーションクラスとすべてのアクティビティクラスが指定されます。
アプリケーションクラス
アプリケーションクラスは、次の 2 つの主要なタスクを実行します。
- Android Application.onCreate() メソッドを上書きします。
-
onCreate() 上書きで次を実行します。
- スーパークラス onCreate() メソッドをコールする。
- SDK マネージャーオブジェクトクト (MobileSyncSDKManager) で initNative() をコールして Salesforce Mobile SDK を初期化する。
- 元に戻すことができるコメント付きコードを必要に応じて提供し、アプリケーションを Salesforce ID プロバイダーとして使用する。
- 元に戻すことができるコメント付きコードを必要に応じて提供し、プッシュ通知をサポートする。
- Android Studio のようこそ画面から [プロジェクトをインポート (Eclipse ADT、Gradle など)] を選択します。または、Android Studio がすでに開いている場合は、 をクリックします。
- forcedroid コマンドプロンプトで指定したターゲットディレクトリを参照して選択します。(ヒント: 変更していなければ、ターゲットディレクトリは「TrailAndroidApps」です。)
- [選択] をクリックします。
- Android Studio の編集ウィンドウが表示されたら、プロジェクトビューを開きます ( )。
- プロジェクトウィンドウで、 を展開し、[MainApplication] をダブルクリックします。
MainApplication クラスは非常にシンプルで、1 つの基本クラスメソッド onCreate() の上書きを定義します。この上書きは何をするものなのでしょうか? スーパークラス OnCreate() メソッドをコールしてから、MobileSyncSDKManager シングルトンオブジェクトを初期化します。
/** * Application class for our application. */ public class MainApplication extends Application { @Override public void onCreate() { super.onCreate(); MobileSyncSDKManager.initNative(getApplicationContext(), MainActivity.class); /* * Uncomment the following line to enable IDP login flow. This will allow the user to * either authenticate using the current app or use a designated IDP app for login. * Replace 'idpAppURIScheme' with the URI scheme of the IDP app meant to be used. */ // MobileSyncSDKManager.getInstance().setIDPAppURIScheme(idpAppURIScheme); /* * Un-comment the line below to enable push notifications in this app. * Replace 'pnInterface' with your implementation of 'PushNotificationInterface'. * Add your Google package ID in 'bootonfig.xml', as the value * for the key 'androidPushNotificationClientId'. */ // SalesforceSDKManager.getInstance().setPushNotificationReceiver(pnInterface); } }
- アプリケーションコンテキスト。アプリケーションの設定を見つける方法を知るために必要です。
- メインアクティビティクラスへの参照 (MainActivity.class)。MobileSyncSDKManager はログインフローの最後でこれを使用してアプリケーションのカスタムロジックを実行します。
メインアクティビティクラス
幸いにも、forcedroid は優れていて、MainActivity クラスが SalesforceActivity を拡張できます。つまり、無償で多くの便利なものを手に入れることができることになります。たとえば、SalesforceActivity は自動的に一時停止および再開イベントを処理し、必要なパスコードも再入力されます。Salesforce 以外のアクティビティ基本クラスを使用している場合 (この方法は禁止されているわけではありませんが、お勧めしません)、自分でそのコードを記述することになります。アクティビティクラスは、アプリケーションに必要なだけ定義できます。ただし、すべてのアクティビティで SalesforceActivity や SalesforceListActivity などの Mobile SDK 基本クラスを拡張することをお勧めします。
MainActivity クラスは、Salesforce に REST クエリを送信し、応答を処理します。また、Salesforce から受信したレコードを使用してリストビューに入力します。さらに、ユーザーが取引先責任者または取引先へのクエリを選択できる 2 つのボタンと、レコード表示をクリアするボタン、ログアウトするボタンを表示します。
- Android Studio のプロジェクトウィンドウで、 を展開し、[main.xml] をダブルクリックします。
- エディターウィンドウの下部で、[Text (テキスト)] タブを選択します。
<include layout="@layout/header" />
アプリケーションマニフェスト
- Android Studio のプロジェクトウィンドウで、 を展開します。
- [AndroidManifest.xml] をダブルクリックします。
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.mytrail.android" android:versionCode="1" android:versionName="1.0" android:installLocation="internalOnly">
<application android:icon="@drawable/sf__icon" android:label="MyTrailNative" android:name=".MainApplication" ...
また、ユーザーまたは forcedroid によって定義されたすべてのアクティビティもここで説明されます。たとえば、この場合、単独の application/activity ノードはログイン後の最初のアクティビティを表します。ご覧のとおり、アクティビティの android:name プロパティはメインアクティビティのクラス名を参照します。forcedroid の AndroidManifest.xml ファイルの application/activity XML フラグメントを次に示します。
<!-- Launcher screen --> <activity android:name=".MainActivity" android:label="@string/app_name" android:theme="@android:style/Theme.NoTitleBar.Fullscreen"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
デフォルトのマニフェストファイルの他の部分はすべて標準の Android 設定です。他の Android アプリケーションと同様に、アプリケーション独自のコンポーネント (カスタムアクティビティ、サービス、レシーバーなど) を <application> ノードに追加できます。
forcedroid アプリケーションの内容を学習したので、次は、お待ちかねの Salesforce データへのアクセス方法に進みましょう。