モバイル アプリ

進化するプッシュ通知とモバイル分析

Kevin Ashley

コード サンプルのダウンロード

新しいモバイル アプリの複雑さが増すなか、開発者は新たなレベルのプッシュ通知サービスに関心を寄せています。プッシュ通知サービスを使った分析、市場細分化、レポート、顧客拡大などが、あらゆる大手プラットフォームで利用できるようになっています。マイクロソフトは最近、Capptain プラットフォームを買収しました。Capptain プラットフォームは、今挙げたサービスをすべて提供すると同時に、これ以外のサービスもいくつか提供します。

Capptain はまだ Microsoft Azure に統合されていませんが、開発者向けには既に capptain.com でサービスを利用できるようにしています。Azure では、Windows8、Android、および iOS の各プラットフォームの開発者向けに、プッシュ通知を対象とする信頼性の高いサービス群を提供しています。今回はモバイル開発者に向けて、プッシュ通知に関する高度なトピックをいくつか紹介します。 

Capptain は多種多様な分析を用意して、開発したアプリが使われるデバイスや、使用傾向など、アプリについて把握しておくべき情報を開発者に提供します。その結果、アプリを投入する市場区分を定義し、マーケティング キャンペーンを作成して、プッシュ通知を利用してアプリを収益化できます。強力なテクノロジですが、わずかな初期手順で利用を始めることができます。

モバイル開発者であれば、Capptain と Azure Mobile Services を組み合わせて利用するメリットはすぐに思い浮かびます。以前に開発した Active Fitness アプリ (activefitness.co) にはかなりのユーザー ベースがあります。今回のコラムは、Capptain を試し、このアプリの製品版に取り入れるチャンスだと考えました。

Capptain の概念

ここでは、アクティビティ、ジョブ、アプリケーション情報 (appinfo)、追加データ (extras) という Capttain の主要概念を扱います。図 1 に Capptain の概念と用語をほぼすべて一覧しています。この表は、Capptain の機能を理解する良い出発点になるでしょう。

図 1 Capptain の用語と概念

デバイス 各デバイスが一意識別子を持ちます。同じデバイス上に複数のアプリがある場合、デバイス識別子 (deviceid) は同じです (Windows Phone の deviceid はデバイスおよびパブリッシャーごとに一意になります)。
ユーザー Capptain は暗黙のうちに 1 人のユーザーに 1 台のデバイスを割り当てるため、デバイスとユーザーは同じ概念です。
セッション セッションは、ユーザーが実行するアプリケーションごとに 1 つ使用されます。セッションはユーザーが実行するアクティビティのシーケンスに従って自動的にコンピューターによって割り当てられます。セッションを開始または停止する必要はありません。代わりに、アクティビティを開始または停止します。アクティビティが報告されなければ、セッションも報告されません。
アクティビティ アクティビティは、1 人のユーザーが実行したアプリケーションの特定部分ごとに 1 つ使用されます (通常は 1 画面に相当しますが、アプリケーションにとって適切であれば画面以外になることもあります)。ユーザーが同時に実行できるアクティビティは 1 つだけです。アクティビティには継続時間があり、アクティビティが開始した時点から停止する時点までを表します。
イベント イベントは瞬時のアクションで、アクティビティとは異なり、継続時間がありません。
ジョブ ジョブはアクティビティに似ています。開始または停止でき、継続時間もあります。ジョブはバックグラウンド タスクを意図するもので、UI がない場合もあります。
エラー エラーは、アプリから正しく報告される問題点です。
クラッシュ Capptain SDK は、クラッシュおよびアプリの不具合を自動的に報告します。
アプリケーション情報 (AppInfo) これはユーザーにタグ付けをするために使用されます (クッキーに似ています)。Capptain は、特定の 1 つのキーに対して最新値だけを管理します (履歴はありません)。appinfo の値を設定または変更すると、Capptain によってその appinfo の対象基準の設定 (存在する場合) が強制的に再評価されます。つまり、appinfo を使ってリアルタイム プッシュ通知をトリガーすることができます。
追加データ (Extras) 追加データ (extras) は、イベント、エラー、アクティビティおよびジョブにアタッチできる任意のデータです。このデータを使って、アクティビティやジョブなどのセグメントを識別する方法を作成できます。

