Lisanslama Referansı

LVL Sınıfları ve Arayüzleri

Tablo 1'de, Lisans Doğrulama'daki tüm kaynak dosyalar listelenmektedir Kitaplık (LVL), Android SDK aracılığıyla kullanılabilir. Tüm dosyalar com.android.vending.licensing paketi.

Tablo 1. LVL kitaplığının özeti farklı türler yer alıyor.

Kategori Ad Açıklama
Lisans kontrolü ve sonucu Lisans Denetleyicisi Lisans kontrolü başlatmak için örneklendirdiğiniz (veya alt sınıf) sınıflar.
LisansCheckerCallback Lisans kontrolünün sonucunu işlemek için uyguladığınız arayüz.
Politika Politika izin verilip verilmeyeceğine karar vermek için uyguladığınız lisans yanıtına göre uygulamaya erişimi.
ServerManagedPolicy Varsayılan Policy uygulaması. lisans verilerinin yerel olarak depolanmasını, lisans geçerliliğini, lisans geçerliliğini, yeniden dene.
Katı Politika Alternatif Policy uygulaması. Doğrudan bağlantıya göre lisanslamayı zorunlu kılar yalnızca sunucudan lisans yanıtı gönderilir. Önbelleğe alınmaz veya yeniden deneme isteğinde bulunulamaz.
Veri kod karartma
(isteğe bağlı)
Obfuscator Policy kullanıyorsanız (ör. ServerManagedPolicy) kullanır. Yazılan verileri kodlamak ve kodunu çözmek için kod karartma algoritması uygular veya okuyun.
AESObfuscator AES şifrelemesi/şifre çözme kullanan varsayılan Obfuscator uygulaması kodu karartmak/karartmak için bir algoritma kullanır.
Cihaz sınırlaması
(isteğe bağlı)
DeviceLimiter Bir belirli bir cihaza yönlendirebilirsiniz. LicenseValidator tarafından çağrıldı. Uygulama DeviceLimiter, bir tarayıcı sınırı gerektirdiğinden çoğu uygulama için önerilmez veya kullanıcının lisanslı uygulamalara erişimi kaybetmesine neden olabilir. tasarımında sorun vardır.
NullDeviceLimiter İşlemsiz olan varsayılan DeviceLimiter uygulaması (tüm cihazlar).
Kitaplık çekirdeği, entegrasyon gerekmez Yanıt Verileri Lisans yanıtı alanlarını barındıran sınıflar.
Lisans Doğrulayıcı Lisanslamadan alınan bir yanıtın şifresini çözen ve bu yanıtı doğrulayan sınıf sunucu.
Doğrulama İstisnası Verilerin bütünlüğü doğrulanırken oluşan hataları gösteren sınıf tarafından yönetilir.
TercihObfuscator Karartılmış verileri sistemin SharedPreferences mağazası.
ILisanslamaHizmeti Lisans kontrolü isteğinin cihaza iletildiği tek yönlü IPC arayüzü Google Play istemcisi.
ILisansResultListener Uygulamanın bir lisanslama sunucusundan eşzamansız yanıt alabilir.

Sunucu Yanıtı

Tablo 2'de, lisans yöneticisinin döndürdüğü tüm lisans yanıt alanları lisanslama sunucusuna geç.

Tablo 2. Lisans yanıt alanlarının özeti Google Play sunucusu tarafından döndürülür.

Alan Açıklama
responseCode Lisanslama sunucusu tarafından döndürülen yanıt kodu. Yanıt kodları: Sunucu Yanıt Kodları'nda ana hatlarıyla açıklanmalıdır.
signedData Lisanslama sunucusu tarafından döndürülen verileri aşağıdaki gibi saklayan bir dize birleştirme: responseCode|nonce|packageName|versionCode|userId|timestamp:extras
  • responseCode: Lisanslama sunucusu tarafından döndürülen yanıt kodu.
  • nonce: İsteğin tek seferlik tanımlayıcısı.
  • packageName: Lisansı kontrol edilecek uygulamanın paket adı.
  • versionCode: Lisansı kontrol edilecek uygulamanın sürüm kodu.
  • userId: Kullanıcının uygulama başına benzersiz bir kimliğidir. Burada aynı kullanıcı, farklı bir kimlik kullanabilirsiniz.
  • timestamp: Dönemden sonraki milisaniye sayısı 1970-01-01 00:00:00 UTC saat diliminde.
  • extras: Lisans yönetiminde yardımcı olacak ek bilgiler görebilirsiniz. Ek alanlar, Sunucu Yanıtı Ekstraları.
