8

私のアプリは、1 年間のデータを含むポケット ガイドのようなものです。私は、ユーザーが少なくとも 1 回はインターネット アクセスを使用してプログラムを使用し、ライセンスをアクティブ化すると想定しています。少なくとも、Android ライセンス システムがどのように機能するかについての私の理解です。ServerManagedPolicy を使用しています。

定期的にライセンスをチェックしますか? これを制御できる方法はありますか?アプリが既にアクティブ化されていて、1 週間後、1 か月後、1 年後などに突然、アプリ自体の使いやすさが制限され始めます。再度確認する必要はありません。私のアプリは、不安定なネット アクセス (常に当然のことと見なすことはできません) のある遠隔地で、数週間、場合によっては数か月間そこに住む人々によって使用される予定です。

少なくとも、X 週間ごとにそうするように求められることを彼らに警告する必要があると思います。免許制度はそんなに厳しいですか?

LicenseCheckerCallback の applicationError void で、ERROR_CONTACTING_SERVER フラグを使用してエラーを処理できることはわかっています。「VT」応答は常に同じですか (テスト アカウント/私のアカウントではテストできません)? 皆さんが実際のアプリでこの状況をどのように扱っているのか、私はただ興味がありました. ここで何か不足していますか?どういうわけか、私は私であると感じています。「引っ掛かり」はありますか?

// 編集:

これが私が今試しているコードです:

// ServerManagedPolicy.java
private void setValidityTimestamp(String validityTimestamp) {
    Long lValidityTimestamp;
    try {
        lValidityTimestamp = Long.parseLong(validityTimestamp);
    } catch (NumberFormatException e) {
        // No response or not parsable, expire in one minute.
        Log.w(TAG, "License validity timestamp (VT) missing, caching for a minute");
        lValidityTimestamp = System.currentTimeMillis() + MILLIS_PER_MINUTE;
        validityTimestamp = Long.toString(lValidityTimestamp);
    }
    // added by me--->

    private static long maxLicense = 1000 * 3600 * 24 * 30; // ~ roughly 30 days
    private static long minLicense = 1000 * 3600 * 24 * 3;  // ~ roughly 3 days

    long lMax = System.currentTimeMillis() + maxLicense;
    long lMin = System.currentTimeMillis() + minLicense;
    if ((lValidityTimestamp > lMin) && (lValidityTimestamp < lMax)) {
        validityTimestamp = Long.toString(lMax);
    }

    // <--- added by me

    mValidityTimestamp = lValidityTimestamp;
    mPreferences.putString(PREF_VALIDITY_TIMESTAMP, validityTimestamp);
}
4

4 に答える 4

4

ほんの 2 セントで、チェックしたい期間を定義できます (3 日間としましょう)。3 日後にライセンスを確認します。インターネットがない場合は、さらに 1 週​​間程度ユーザーに使用させ続けます。そうしないと、アプリが完全に機能しなくなります。または、接続が再び確立されるまで完全に機能させたままにしておくと、タイムスタンプを確認してリセットできます。ライセンスチェッカーは、指示された場合にのみチェックします。

必要に応じて明確にすることができます!

幸運を

于 2010-11-29T03:23:03.097 に答える
2

デビッド、簡単な答えはあなた次第です。

開発者向けドキュメントから直接取得。「たとえば、サーバーは、アプリケーションのライセンス有効期間、再試行猶予期間、最大許容再試行回数などの推奨値を提供します。」

ポリシーの実装方法に応じて、独自の質問に対する回答を選択します。

于 2010-11-25T02:55:44.637 に答える
1

私はこれに対する答えを非常に簡単に得ました。USB経由で実際のデバイスをコンピューターに接続します。ServerManagedPolicy.javaでLVLライブラリのソースコードを編集し、DateFormat.getDateTimeInstance(DateFormat.MEDIUM、DateFormat.MEDIUM)を使用してlValidityTimestamp変数のログステートメントを追加します。次に、アプリケーションをアンインストールして、以前のライセンスキャッシュのタイムスタンプをクリアし、再インストールして、アプリを実行します。これはサーバーに接続し、ログステートメントが答えを明らかにします。私のテストでは、VTは今からちょうど1日後(ライセンスがチェックされているとき)に戻ります。

于 2011-01-22T07:05:34.843 に答える
1

ServerManagedPolicy を使用しても、ライセンス ドキュメントのアクセス チェックセクションで説明されているように、アプリは「checkAccess()」を呼び出した場合にのみライセンスをチェックします。その呼び出しが行われない場合、アプリは無期限に動作し続けます。そのため、ユーザーが正当にサーバーにライセンス情報を ping できない状況にあることを検出できる場合は、「checkAccess」呼び出しをそのための条件。

ページのさらに下には、LVL 機能を検証するためのテスト アカウントの設定に関する情報があります。そのテスト機能をうまく活用することを強くお勧めします。

于 2010-11-24T22:36:46.750 に答える