アクティビティが Capptain の基盤となる概念です。たとえば、アプリ内でユーザーが表示する 1 ページがアクティビティになります。継続時間を持つ論理アクティビティも可能です。ジョブも継続時間のある概念ですが、ジョブはバックグラウンド タスクと関連付けられ、必ずしも UI と結び付いているわけではありません。

Capptain は、iOS、Android、および Windows 8 という主要プラットフォームに対して、多種多様な API とネイティブ SDK を提供しています (図 2 参照)。

図 2 Capptain が提供する多種多様なAPI

Analytics API Analytics API は HTTP API です。この API を使用して、分析データを取得できます (Capptain Web サイトの [Analytics] タブ参照)。
Monitor API Monitor API は XMPP API です。この API を使用して、リアルタイム監視データを取得できます (Capptain Web サイトの [Monitor] タブ参照)。
Segments API Segments API は HTTP API です。この API を使用して、Capptain のセグメントを管理できます (Capptain Web サイトの [Segments] タブ参照)。
Reach API Reach API は HTTP API です。この API を使用して、Captain Web インターフェイスを手動で使わなくても、Reach キャンペーンを管理できます。Reach API は高レベルの API なので、Capptain Reach キャンペーン マネージャーの Web インターフェイスを活用できます。
Device API Device API は HTTP/REST API です。この API を使用して、開発したアプリケーションを使用しているすべてのデバイス (ユーザー) について Capptain プラットフォームが収集したすべての情報を取得して、補強することができます。
Push API Push API は HTTP API です。この API を使用して、Capptain SDK を埋め込んだアプリケーションを実行しているデバイスに、カスタム データをプッシュできます。
SDK API SDK API は HTTP API です。この API を使用して、シンプルな HTTP API を使用しながらも、ネイティブ SDK と同様のログを報告できます。
Account API Account API は、一連の HTTP API です。この API の目的は、アカウント関連の情報を取得または更新することです。

上記の API 以外にも、Capptain は主要プラットフォームすべてに対して、複数の SDK を提供しています (図 3 参照)。

図 3 Capptain が提供する主要プラットフォーム サポート SDK

Android SDK Native Android SDK
iOS SDK Native iOS SDK
Web Web SDK
Windows Phone Windows Phone SDK
Windows 8 Windows Store SDK

Capptain の使用開始

まず、capptain.com に移動し、アカウントを作成します。アカウントを作成したら、Android、iOS、Windows Phone、Windows Store(Windows 8.x)、Web のいずれかを選択してアプリをセットアップします。各アプリには関連付けられた SDK があります。こうした SDK の使い方を示す前に、Capptain の概念についていくつか説明します。Capptain では、一連のデモ アプリケーションが提供されており、アカウント ページの下部に示されています。また、既に使用しているデータに対して、どのような種類の分析が提供されるかを確認することもできます。

アクティビティの追跡を実装

Capptain の使用を開始するには、プラットフォームに適した SDK を使用します。以前、Windows 8.1 用の SDK の使用方法を示すサンプルを GitHub に配置しました。他のプラットフォームの SDK も同様に機能するため、使用する基本概念は同じです。

Package.appxmanifest で、インターネット機能が有効になっていることを確認する必要があります。Package.appxmanifest ファイルの [宣言] パネルに移動します。[使用可能な宣言] で [ファイルの種類の関連付け] を選択して追加します。画面右側の [名前] フィールドに「capptain_log_file」と入力し、[ファイルの種類] フィールドに「.set」と入力します。次に、[使用可能な宣言] で [キャッシュ ファイル更新プログラム] を選択して追加します。

続いて、NuGet を使って Windows 8.1 用 Capptain の最新バージョンを入手します。アプリケーションの OnLaunched イベントに、Capptain 用の初期化コードを追加します。app ID と SDK キーを Capptain ポータルからコピーします。

