Azure HockeyApp とは
HockeyApp | Microsoft Azure
モバイル アプリの開発、配布、ベータ テスト
Android、Cordova、iOS、OS X、Unity、Windows、Xamarin のアプリをサポート
- 信頼できるクラッシュ レポートを即時に利用可能
- アプリ内で実際のユーザーからフィードバックを収集
- アプリで実行中のコードを把握できるオープン ソース SDK
- 既存のビルド システムおよび作業項目管理ソリューションに統合
HockeyAppは、2014/12/11にMicrosoftにジョインし、Azureの一員となった モバイル DevOps ソリューションになります。テスト担当者にビルドを配布、メトリックスの追跡やクラッシュの情報を収集したり、ユーザーからのフィードバックを得ることが出来ます。
HockeyAppを使ってみる
HockeyAppにサインイン
-
ブラウザでHockeyAppを表示します。
https://www.hockeyapp.net/
※コンソールはAzure ポータルに統合はされていませんが、Microsoft Accountでのサインインには対応しています。
HockeyAppにAppの作成
ログインするとアプリケーションのチュートリアルが始まります。
今回は、AndroidアプリにHockeyAppを組み込みたいと思います。
-
[Create App]画面で、[Platform]は[Android]を選択、[Releate Type]は[beta]を選択(※テスター配布目的のため)、[Title]と[Package Name]に任意の名前を入力し、[Next Step]をクリックします。
-
[Add dependency]に、アプリに設定する内容が表示されます。
-
[Integrate SDK]の、アプリに設定する内容が表示されます。
Androidアプリの作成
-
アプリ作成
-
アプリのActivityに[Navigation Drawer Activity]を選択
-
build.gradleの設定
-
android -> defaultConfig に HOCKEYAPP_APP_IDを追加
manifestPlaceholders = [HOCKEYAPP_APP_ID: "1234567890123456789012345678901"]
-
android -> dependencies に HockeySDKを追加
compile 'net.hockeyapp.android:HockeySDK:4.1.1'
-
-
AndroidManifest.xmlの設定
-
application に HOCKEYAPP_APP_IDのmeta-dataを追加
<meta-data android:name="net.hockeyapp.android.appIdentifier" android:value="${HOCKEYAPP_APP_ID}" />
-
クラッシュ レポーティング
アプリにクラッシュレポート機能を追加します。
-
MainActivityに以下の行を追加します。
@Override protected void onResume() { super.onResume(); checkForCrashes(); } private void checkForCrashes() { CrashManager.register(this); }
onReasume 時に、クラッシュレポーティングの機能を有効にし、以前のクラッシュが存在するかチェックします。クラッシュが存在した場合、HockeyAppにクラッシュログを送信するかどうかの確認ダイアログが表示されます。
-
任意のタイミングで以下のよう例外を発生させてみます。
throw new RuntimeException("Oops! RuntimeException!");
-
アプリを再起動すると、クラッシュログ送信の確認ダイアログが表示されます。
[SEND REPORT]をタップします。
-
ユーザーの確認無しに、クラッシュログを自動的に送信したい場合は、CrashManagerListenerをカスタムします。
private void checkForCrashes() { String appIdentifier = Util.getAppIdentifier(this); CrashManager.register(this, appIdentifier, new CrashManagerListener() { @Override public boolean shouldAutoUploadCrashes() { // クラッシュログを自動的に送信 return true; } }); }
アップデートの配布
アプリ内にアップデートの機能を追加します。
-
MainActivityに以下の行を追加します。
@Override protected void onCreate(Bundle savedInstanceState) { // ... checkForUpdates(); } @Override public void onPause() { super.onPause(); unregisterManagers(); } @Override public void onDestroy() { super.onDestroy(); unregisterManagers(); } private void checkForUpdates() { UpdateManager.register(this); } private void unregisterManagers() { UpdateManager.unregister(); }
onCreate 時に、バックグラウンドでアップデートのチェックを行います。新しいアップデートが存在した場合、アラートダイアログが表示されます。
-
HockeyAppのAppページでAPKを更新します。
-
アラートダイアログで、[SHOW]ボタンをタップすると、アップデートの画面が表示されます。
[UPDATE]ボタンをタップするとアプリのインストールが始まります。
アプリ内フィードバック
アプリ内からのユーザーフィードバック機能を追加します。
-
MainActivityに以下の行を追加します。
@Override public void onCreate(Bundle savedInstanceState) { // ... FeedbackManager.register(this); FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { FeedbackManager.showFeedbackActivity(MainActivity.this); } }); }
FloatingActionButtonでフィードバックを送るFeedbackActivityを起動出来るようにします。
-
アプリを再ビルドし再起動
-
HockeyAppのAppページでフィードバックの確認
-
アプリでフィードバックに対してのコメントを確認
ユーザーメトリックス
ユーザーのアプリの使用状況を自動的に計測する機能を追加します。
-
MainActivityに以下の行を追加します。
@Override public void onCreate(Bundle savedInstanceState) { // ... MetricsManager.register(getApplication()); }
これだけで、セッションとユーザーの統計を収集することが出来ます。
-
カスタムイベントを追加するには以下の行を追加します。
MetricsManager.trackEvent("YOUR_EVENT_NAME");
以下のコードでは、Navigation Drawerのイベントをトラッキングしています。
@SuppressWarnings("StatementWithEmptyBody") @Override public boolean onNavigationItemSelected(MenuItem item) { // Handle navigation view item clicks here. int id = item.getItemId(); if (id == R.id.nav_camera) { // Handle the camera action MetricsManager.trackEvent("NAV_CAMERA"); } else if (id == R.id.nav_gallery) { MetricsManager.trackEvent("NAV_GALLERY"); } else if (id == R.id.nav_slideshow) { MetricsManager.trackEvent("NAV_SLIDESHOW"); } else if (id == R.id.nav_manage) { MetricsManager.trackEvent("NAV_MANAGE"); } else if (id == R.id.nav_share) { MetricsManager.trackEvent("NAV_SHARE"); } else if (id == R.id.nav_send) { MetricsManager.trackEvent("NAV_SEND"); } DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); drawer.closeDrawer(GravityCompat.START); return true; }
-
HockeyAppのAppページでカスタムイベントの確認
注)メトリックスのアップロードと反映には少し時間が掛かります。
まとめ
Azure HockeyAppを使用すると、ベータ配信/クラッシュレポート/ユーザーメトリックス/ユーザーフィードバックなど、アプリ品質を向上させるための仕組みを簡単に組み込むことが出来ました。
基本的にはアプリの管理はWebだけで完結することが出来ますが、ネイティブのツールも提供されており使いやすくなっています。 -> HockeyApp for Mac, HockeyApp for Android
iOSのツールも提供されており、配布の為にデバイスのUUIDの収集などを用意にしてくれます。 -> HockeyApp for iOS
サードパーティの Bug Trackers, Services, and Webhooks (GitHub,Slack等々) がサポートされているのでDevOpsのエコシステムに組み入れるのは容易ではないと思います。 -> Knowledge Base - HockeyApp Support
Let's play Hockey!