signature Uygulamaya özel bir anahtar kullanılarak oluşturulan signedData imzası.

Sunucu Yanıt Kodları

Tablo 3'te, lisans lisansı tarafından desteklenen tüm lisans yanıt kodları lisanslama sunucusuna geç. Genel olarak, bir uygulama tüm bu yanıtları işlemelidir ekleyebilirsiniz. Varsayılan olarak LVL'deki LicenseValidator sınıfı gerekli işlemleri yapmanızı öneririz.

Tablo 3. Yanıt kodlarının özeti Google Play sunucusu tarafından bir lisans yanıtında döndürülür.

Yanıt Kodu Tam sayı değeri temsili Açıklama İmzalandı mı? Ekstralar Yorumlar
LICENSED 0 Uygulama, kullanıcıya lisanslandı. Kullanıcı veya alfa ya da beta sürümünü indirip yüklemeye yetkili olduğunu sağlar. Evet VT, GT GR Policy kısıtlamalarına göre erişime izin verin.
LICENSED_OLD_KEY 2 Uygulama kullanıcıya lisans verilmiş ancak güncellenmiş bir uygulama mevcut farklı bir anahtarla imzalanmış sürümü bulunmalıdır. Evet VT, GT, GR, UT İsteğe bağlı olarak, Policy kısıtlamalarına göre erişime izin verin.

Yüklü dosya tarafından kullanılan anahtar çiftinin uygulama sürümü geçersiz veya güvenliği ihlal edilmiş. Uygulama erişime izin verebilir gerekirse veya kullanıcıya bir yükseltme olduğunu bildirerek daha fazla kullanımı sınırlandırın yükseltmeye devam edebilirsiniz.

NOT_LICENSED 1 Uygulama kullanıcıya lisanslanmamış. Hayır Erişime izin verme.
ERROR_CONTACTING_SERVER 257 Yerel hata — Google Play uygulaması lisans sunucusuyla ilgili bir sorun yaşıyor olabilir. Hayır Policy yeniden deneme sınırlarına göre lisans kontrolünü yeniden deneyin.
ERROR_SERVER_FAILURE 4 Sunucu hatası: Sunucu, uygulamanın anahtarını yükleyemedi lisanslama için eşle. Hayır Policy yeniden deneme sınırlarına göre lisans kontrolünü yeniden deneyin.
ERROR_INVALID_PACKAGE_NAME 258 Yerel hata. Uygulama, bir paket için lisans kontrolü istedi bu uygulamaları kullanabilirsiniz. Hayır Lisans kontrolünü tekrarlamayın.

Genellikle bir geliştirme hatasından kaynaklanır.

ERROR_NON_MATCHING_UID 259 Yerel hata. Uygulama, bir paket için lisans kontrolü istedi UID'si (paket, kullanıcı kimliği çifti) istekte bulunan bir uygulamadır. Hayır Lisans kontrolünü tekrarlamayın.

Genellikle bir geliştirme hatasından kaynaklanır.

ERROR_NOT_MARKET_MANAGED 3 Sunucu hatası — uygulamayı (paket adı) tanımadı Google Play Hayır Lisans kontrolünü tekrarlamayın.

Uygulamanın yayınlanmadığını gösterebilir olduğunu veya lisanslamada bir geliştirme hatası olduğunu hakkında bilgi edindiniz.

Not: bölümünde belirtildiği gibi Test Ortamı kurulurken yanıt kodu manuel olarak uygulama geliştirici ve kayıtlı test kullanıcıları için geçersiz kılmayı Google Play Console

Not: Önceden uygulamaları aşağıdaki ölçütlere göre test edebiliyordunuz: yayınlanmamış bir "taslak" yükleme sürümünü değil. Bu işlev artık devre dışı destekleniyor; bunun yerine alfa veya beta dağıtımına yayınlamanız gerekir. yardımcı olur. Daha fazla bilgi için Taslak Uygulamalar artık Desteklenmiyor.

Sunucu Yanıtı Ekstraları