/* Capptain configuration. */
CapptainConfiguration capptainConfiguration = new CapptainConfiguration();
capptainConfiguration.Agent.ApplicationId = "YOUR_APPID";
capptainConfiguration.Agent.SDKKey = "YOUR_SDK_KEY";
/* Initialize Capptain angent with above configuration. */
CapptainAgent.Instance.Init(e, capptainConfiguration);

今回のアプリでは、いくつかのページと、ユーザーが各ページの閲覧に費やした時間を Capptain に追跡させます。以下のスニペットをページの OnNavigatedTo メソッドに追加して、Capptain の新しいアクティビティとして HubPage の追跡を開始します。

protected override void OnNavigatedTo(NavigationEventArgs e)
{
  base.OnNavigatedTo(e);
  CapptainAgent.Instance.StartActivity("HubPage");
}

Capptain では、アプリおよびユーザーごとに同時に 1 つのアクティビティしか実行されません。EndActivity を呼び出す必要はありません。新しいページから StartActivity を呼び出すと、古いアクティビティは自動的に終了します。アプリに多くのページがある場合は、CapptainPage という特別のクラスから派生することによって、このアプローチをシンプルにすることができます。その結果、ページは新しいアクティビティに自動的に関連付けられます。

Capptain を使ってアクティビティを追跡する場合、CapptainPage からページを派生する方法もあります。この方法のメリットは、OnNavigatedTo ハンドラー内で StartActivity を手動で呼び出す必要がない点です。CapptainPage が自動的にこの処理を行います。この方法を使用する場合は、次のコードを XAML に挿入するだけです。

<capptain:CapptainPage
  xmlns:capptain="using:Capptain.Agent">
  <!-- layout -->
  ...
</capptain:CapptainPage >

前述のコードでは、HubPage を指定して StartActivity メソッドを呼び出していました。CapptainPage から派生する場合は、StartActivity を呼び出す必要はありません。既定では、ページの名前が追跡されます。いつでも GetCapptainPageName をオーバーライドして、別の値を報告させることができます。

// In the .xaml.cs file
protected override string GetCapptainPageName()
{
  /* your code */
  return "new name";
}

プッシュ通知と Reach の併用

Capptain がモバイル アプリの分野で特別な関心を集めているのは、Capptain Reach を使ってユーザーのデバイスへ通知をプッシュできる点にあります。キャンペーンをセットアップして、どのように配信されるか観察することができます。プッシュする内容については、キャンペーン名、コンテンツ (画像を含む)、対象ユーザー、タイミングなどを定義できます。

Capptain Reach は強力な機能です。広告キャンペーン、プロモーションなどの種類のマーケティング キャンペーンを、直接ユーザーに配信できます。マーケティングが成功する鍵となるは、ユーザーとの関係性を利用することです。ユーザーが閲覧しているページや、行っているアクティビティを正確に把握できる Capptain の機能により、各キャンペーンとユーザーとの関係性を高め、効果を上げることができます。

Windows Store アプリの場合、Capptain は Windows Notifications Service (WNS) を使用します。パッケージ マニフェストを更新し、WNS キーを使って Capptain ポータルを更新する必要があります。このような通知をアプリに統合するシナリオには、Overlay 統合と WebView 統合の 2 つがあります。Capptain アカウントを取得した後であれば、Capptain のドキュメントの「Windows で Capptain Reach を統合する方法」 (bit.ly/12b3bub、英語) と「Capptain Reach SDK の初期化」(bit.ly/1w90J3M、英語) で、統合に関する詳しいガイダンスを参照することができます。

Overlay 統合

Overlay 統合では、CapptainPageOverlay ページから派生します。通知は、Resources/Overlay ディレクトリ内の NuGet パッケージに含まれるリソースを使用して自動的に配信されます。Reach API から通知が着信すると、アプリ ページは Capptain OverlayAnnouncement ビューまたは CapptainOverlayNotification ビューに埋め込まれている通知内容を挿入します。実際には、この 2 つのビューはそれぞれ通知内容を表示する WebView を含みます。Reach 通知に対して独自の表示を実装する場合は、この 2 つのビューをさらにカスタマイズすることができます。

