私のアプリは、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);
}