LVL Sınıfları ve Arayüzleri
Tablo 1'de, Android SDK üzerinden kullanılabilen Lisans Doğrulama Kitaplığı'ndaki (LVL) tüm kaynak dosyalar listelenmiştir. Tüm dosyalar com.android.vending.licensing
paketinin bir parçasıdır.
Kategori | Ad | Açıklama |
---|---|---|
Lisans kontrolü ve sonucu | Lisans Kontrolü | Lisans kontrolü başlatmak için örneklediğiniz (veya alt sınıf) sınıf. |
LisansCheckerCallback | Lisans kontrolünün sonucunu işlemek için uyguladığınız arayüz. | |
Politika | Politika | Lisans yanıtına göre uygulamaya erişime izin verilip verilmeyeceğini belirlemek için uyguladığınız arayüz. |
Sunucuyla Yönetilen Politika | Varsayılan Policy uygulaması. Lisans verilerinin yerel olarak depolanmasını, lisans geçerliliğini ve yeniden denemeyi yönetmek için lisanslama sunucusu tarafından sağlanan ayarları kullanır. |
|
Katı Politika | Alternatif Policy uygulaması. Yalnızca sunucudan alınan doğrudan lisans yanıtına göre lisanslamayı zorunlu kılar. Önbelleğe alma yok veya yeniden deneme isteğinde bulunulmuyor. |
|
Veri kod karartma (isteğe bağlı) |
Gizleyici | Lisans yanıt verilerini kalıcı depolama alanında önbelleğe alan bir Policy (ServerManagedPolicy gibi) kullanıyorsanız uyguladığınız arayüz.
Yazılan veya okunan verileri kodlamak ve bu verilerin kodunu çözmek için kod karartma algoritması uygular. |
AESObfuscator | Verilerde kod karartmak/kodun kodunu kaldırmak için AES şifreleme/şifre çözme algoritması kullanan varsayılan Gizleyici uygulaması. | |
Cihaz sınırlaması (isteğe bağlı) |
DeviceLimiter | Bir uygulamanın kullanımını belirli bir cihazla sınırlamak istediğinizde uyguladığınız arayüz. LicenseValidator çağrısı yapıldı. Bir arka uç sunucusu gerektirdiği ve dikkatli bir şekilde tasarlanmadığı takdirde kullanıcının lisanslı uygulamalara erişimi kaybetmesine neden olabileceği için DeviceLimiter birçok uygulama için önerilmez. |
BoşCihaz Sınırlayıcısı | İşlem gerektirmeyen (tüm cihazlara erişime izin veren) varsayılan DeviceLimiter uygulaması. | |
Kitaplık çekirdeği, entegrasyon gerekmez | Yanıt Verileri | Lisans yanıtı alanlarını içeren sınıf. |
Lisans Doğrulayıcı | Lisanslama sunucusundan alınan yanıtların şifresini çözen ve doğrulayan sınıf. | |
Doğrulamaİstisnası | Gizleyici tarafından yönetilen verilerin bütünlüğünü doğrularken oluşan hataları gösteren sınıftır. | |
Tercih Gizleyici | Karartılmış verileri sistemin SharedPreferences deposuna yazan/okuyan yardımcı sınıfı. |
|
İNCELEMEHizmeti | Lisans kontrolü isteğinin Google Play istemcisine iletildiği tek yönlü IPC arayüzü. | |
LisansSonuçListesi | Uygulamanın, lisanslama sunucusundan eşzamansız yanıt aldığı tek yönlü IPC geri çağırma uygulaması. |
Sunucu Yanıtı
Tablo 2'de, lisanslama sunucusu tarafından döndürülen tüm lisans yanıtı alanları listelenmiştir.
Alan | Açıklama |
---|---|
responseCode |
Lisanslama sunucusu tarafından döndürülen yanıt kodu. Yanıt kodları Sunucu Yanıtı Kodları'nda özetlenmiştir. |
signedData |
Lisanslama sunucusu tarafından döndürülen verileri tutan bir dizeyi şu şekilde birleştirme:
responseCode|nonce|packageName|versionCode|userId|timestamp:extras .
|
signature |
Uygulamaya özel bir anahtar kullanan signedData imzası.
|
Sunucu Yanıt Kodları
Tablo 3'te, lisanslama sunucusunun desteklediği tüm lisans yanıt kodları listelenmektedir. Genel olarak, bir uygulama bu yanıt kodlarının tümünü işlemelidir. Varsayılan olarak LVL'deki LicenseValidator sınıfı, bu yanıt kodlarıyla ilgili gerekli tüm işlemleri sizin için sağlar.
Yanıt Kodu | Tam sayı-değer gösterimi | Açıklama | İmzalandı mı? | Ekstralar | Yorumlar |
---|---|---|---|---|---|
LICENSED |
0 |
Uygulama kullanıcıya verilir. Kullanıcı uygulamayı satın almıştır veya uygulamanın alfa ya da beta sürümünü indirip yükleme yetkisine sahiptir. | Evet | VT , GT GR |
Policy kısıtlamaya göre erişime izin ver. |
LICENSED_OLD_KEY |
2 |
Uygulama kullanıcıya lisanslandı ancak farklı bir anahtarla imzalanmış güncellenmiş bir uygulama sürümü mevcut. | Evet | VT , GT , GR , UT |
İsteğe bağlı olarak Policy kısıtlamalarına göre erişim izni verin.
Yüklü uygulama sürümü tarafından kullanılan anahtar çiftinin geçersiz veya güvenliğinin ihlal edildiğini gösterebilir. Uygulama, gerekirse erişim izni verebilir veya kullanıcıyı bir yükseltmenin olduğu konusunda bilgilendirebilir ve yükseltmeye kadar kullanımı sınırlandırabilir. |
NOT_LICENSED |
1 |
Kullanıcıya uygulama için lisans verilmemiş. | Hayır | Erişime izin verme. | |
ERROR_CONTACTING_SERVER |
257 |
Yerel hata - Google Play uygulaması, büyük olasılıkla ağ kullanılabilirliği sorunlarından dolayı lisanslama sunucusuna ulaşamamıştır. | Hayır | Policy yeniden deneme sınırına göre lisans kontrolünü yeniden deneyin. |
|
ERROR_SERVER_FAILURE |
4 |
Sunucu hatası — Sunucu, uygulamanın anahtar çiftini lisanslama için yükleyemedi. | Hayır | Policy yeniden deneme sınırına göre lisans kontrolünü yeniden deneyin.
|
|
ERROR_INVALID_PACKAGE_NAME |
258 |
Yerel hata — Uygulama, cihazda yüklü olmayan bir paket için lisans kontrolü istedi. | Hayır | Lisans kontrolünü tekrarlamayın.
Genellikle bir geliştirme hatasından kaynaklanır. |
|
ERROR_NON_MATCHING_UID |
259 |
Yerel hata — Uygulama, UID'si (paket, kullanıcı kimliği çifti), istekte bulunan uygulamanınkiyle eşleşmeyen bir paket için lisans kontrolü istedi. | Hayır | Lisans kontrolünü tekrarlamayın.
Genellikle bir geliştirme hatasından kaynaklanır. |
|
ERROR_NOT_MARKET_MANAGED |
3 |
Sunucu hatası — Uygulama (paket adı) Google Play tarafından tanınmadı. | Hayır | Lisans kontrolünü tekrarlamayın.
Uygulamanın Google Play'de yayınlanmadığını veya lisanslama uygulamasında bir geliştirme hatası olduğunu gösterebilir. |
Not: Test Ortamını Oluşturma bölümünde açıklandığı gibi, yanıt kodu, uygulama geliştiricisi ve tüm kayıtlı test kullanıcıları için Google Play Console aracılığıyla manuel olarak geçersiz kılınabilir.
Not: Önceden, bir uygulamayı yayınlanmamış "taslak" sürümünü yükleyerek test edebiliyordunuz. Bu işlev artık desteklenmemektedir. Bunun yerine, işlevi alfa veya beta dağıtım kanalına yayınlamanız gerekir. Daha fazla bilgi için Taslak Uygulamalar Artık Desteklenmiyor bölümüne göz atın.
Sunucu Yanıtı Ekstraları
Lisanslama sunucusu, başvuru geri ödeme süresi boyunca uygulamaya erişimi yönetmesine yardımcı olmak ve diğer bilgileri sağlamak için lisans yanıtlarına çeşitli bilgiler ekler. Hizmet özellikle uygulamanın lisans geçerlilik süresi, yeniden deneme ek süresi, izin verilen maksimum yeniden deneme sayısı ve diğer ayarlar için önerilen değerleri sağlar. Uygulamanız APK genişletme dosyaları kullanıyorsa yanıt, dosya adlarını, boyutlarını ve URL'leri de içerir. Sunucu, ayarları lisans yanıtı "extras" alanına anahtar/değer çiftleri olarak ekler.
Tüm Policy
uygulamaları, ek ayarları lisans yanıtından ayıklayabilir ve gerektiğinde kullanabilir. Varsayılan LVL Policy
uygulaması (ServerManagedPolicy
), çalışan bir uygulamadır ve ayarların nasıl edinileceğini, saklanacağını ve kullanılacağını gösterir.
Ekstra | Açıklama |
---|---|
VT |
Lisans geçerlilik zaman damgası. Geçerli (önbelleğe alınan) lisans yanıtının süresinin dolacağı ve lisanslama sunucusunda yeniden kontrol edilmesi gereken tarihi/saati belirtir. Lisans geçerlilik süresi ile ilgili aşağıdaki bölüme bakın. |
GT |
Ek yayınlanma süresi zaman damgası. Yanıt durumu RETRY olsa bile, Politikanın uygulamaya erişime izin verebileceği dönemin sonunu belirtir. Değer, sunucu tarafından yönetilir ancak tipik bir değer 5 gün veya daha uzun olur. Aşağıdaki Yeniden deneme süresi ve maksimum yeniden deneme sayısı bölümüne bakın. |
GR |
Maksimum yeniden deneme sayısı. Kullanıcının uygulamaya erişimini reddetmeden önce Policy tarafından izin verilmesi gereken art arda RETRY lisans kontrolü sayısını belirtir.
Değer, sunucu tarafından yönetilir ancak tipik bir değer "10" veya daha yüksek olur. Aşağıdaki Yeniden deneme süresi ve maksimum yeniden deneme sayısı bölümüne bakın. |
UT |
Güncelleme zaman damgası. Bu uygulamada yapılan en son güncellemenin yüklenip yayınlandığı günü/saati belirtir. Sunucu bu ekstra veriyi yalnızca |
FILE_URL1 veya FILE_URL2 |
Bir genişletme dosyasının URL'si (1 ana dosya, 2 yama dosyası içindir). Dosyayı HTTP üzerinden indirmek için bunu kullanın. |
FILE_NAME1 veya FILE_NAME2 |
Genişletme dosyasının adı (1 ana dosya, 2 yama dosyası içindir). Dosyayı cihaza kaydederken bu adı kullanmanız gerekir. |
FILE_SIZE1 veya FILE_SIZE2 |
Dosyanın bayt cinsinden boyutu (1 ana dosya, 2 yama dosyası içindir). İndirme işlemine yardımcı olmak ve indirmeden önce cihazın paylaşılan depolama alanında yeterli alan bulunduğundan emin olmak için bunu kullanın. |
Lisans geçerlilik süresi
Google Play lisanslama sunucusu, indirilen tüm uygulamalar için bir lisans geçerlilik süresi ayarlar. Bu süre, uygulamadaki lisanslama Policy
tarafından bir uygulamanın lisans durumunun değiştirilemez ve önbelleğe alınabilir kabul edilmesi gereken zaman aralığını belirtir. Lisans sunucusu, tüm lisans kontrollerine verdiği yanıta geçerlilik süresini dahil eder ve VT
anahtarının altına ekstra bir geçerlilik sonu zaman damgası olarak ekler. A Policy
, VT anahtarı değerini ayıklayabilir ve geçerlilik süresi dolana kadar lisansı yeniden kontrol etmeden uygulamaya erişim izni vermek için koşullu olarak kullanabilir.
Lisansın geçerliliği, lisanslama durumunu lisanslama sunucusuyla tekrar kontrol etmesi gerektiğinde Policy
lisanslamasına işaret eder. Bir uygulamanın gerçekten kullanım lisansı alıp almadığını ima etmek değildir. Yani bir uygulamanın lisans geçerlilik süresi sona erdiğinde bu, uygulamanın artık kullanım lisansının olmadığı anlamına gelmez. Yalnızca Policy
'ın lisans durumunu sunucuyla tekrar kontrol etmesi gerektiğini belirtir. Bu doğrultuda, lisans geçerlilik süresi sona ermediği sürece Policy
ürününün ilk lisans durumunu yerel olarak önbelleğe alması ve sunucuya yeni bir lisans denetimi göndermek yerine önbelleğe alınan lisans durumunu döndürmesi kabul edilebilirdir.
Lisans sunucusu, uygulamanın ücretli uygulamalar için Google Play'in sunduğu geri ödeme süresi boyunca lisanslamayı düzgün şekilde yapmasına yardımcı olmak amacıyla geçerlilik süresini yönetir. Geçerlilik süresini, uygulamanın satın alınıp alınmadığına ve satın alındıysa ne kadar süre öncesine bağlı olarak belirler. Özellikle sunucu, geçerlilik süresini aşağıdaki gibi ayarlar:
- Ücretli bir uygulamada sunucu, ilk lisans geçerlilik süresini ayarlayarak lisans yanıtının uygulama geri ödenebilir olduğu sürece geçerli kalmasını sağlar. Uygulamadaki bir lisanslama
Policy
, ilk lisans kontrolünün sonucunu önbelleğe alabilir ve geçerlilik süresi sona erene kadar lisansın yeniden kontrol edilmesi gerekmez. - Bir uygulamanın ücretinin geri ödemesi artık mümkün olmadığında sunucu daha uzun bir geçerlilik süresi (genellikle gün sayısı) belirler.
- Ücretsiz uygulamalarda, sunucu geçerlilik süresini çok yüksek bir değere (
long.MAX_VALUE
) ayarlar. Bu,Policy
geçerlilik zaman damgasını yerel olarak önbelleğe aldığı sürece, uygulamanın lisans durumunu ileride yeniden kontrol etmesine gerek kalmamasını sağlar.
ServerManagedPolicy
uygulaması, kullanıcının uygulamaya erişmesine izin vermeden önce lisans durumunun sunucuyla tekrar kontrol edilip edilmeyeceğini belirlemek için birincil koşul olarak ayıklanan zaman damgasını (mValidityTimestamp
) kullanır.
Yeniden deneme süresi ve maksimum yeniden deneme sayısı
Bazı durumlarda sistem veya ağ koşulları, bir uygulamanın lisans denetiminin lisanslama sunucusuna ulaşmasını ya da sunucu yanıtının Google Play istemci uygulamasına ulaşmasını engelleyebilir. Örneğin, kullanıcı, hücresel ağ veya veri bağlantısı olmadığında (ör. uçaktayken) ya da ağ bağlantısı kararsız olduğunda veya hücre sinyali zayıf olduğunda bir uygulamayı başlatabilir.
Ağ sorunları bir lisans kontrolünü engellediğinde veya kesintiye uğrattığında Google Play istemcisi, Policy
processServerResponse()
yöntemine RETRY
yanıt kodu döndürerek uygulamayı bilgilendirir. Uygulamanın Google Play'in ILicensingService
uygulamasına bağlanamaması gibi sistem sorunları durumlarında, LicenseChecker
kitaplığının kendisi RETRY
yanıt koduyla Politika processServerResponse()
yöntemini çağırır.
Genel olarak RETRY
yanıt kodu, lisans kontrolünün tamamlanmasını engelleyen bir hata oluştuğunu uygulamaya dair bir sinyaldir.
Google Play sunucusu, yeniden deneme "ek yayınlanma süresi" ve önerilen maksimum yeniden deneme sayısı ayarlayarak bir uygulamanın hata koşulları altında lisanslamayı yönetmesine yardımcı olur. Sunucu bu değerleri tüm lisans kontrolü yanıtlarına ekleyerek GT
ve GR
anahtarlarının altına ekstra değerler olarak ekler.
Policy
uygulaması, GT
ve GR
ekstralarını ayıklayabilir ve bunları uygulamaya erişime koşullu olarak izin vermek için aşağıdaki gibi kullanabilir:
RETRY
yanıtıyla sonuçlanan bir lisans kontrolü içinPolicy
,RETRY
yanıt kodunu önbelleğe almalı veRETRY
yanıt sayısını artırmalıdır.Policy
, yeniden deneme için tanınan ek sürenin hâlâ etkin olması veya maksimum yeniden deneme sayısına ulaşılmamış olması koşuluyla, kullanıcının uygulamaya erişmesine izin vermelidir.
ServerManagedPolicy
, yukarıda açıklandığı gibi sunucu tarafından sağlanan GT
ve GR
değerlerini kullanır. Aşağıdaki örnekte, allow()
yöntemindeki yeniden deneme yanıtlarının koşullu olarak işlenmesi gösterilmektedir. RETRY
yanıtların sayısı processServerResponse()
yönteminde tutulur, gösterilmez.
Kotlin
fun allowAccess(): Boolean { val ts = System.currentTimeMillis() return when(lastResponse) { LICENSED -> { // Check if the LICENSED response occurred within the validity timeout. ts <= validityTimestamp // Cached LICENSED response is still valid. } RETRY -> { ts < lastResponseTime + MILLIS_PER_MINUTE && // Only allow access if we are within the retry period // or we haven't used up our max retries. (ts <= retryUntil || retryCount <= maxRetries) } else -> false } }
Java
public boolean allowAccess() { long ts = System.currentTimeMillis(); if (lastResponse == LicenseResponse.LICENSED) { // Check if the LICENSED response occurred within the validity timeout. if (ts <= validityTimestamp) { // Cached LICENSED response is still valid. return true; } } else if (lastResponse == LicenseResponse.RETRY && ts < lastResponseTime + MILLIS_PER_MINUTE) { // Only allow access if we are within the retry period // or we haven't used up our max retries. return (ts <= retryUntil || retryCount <= maxRetries); } return false; }