最初に、以下の宣言をプロジェクトの XAML ページに含めます (このコラム付属のサンプル プロジェクトでは、このメソッドをItemPage.xaml に実装しています)。

xmlns:capptain="using:Capptain.Overlay"

XAML では、<Page> の代わりに、ページを以下のように CapptainPageOverlay から派生します。

public sealed partial class ItemPage :
      CapptainPageOverlay

Capptain Reach は、ページにある最初のグリッドに通知ビューを挿入します。ビューを特定のグリッドで受け取る場合は、次のように CapptainGrid という名前のグリッドを使用できます。

<Grid x:Name="CapptainGrid"></Grid>

WebView 統合

WebView 統合の場合は、capptain_notification_content または capptain_announcement_content という名前を付けた WebView を含める必要があります。名前は受け取るコンテンツの種類に応じて付けます。

以下のコードで、WebView を挿入します。

<capptain:CapptainPage
  xmlns:capptain="using:Capptain.Page">
  <Grid>
    <WebView x:Name="capptain_notification_content" 
      Visibility="Collapsed"
      ScriptNotify="scriptEvent" Height="64" 
      HorizontalAlignment="Right"
      VerticalAlignment="Top"/>
    <WebView x:Name="capptain_announcement_content"
      Visibility="Collapsed"
      ScriptNotify="scriptEvent" HorizontalAlignment="Right"
      VerticalAlignment="Top"/>
    <!-- layout -->
  </Grid>
</capptain:CapptainPage>

データ プッシュ通知

Overlay 統合や WebView 統合の手法を使ってアプリでビジュアル コンテンツを受け取る方法以外に、アプリで直接データ プッシュ通知を受信することもできます。そのためには、ハンドラーを 2 つ実装します。実装先は App.cs の App オブジェクトのコンストラクターが最適です (図 4 参照)。

図 4 App オブジェクトのコンストラクターにハンドラーを実装

CapptainReach.Instance.DataPushStringReceived += (body) =>
{
  Debug.WriteLine("String data push message received: " + body);
  return true;
};
CapptainReach.Instance.DataPushBase64Received 
  += (decodedBody, encodedBody) =>
{
  Debug.WriteLine("Base64 data push message received: " 
   + encodedBody);
  // Do something useful with decodedBody like updating an image view
  return true;
};
CapptainReach.Instance.PushMessageReceived 
  += (id, replyTo, payload) =>
{
  // Your code
};

分析結果

Capptain により、データのさまざまなビューが提供されます。メーカー、OS のバージョン、ファームウェア、画面解像度、SDK のバージョンなど、デバイスに関連した技術情報を表示できます。この時点で、アプリから Capptain にアクティビティ情報を送信しているため、必要な細かい技術情報を追跡することも可能です。

まとめ

プッシュ通知は強力なメカニズムです。ほとんどのプラットフォームでは、現在、WNS、ANS、Google クラウド メッセージなど、通知サービス メカニズムを提供しています。Azure も Notification Hubs というスケーラブルなインフラストラクチャを提供しています。モバイル アプリが進化するにつれて、分析、顧客拡大、広告、協調的なマーケティング キャンペーンを、このプッシュ通知を使って実現するニーズが生まれています。Capptain は、多くのモバイル開発者が必要とするプッシュ通知分析層を新たなレベルに引き上げます。


Kevin Ashley はマイクロソフトのアーキテクト エバンジェリストです。彼は『Professional Windows 8 Programming』(Wrox、2012 年) の共著者であり、人気アプリやゲームの開発者でもあります。Kevin はさまざまなイベント、産業展覧会や Web キャストで技術発表をよく行っています。新興企業やパートナーに協力し、ソフトウェア設計、ビジネスとテクノロジ戦略、アーキテクチャ、および開発に関するアドバイスを行っています。Kevin のブログは kevinashley.com (英語) で Twitter は twitter.com/kashleytwit (英語) です。

この記事のレビューに協力してくれたマイクロソフト技術スタッフの Greg Oliver および Bruno Terkaly に心より感謝いたします。