ユーザーがこのマシンで購入を行い、別のマシンで機能を実行するには、このような場合に対処したいと思います。
領収書を確認する必要があることはわかっています。私は疑問に思っていました、これはそうする正しい方法ですか?署名チェックをバイパスすることに注意してください。として、現時点では考慮したくないバックエンド システムをセットアップする必要があります。Windows 8 ストア アプリは System.Security.Cryptography API を提供していないため、ローカルで署名チェックを実行することさえできません。
私は、次のコード スニペットがほとんどのケースを処理するのに十分であるかどうか疑問に思っていました。コードをテストするには、新しいバージョンを公開する必要があるため、コードをテストできないことに注意してください。
private async void history_Click(object sender, RoutedEventArgs e)
{
bool OK = true;
// The next line is commented out for production/release.
LicenseInformation licenseInformation = CurrentApp.LicenseInformation;
if (!licenseInformation.ProductLicenses["PremiumFeatures"].IsActive)
{
try
{
// The customer doesn't own this feature, so
// show the purchase dialog.
String receipt = await CurrentApp.RequestProductPurchaseAsync("PremiumFeatures", true);
// the in-app purchase was successful
licenseInformation = CurrentApp.LicenseInformation;
if (licenseInformation.ProductLicenses["PremiumFeatures"].IsActive || receipt.Length > 0)
{
// In some situations, you may need to verify that a user made an in-app purchase.
// For example, imagine a game that offers downloaded content. If the user who
// purchased the content wants to play the game on another PC, you need to verify
// that the user purchased the content.
//
// Receipt is used to handle such situation.
//
// Validate receipt is complicated, as it requires us to setup a backend system.
// http://msdn.microsoft.com/en-US/library/windows/apps/jj649137
//
// I will just assume non empty receipt string means valid receipt.
OK = true;
}
else
{
OK = false;
}
}
catch (Exception)
{
// The in-app purchase was not completed because
// an error occurred.
OK = false;
}
}
else
{
// The customer already owns this feature.
OK = true;
}
if (OK)
{
// Launch premium feature.
Frame.Navigate(typeof(HistoryPage));
}
}