現在、LVL(License Verification Library)を実装したAndroidアプリをマーケットにアップロードしています。
このアプリではVTの値をカスタマイズしていて、サーバーからのレスポンスが2日以内だった場合はレスポンス通りの値をVTとしてキャッシュ。
2日以上だった場合はネットワーク経由のライセンス確認を停止するためにLongの最大値をVTとしてキャッシュするようにしています。
今回、実際にアップロードしたアプリのVTの値を確かめるためにダウンロードして確認したところ想定と違い、下部に示すような結果となりました。
ここで質問なのですが、2度目以降の問い合わせの場合、サーバーからのレスポンスは通常どのような値が返ってくるのでしょうか?
Androidの資料(
http://developer.android.com/intl/ja/guide/market/licensing/
index.html)などを読んでいると、2度目以降のキャッシュは数日の値が返ってくると考えています。
もしわかる方がいらっしゃいましたら、ご回答よろしくお願いいたします。
【想定した結果】
1回目のVT:24時間
2回目のVT:2日以上
【実際の結果】
1回目のVT:24時間
2回目のVT:24時間
【VTを設定する箇所のコード:ServerManagedPolicy.java】
private void setValidityTimestamp(String validityTimestamp) {
Long lValidityTimestamp = null;
if(validityTimestamp == null){
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);
}
}
// キャッシュの有効期間が2日以内だった場合
else if(Long.parseLong(validityTimestamp) <
System.currentTimeMillis() + (1000 * 60 * 60 * 24 * 2)){
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);
}
}
// キャッシュの有効期間が2日以上だった場合
else if(Long.parseLong(validityTimestamp) >=
System.currentTimeMillis() + (1000 * 60 * 60 * 24 * 2)){
validityTimestamp=String.valueOf(Long.MAX_VALUE);
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);
}
}
mValidityTimestamp = lValidityTimestamp;
mPreferences.putString(PREF_VALIDITY_TIMESTAMP,
validityTimestamp);
// キャッシュ期間のログ表示
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd
HH:mm:ss");
String tmp2 = sdf.format(mValidityTimestamp);
Log.d("LOG", "vt:" + String.valueOf(tmp2));
}