4

私のクライアントの 1 つは、OEM と契約を結んでいます。彼らのアプリ X は、多くのラップトップにプリインストールされます。このアプリは、Windows 10 ストアから更新プログラムを受け取ります。このアプリ X は、Windows 10 ストアで他のユーザーにダウンロードすることもできます。プレインストール版を使用しているユーザーのみが、3 か月間の無料試用版を受け取る必要があります。

残念ながら、OEM はデバイス ID を提供しておらず、ユーザーは試用版のロック解除コードを取得していません。次の最初の「解決策」を思いつきました。

  • プリインストールアプリにはバージョン 1.0.1.0 を使用してください。
  • 1.0.0.0 をストアにアップロードします。

アプリが起動し、バージョンが 1.0.1.0 の場合、それはプリインストールされたバージョンとして識別されます。この時点で、アプリの削除後でもこのデバイスを認識するために、デバイス ID をクライアントのサーバーに送信するサーバー呼び出しを行うことができます。

1.0.1.0 未満の任意のバージョンに更新できるため、プリインストールされているアプリの知識を失うことなく、ストア アプリを更新できます。これは、プリインストールされたバージョンがストア バージョンの自動更新によって上書きされないことを意味します (インストールされているバージョン番号がストア バージョンよりも大きいため)。ただし、プリインストール版に重大なバグが検出された場合、そのアプリを更新できなかったり、特定のクラスのユーザーが無料試用を受けられなくなったりします。つまり、Windows 10 が新しいバージョン (たとえば 1.0.1.1) でアプリを更新する前に、まだデバイスでアプリを開始していないユーザー。

これはすべて不必要に複雑に聞こえますが、そうであることを願っています。プリインストールされたバージョンとダウンロードされたバージョンを簡単に見分けられる簡単な方法を誰か思いつきますか?

ありがとう!

4

1 に答える 1

1

すでに 2 つの異なるバージョンを提供することを検討しているため、2 倍のバージョンをデプロイできるこちらの方が優れたソリューションになる可能性があります1.0.0.0

バージョンを使用して状態を区別する代わりに、ビルド シンボルを使用します。OEM クライアント用とストア展開用の 2 つの異なるビルドを作成します。

試用を許可する OEM の場合は、例として次を使用します。

private bool CanUseTrial()
{
#if OEM
    return true;
#else
    return false;
#endif
}

このようにすると、多くのロジックを必要とせずに、すべてのクライアントに対して同じコード ベースを維持することができますが、ケース OEM とケース ストアの展開は異なります。

編集#1:

OEM クライアントが非 OEM クライアントに更新される問題に対処するために、このアプローチを引き続き使用できます (アプリが #OEM ビルドとして少なくとも 1 回実行される限り)。

private async Task<bool> CanUseTrial()
{
    var clientCode = GenerateClientCode(); // However you're going to do this

#if OEM        
    WebServiceXyz.RegisterOemClient(clientCode);
    return true;
#else
    try
    {
        return await WebServiceXyz.IsRegisteredOemClient(clientCode);
    }
    catch
    {
        return false;
    }
#endif
}
于 2015-06-25T07:48:11.893 に答える