【#UWP】 アプリが最初にインストールされた日時を取得する
アプリが最初にインストールされた日付が欲しいことがあります。 こんな↓ふうに情報を提供したいとか。
※ このアプリは 「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 全バージョン対応] »
「プログラミング」カテゴリの記事
- 【.NET / Win8.1 ストアアプリ】 HttpClient で TLS 1.1 / 1.2 に対応するには(2018.06.17)
- 【VS2017 15.7pv2】 XAML のランタイム ツールに 「ヒートマップ」 が増えた(2018.03.28)
- 【.NET Core】 プロジェクトを作ると 「project.assets.json が見つかりません」 エラー(2018.02.10)
- 【#UWP】 ビットマップの表示色を変える (Win2D.uwp 経由で Direct2D を使う)(2017.08.23)
- 【#UWP】 CompactOverlay モード: Picture in Picture というか、「最前面に表示」するウィンドウを作る(2017.08.16)
「* プログラミング ( Metro スタイル )」カテゴリの記事
- 【.NET / Win8.1 ストアアプリ】 HttpClient で TLS 1.1 / 1.2 に対応するには(2018.06.17)
- 【VS2017 15.7pv2】 XAML のランタイム ツールに 「ヒートマップ」 が増えた(2018.03.28)
- 【#UWP】 ビットマップの表示色を変える (Win2D.uwp 経由で Direct2D を使う)(2017.08.23)
- 【#UWP】 CompactOverlay モード: Picture in Picture というか、「最前面に表示」するウィンドウを作る(2017.08.16)
- 【#UWP】 15063用の Acrylic Effect を、ちゃんと実装してみる(2017.08.05)
この記事へのコメントは終了しました。
コメント