Uygulamanızın geri ödemesi kapsamında uygulamaya erişimi yönetmesine yardımcı olmak için ve diğer bilgileri sağlamanız gerekir. Lisanslama sunucusu, lisans süreçlerinin ekleyebilirsiniz. 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'da devre dışı bırakabilirsiniz. Uygulamanız APK kullanıyorsa genişletme dosyalarını içeriyorsa yanıt; dosya adlarını, boyutlarını ve URL'leri de içerir. Sunucu, "extras" lisans yanıtındaki anahtar/değer çiftleri olarak ayarlar girin.

Herhangi bir Policy uygulaması, lisanstan ekstra ayarları çıkarabilir bunları gerektiği gibi kullanın. LVL varsayılan Policy uygulaması (ServerManagedPolicy), ve verilerin nasıl edinileceğini, saklanacağını ve kullanılacağını Ayarlar'da devre dışı bırakabilirsiniz.

Tablo 4. Özet bir lisansta Google Play sunucusu tarafından sağlanan lisans yönetimi ayarları tıklayın.

EkstraAçıklama
VT Lisans geçerliliği zaman damgası. Geçerli öğenin bulunduğu tarihi/saati belirtir (önbelleğe alınmış) lisans yanıtının süresi dolar ve lisanslama sunucusunda yeniden kontrol edilmesi gerekir. İlgili bölümü inceleyin Lisans geçerlilik süresi hakkındaki makaleyi inceleyin.
GT Ek süre zaman damgası. Bir reklamverenin dönüşüm gerçekleştireceği dönemin Politika, yanıt durumu şu olsa bile uygulamaya erişime izin verebilir: RETRY

Değer, sunucu tarafından yönetilir ancak normal bir değer 5 olur veya daha fazla gün. İlgili bölümü inceleyin Yeniden deneme süresi ve maksimum yeniden deneme sayısı hakkındaki aşağıdaki bölüme bakın.

GR Maksimum yeniden deneme sayısı. Art arda kaç RETRY lisans kontrolünün yapıldığını belirtir Policy, kullanıcının uygulamaya erişimi reddetmeden önce izin vermelidir.

Değer, sunucu tarafından yönetilir ancak tipik bir değer "10" olur. veya daha yüksek. İlgili bölümü inceleyin Yeniden deneme süresi ve maksimum yeniden deneme sayısı hakkındaki aşağıdaki bölüme bakın.

UT Zaman damgasını güncelleyin. En son güncellemenin yapıldığı günü/saati belirtir bu uygulama yüklendi ve yayınlandı.

Sunucu, bu ekstra yalnızca LICENSED_OLD_KEYS yanıt için, Policy ürününün ne kadar daha önce yeni lisanslama anahtarlarıyla bir güncellemenin yayınlanmasından bu yana geçen süre kullanıcının uygulamaya erişimini reddeder.

FILE_URL1 veya FILE_URL2 Bir genişletme dosyasının URL'si (1 ana dosya, 2 yama dosyasıdır). Bunu şunun için kullanın: dosyayı HTTP üzerinden indirin.
FILE_NAME1 veya FILE_NAME2 Genişletme dosyasının adı (1 ana dosya, 2 yama dosyası içindir). Bunu kullanmanız gerekir dosyanın adını kullandığınızdan emin olun.
FILE_SIZE1 veya FILE_SIZE2 Dosyanın bayt cinsinden boyutu (1 ana dosya, 2 yama dosyası içindir). Bunu şunun için kullanın: ve cihazın paylaşılan görüntüsünde yeterli alan bulunduğundan emin olun. depolama konumunu gözden geçirin.

Lisans geçerlilik süresi

Google Play lisanslama sunucusu, lisanslarınızın her biri için indirilmiş uygulamalar. Dönem, bir kampanyanın belirli bir süre içinde uygulamanın lisans durumu, değiştirilemez ve Uygulamada bir lisanslama Policy. Lisanslama sunucusu şunları içerir: tüm lisans kontrollerine yanıt olarak geçerlilik süresi, yanıta VT anahtarının altında ekstra bir geçerlilik sonu zaman damgası CEVAP Policy, VT anahtar değerini ayıklayabilir ve bunu, şuna koşullu olarak erişim izni vermek için kullanabilir: geçerlilik süresine kadar, lisans tekrar kontrol edilmeden yapılan başvuru sona erecektir.

