DeployGate を Xamarin.Android で使う

mixi社が開発する DeployGate を Xamarin.Android で利用する方法を解説します。

*予めDeployGateSDKをダウンロードしてzipを展開しておいてください。*
https://deploygate.com/docs/sdk

----
#■ソリューションの作成

今回は「DeployGateTest」としました。
プロジェクトを「Android Application」として作成します。
同時にプロジェクト「DeployGateTest」も作成します（自動で作成されます）。
![](https://www.dropbox.com/s/vs6muhmzdqu767x/Xamarin.Android%20%E3%81%A7%20DeployGate%20%E3%82%92%E4%BD%BF%E3%81%86%E6%96%B9%E6%B3%951.png?dl=1)

作成したソリューションにDeployGateSDKをラップするプロジェクトを追加します。
「DeployGate」という名前で「Android Java Bindings Library」として作成します。
![](https://www.dropbox.com/s/isdmta160gua5f1/Xamarin.Android%20%E3%81%A7%20DeployGate%20%E3%82%92%E4%BD%BF%E3%81%86%E6%96%B9%E6%B3%952.png?dl=1)

DeployGate に DeployGateSDK の deploygatesdk.jar を Jars に追加します。
![](https://www.dropbox.com/s/91967t7izrgy0kq/Xamarin.Android%20%E3%81%A7%20DeployGate%20%E3%82%92%E4%BD%BF%E3%81%86%E6%96%B9%E6%B3%954.png?dl=1)

[プロジェクトオプション]-[ビルド]-[Android Build]
[Fast deployment(deubg mode only] を**オフ**に設定する。
![](https://www.dropbox.com/s/fdz70nigk062tsn/Xamarin.Android%20%E3%81%A7%20DeployGate%20%E3%82%92%E4%BD%BF%E3%81%86%E6%96%B9%E6%B3%959.png?dl=1)

DeployGateTest に DeployGate を参照させます。 
![](https://www.dropbox.com/s/ldw9fomxgvv63cx/Xamarin.Android%20%E3%81%A7%20DeployGate%20%E3%82%92%E4%BD%BF%E3%81%86%E6%96%B9%E6%B3%955.png?dl=1)

[Xamarin.Android でオレオレ Application クラスを使う](http://qiita.com/items/0aa8cbfe2eddda399378)
を参考にApplicationクラスを追加します。

OnCreate内の
DeployGate.Install(this); 
でDeployGateの初期化を行います。

```c#:App.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;

using Com.Deploygate.Sdk;

namespace DeployGateTest
{
    [Application]
    class App : Application
    {
        public App(IntPtr javaReference, JniHandleOwnership transfer)
            : base(javaReference, transfer)
        {
        }

        public override void OnCreate()
        {
            base.OnCreate();

            DeployGate.Install(this);
        }
    }
}
```

#■確認
ビルドして、出来上がったapkファイルをDeployGateのサイトにアップロード。そして端末にインストール。
反応しているのが確認できると思います。すごい！
![](https://www.dropbox.com/s/bzjhzkswtbfxdyo/Xamarin.Android%20%E3%81%A7%20DeployGate%20%E3%82%92%E4%BD%BF%E3%81%86%E6%96%B9%E6%B3%957.png?dl=1)

メッセージ文字列を送ってみます。
MainActivity.cs を以下のように編集して、ビルド＆サイトに転送＆実行。

```c#:MainActivity.cs
using System;

using Android.App;
using Android.Content;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;

using Com.Deploygate.Sdk;

namespace DeployGateTest
{
    [Activity (Label = "DeployGateTest", MainLauncher = true)]
    public class Activity1 : Activity
    {
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);

            SetContentView(Resource.Layout.Main);

            var button = FindViewById<Button>(Resource.Id.myButton);
			
            button.Click += (s, e) => DeployGate.LogDebug("log message from DeployGateTest");    
        }
    }
}
```

Android上のボタンをタップすると、メッセージを転送してサイトがリアルタイムに受信しているのが確認できると思います。すごい！すごい！
![](https://www.dropbox.com/s/rom5hkr4nclncad/Xamarin.Android%20%E3%81%A7%20DeployGate%20%E3%82%92%E4%BD%BF%E3%81%86%E6%96%B9%E6%B3%958.png?dl=1)

#■まとめ
この方法を使えば、Xamarin.Android から jarも問題なく動作させることができます。
DeployGateも問題ないですね。
DeployGateすごい。
Xamarin.Androidもすごい。

#■参照
Binding a Java Library (.jar)  http://docs.xamarin.com/guides/android/advanced_topics/java_integration_overview/binding_a_java_library_(.jar)