« 【#UWP】プロモーション コードを使ってアプリを宣伝する / βテストする | トップページ | 【#UWP】 アプリ内購入 (IAP、あるいは「アドオン」) を実装する [Windows 10 全バージョン対応] »

2017年4月 2日 (日)

【#UWP】 アプリが最初にインストールされた日時を取得する

アプリが最初にインストールされた日付が欲しいことがあります。 こんな↓ふうに情報を提供したいとか。

20170402_iap05a
※ このアプリは 「UWP アプリ開発 101 (one oh one)

そのデバイスに直近でインストールされた日時なら、 初回起動時に設定ファイルへ DateTimeOffset.Now を書き込んでおけば済みます。
そうじゃなくって、 そのユーザーが Windows ストアから最初に取得した日時 (初回インストール日時) を知りたいときは、 Windows ストアから教えてもらいます。

まず、Windows ストアから AppReceipt を取ってきます。

private static async Task<string> GetAppReceiptAsync()
#if DEBUG
  => await CurrentAppSimulator.GetAppReceiptAsync(); // テスト用
#else
  => await CurrentApp.GetAppReceiptAsync(); // 本番用
#endif

これ↑の本番用は、 Windows ストアにつながらないと例外を吐きます。
得られた文字列は、次のような XML データです。

<?xml version="1.0"?>
<Receipt Version="1.0"
  CertificateId="A656B9B1B3AA509EEA30222E6D5E7DBDA9822DCD"
  ReceiptDate="2017-03-28T11:50:23.147Z"
  ReceiptDeviceId="6966499347631838"
  xmlns="http://schemas.microsoft.com/windows/2012/store/receipt">
  <AppReceipt
    Id="48df34fc-b1d8-4d17-8f33-77bbb18484b2"
    AppId="BluewaterSoft.UWP101_48977ph8920gm"
    LicenseType="Purchase"
    PurchaseDate="2016-12-30T02:56:16.278Z"
  />
  <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
    ……中略……
  </Signature>
</Receipt>

この AppReceipt ノード (<AppReceipt>タグ) の PurchaseDate 属性が、 最初にインストールした日時になってます。
ので、 これを Regex とかを使って取り出せば OK ♪

ただし、 Xml.Linq を使うときは、 本番ではルートノードに名前空間が付いているので要注意!!
シミュレーター (CurrentAppSimulator) では名前空間が付いてないので、 うっかりしてるとリリースしてみたらブチ落ちることに… (--;

※ なので、 ストアで最初に公開したら、 一度ストアからインストールして、 その後は常に本番用の CurrentApp を使うのが吉♪

Xml.Linq で取り出す方法は、 ↓こんな感じで。

public static async Task<string> GetFirstInstalledDateAsync()
{
  try
  {
    string receiptApp = await GetAppReceiptAsync();
    XDocument xmlApp = XDocument.Parse(receiptApp);
    // ルートに名前空間があるので、ノード検索に使う名前を名前空間付きにするか、Name.LocalName との比較で!
    XElement nodeAppReceipt = xmlApp.Descendants().Where(n => n.Name.LocalName == "AppReceipt").First();
    return nodeAppReceipt.Attribute("PurchaseDate").Value
  }
  catch { }
  return null;
}

なお、 Windows ストアにアクセスするので、 インターネット接続は必須ですし、 時間も掛かります。 取得に失敗したときでもちゃんと動く作りにしておきましょう。 また、 取得できたら (必要なら暗号化して) 設定ファイルに保持しておくと、 次からはサクっと動きます。

|

« 【#UWP】プロモーション コードを使ってアプリを宣伝する / βテストする | トップページ | 【#UWP】 アプリ内購入 (IAP、あるいは「アドオン」) を実装する [Windows 10 全バージョン対応] »

* プログラミング ( Metro スタイル )」カテゴリの記事

プログラミング」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/209349/65099926

この記事へのトラックバック一覧です: 【#UWP】 アプリが最初にインストールされた日時を取得する:

« 【#UWP】プロモーション コードを使ってアプリを宣伝する / βテストする | トップページ | 【#UWP】 アプリ内購入 (IAP、あるいは「アドオン」) を実装する [Windows 10 全バージョン対応] »