Lisans geçerliliği, tekrar kontrol edilmesi gerektiğinde Policy lisansı için sinyal gönderir. lisans durumu. ima etmemektedir. uygulamanın kullanım için gerçekten lisanslanıp lisanslanmadığı. Başka bir deyişle, lisans geçerlilik süresinin sona ermesi, bu dokümanın kullanım lisansının kaldırılmış olduğunu ve bu durumun Policy, lisanslama durumunu sunucuyla yeniden kontrol etmelidir. Şöyle diyor: lisans geçerlilik süresi sona ermediği sürece Lisans İlk lisans durumunu yerel olarak önbelleğe almak ve önbelleğe alınan lisansı döndürmek için Policy lisansının durumunu kontrol edebilirsiniz.

Lisans veren sunucu, geçerlilik süresini Google'ın sunduğu geri ödeme süresi boyunca lisanslamayı uygun şekilde zorunlu kılma Ücretli uygulamalar için Google Play. Geçerlilik süresini, uygulamanın satın alınıp alınmadığı ve satın alındıysa ne kadar süre önce satın alındığı. Özellikle, sunucu, geçerlilik süresini şu şekilde ayarlar:

  • Ücretli bir uygulama için ilk lisans geçerlilik süresini sunucu belirler Bu şekilde lisans yanıtının, başvuru yapıldığı sürece geçerli kalması için geri ödeme yapılabilir. Uygulamadaki lisanslama Policy, lisansın yeniden kontrol edilmesi gerekmez ve lisansın, Geçerlilik süresi sona erene kadar.
  • Bir uygulama için artık geri ödeme yapılmazsa sunucu daha uzun bir geçerlilik süresi (genellikle birkaç gün) belirler.
  • Sunucu, ücretsiz bir uygulama için geçerlilik süresini çok yüksek bir değer (long.MAX_VALUE). Bu, Policy öğesinin geçerlilik zaman damgasını yerel olarak önbelleğe aldıysa, lisans durumunu kontrol edebilir.

ServerManagedPolicy uygulaması, çıkarılan zaman damgasını kullanır (mValidityTimestamp) ekleyebilirsiniz. kullanıcıya lisans durumunu tekrar kontrol ederek takip edebilirsiniz.

Yeniden deneme süresi ve maksimum yeniden deneme sayısı

Bazı durumlarda, sistem veya ağ koşulları bir uygulamanın lisans kontrolünün lisanslama sunucusuna ulaşmasını veya sunucunun Google Play istemci uygulamasına ulaşarak yanıt almamasını sağlayabilirsiniz. Örneğin, Kullanıcı, hücresel ağ veya veri bağlantısı olmadığında bir uygulamayı başlatabilir bağlantı varsa (ör. uçaktayken) veya ağ bağlantısı kararsız veya hücre sinyali zayıf.

Ağ sorunları bir lisans kontrolünü engellediğinde veya kesintiye uğrattığında Google Play istemcisi, şuna bir RETRY yanıt kodu döndürerek uygulamayı bilgilendirir: Policy processServerResponse() yöntemi. durumunda, Google Play'in ILicensingService uygulandığında LicenseChecker kitaplığının kendisi RETRY yanıt koduna sahip processServerResponse() politikası yöntemi.

Genel olarak RETRY yanıt kodu, uygulamanın lisans kontrolünün tamamlanmasını engelleyen bir hata oluştu.

Google Play sunucusu, bir uygulamanın yeniden deneme "ek yayınlanma süresi" ayarlayarak hata koşullarını karşılama ve önerilen maksimum yeniden deneme sayısı. Sunucu, bu değerleri tüm lisans kontrolü yanıtlarına ekler. bunları GT ve GR anahtarlarının altına fazladan olarak ekleyin.

Policy uygulaması GT ve GR ekstralarını ayıklayabilir ve bunları şu amaçlarla kullanabilir: aşağıdaki koşullara uygun şekilde uygulamaya erişim izni verebilirsiniz:

  • RETRY yanıtıyla sonuçlanan bir lisans kontrolü için Policy RETRY yanıt kodunu önbelleğe alır ve RETRY yanıt sayısını artırır.
  • Policy, aşağıdaki şartlarda kullanıcının uygulamaya erişmesine izin vermelidir: ek deneme süresi hâlâ etkin durumda veya maksimum yeniden deneme sayısı ulaşılmadı.

ServerManagedPolicy, sunucu tarafından sağlanan GT ve GR değerlerini 'ne başvurun. Aşağıdaki örnekte, yeniden deneme işleminin koşullu olarak nasıl işlendiği gösterilmektedir allow() yöntemindeki yanıtları. RETRY yanıt sayısı processServerResponse() yönteminde saklanmaktadır, 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;
}