第5章 Xamarin
5.1. ダウンロード
5.2. はじめに
これは、ネイティブ iOS、Android および Windows Phone アプリを C# で作成することを可能にする標準的な Xamarin アプリです。
この SDK 自体は、こちらでホストされるオープンソースプロジェクトです。ご自由にプロジェクトのフォークを行い、このプロジェクトに貢献してください。
この SDK を使用する前に、Xamarin 開発者ツールがインストールされていることを確認してください。これらは、こちらからダウンロードできます。
Windows Phone アプリを開発するには、Windows Phone Developer Tools をインストールしておく必要があります。これは、こちらからダウンロードできます。
Xamarin For Visual Studio をインストールすることもお勧めします。
5.3. 新規アプリ
サンプルアプリをダウンロードし、すでに RHMAP SDK が組み込まれている新規の Xamarin アプリを使って開始します。
このアプリには 4 つのサブプロジェクトが含まれます。このアプリは、すべてのアプリでコードを共有するために Portable Class Library を使用できるようにセットアップされています。この方法についての詳細は、こちらを参照してください。
-
App.Core: PCL プロジェクトです。このプロジェクトのコードは他のアプリによって共有されます。アプリのビジネスロジックのほとんどをここで定義する必要があります。 -
App.WP: Windows Phone アプリプロジェクトはApp.Coreプロジェクトに依存します。通常、これには UI コードと WP 固有のコードが含まれます。 -
App.Android: Android アプリプロジェクトはApp.Coreプロジェクトに依存します。通常、これには UI コードと Android 固有のコードが含まれます。 -
App.iOS: iOS アプリプロジェクトはApp.Coreプロジェクトに依存します。通常、これには UI コードと iOS 固有のコードが含まれます。
5.4. 既存アプリ
SDK のプロジェクトへのインストールは、(NuGet を使用して) 自動で行うことも、手動で行うこともできます。
5.4.1. NuGet (推奨)
FH SDK は NuGet (https://www.nuget.org/packages/FH.SDK/) から利用できます。Xamarin Studio 内で NuGet プラグインを使用している場合は、FH.SDK を検索してください。NuGet は依存関係のライブラリーを自動的にインストールします。
5.4.2. 手動
SDK をダウンロードし、これを展開します。プロジェクトのビルドターゲットに対応するフォルダーから .dll アセンブリーファイルを参照として追加します。
Portable Class Library プロジェクトを開発している場合は、FHSDK.dll ファイルのみを参照します。
この SDK は、Json.Net および Microsoft HTTP クライアントライブラリーに依存しています。これらのライブラリーのアセンブリーも、プロジェクトで利用可能でない場合はインストールする必要があります。
5.4.3. 設定のセットアップ
プラットフォーム固有のそれぞれのアプリケーションについて、対応する設定ファイルを作成する必要があります。それぞれのファイルの内容は、各プラットフォームのネイティブ SDK doc に記載される内容と同じである必要があります。
5.4.4. iOS
fhconfig.plist がアプリケーションのルートにあります。Build Action を BundleResource に設定します。
fhconfig.plist ファイルの内容:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>host</key> <string>__APP_STUDIO_HOST__</string> <key>appid</key> <string>__ID_OF_APP_IN_PROJECT__</string> <key>projectid</key> <string>__PROJECT_ID__</string> <key>appkey</key> <string>__APP_API_KEY_OF_APP_IN_PROJECT__</string> <key>connectiontag</key> <string>__CONNECTION_TAG_TO_USE_FOR_CLOUD__</string> </dict> </plist>
5.4.5. Android
fhconfig.properties がアプリケーションの Assets ディレクトリーにあります。Build Action を AndroidAsset に設定します。
fhconfig.properties ファイルの内容:
host = __APP_STUDIO_HOST__ projectid = __PROJECT_ID__ connectiontag = __CONNECTION_TAG_TO_USE_FOR_CLOUD__ appid = __ID_OF_APP_IN_PROJECT__ appkey = __APP_API_KEY_OF_APP_IN_PROJECT__
5.4.6. Windows Phone 8
fhconfig.json がアプリケーションのルートにあります。Build Action を Content に設定します。
fhconfig.json ファイルの内容:
{
"appid": "__ID_OF_APP_IN_PROJECT__",
"appkey": "__APP_API_KEY_OF_APP_IN_PROJECT__",
"connectiontag": "__CONNECTION_TAG_TO_USE_FOR_CLOUD__",
"host": "__APP_STUDIO_HOST__",
"projectid": "__PROJECT_ID__"
}接続についての詳細は、こちらを参照してください。
5.4.7. 初期化
RHMAP .NET SDK を使用するには、アプリの起動が終了する際に、プラットフォーム固有のプロジェクト (PCL プロジェクトではない) で以下のように SDK を初期化する必要があります。
try
{
bool inited = await FHClient.Init();
if(inited) {
//Initialisation is successful
}
}
catch(FHException e)
{
//Initialisation failed, handle exception
}FHClient は以下のネームスペースで利用できます。
-
FHSDK.Phone: WP8 -
FHSDK.Droid: Android -
FHSDK.Touch: iOS
アプリのビルドターゲットに応じ、上記のネームスペースの 1 つのみをアプリで利用可能にする必要があります。
複数の異なるネームスペースで同じ FHClient クラスを定義するのは、主にプラットフォーム固有のアセンブリーファイルを適切にロードする必要があるためです。
Init メソッドのみが FHClient クラスを使用して呼び出され、かつプラットフォーム固有のプロジェクトから呼び出す必要のあるメソッドです (例: PCL プロジェクトからは呼び出すことができません)。
これ以外のすべての SDK メソッドは、FHSDK.dll アセンブリーで定義される FH クラスを使用して呼び出されます。このアセンブリーは他の PCL プロジェクトから参照することができます。このようにクロスプラットフォームソリューションに PCL プロジェクトが含まれる場合、このアセンブリーファイルを参照し、そこから SDK 機能を呼び出すことができます。
5.5. HttpClient の独自オプションの使用
デフォルトで、.NET SDK は Microsoft HTTP クライアントライブラリを使用してすべての HTTP 要求を実行します。ただし、Xamarin を使用して iOS と Android アプリを開発している場合には、ModernHttpClient を選択する方が良いでしょう。これを使用するには、アプリに ModernHttpClient コンポーネントをインストールすることのみが必要であり、以下のようにこれを使用します。
//the following should be called BEFORE FHClient.Init is called //use ModernHttpClient on Android FHHttpClientFactory.Get = (() => new HttpClient(new OkHttpNetworkHandler()));
上記のいずれも使用することを望まない場合は、いずれかの HTTP (または REST) を使用できます。この場合、必要になるのはアプリのクラウドホストのみで、以下のメソッドを使って取得できます。
string cloudHost = FH.GetCloudHost();
ただし、この方法には、一部のデータが要求内に欠落するため、プラットフォームによって提供される分析サービスをアプリで使用できなくなるという不利な点があります。分析サービスを再度有効にするには、以下のメソッドで返されるメタデータを、ヘッダーのセットとして各 HTTP 要求に追加することのみが必要になります。
IDictionary<string, string> metaData = FH.GetDefaultParamsAsHeaders();
HttpRequestMessage requestMessage = new HttpRequestMessage(...);
//then loop through the metaData and add each entry as a http header to your request, using the key as the header name and value as the header value
foreach(var item in metaData){
requestMessage.Headers.Add(item.Key, item.Value);
}
...5.6. SDK の使用
SDK 内で利用可能な API についての詳細は API Docs を参照してください。

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.