Uygulamaları dağıtma

Google Play EMM API, herkese açık ve özel uygulamalar için aşağıdaki dağıtım yöntemlerini destekler:

Uygulamaları Managed Google Play Store'dan manuel olarak yükleme

Kullanıcının Device'da policy yükleyebileceği uygulamaları tanımlayabilir ve Devices.update çağrısını yaparak bu ayarı yapabilirsiniz. Yeni bir cihaza temel hazırlığı yaparken, yönetilen Google Play Hesabı'nı cihaza eklemeden önce politikayı ayarlamanız gerekir. Aksi takdirde, hesap cihaza eklendikten sonra politika kısa bir süre boyunca uygulanmaz.

Managed Play Store davranışı, policy.productAvailabilityPolicy değerine göre belirlenir:

  • all: Play Store'daki herkese açık tüm uygulamalar kullanılabilir.
  • whitelist: Yalnızca policy.productPolicy'te listelenen uygulamalar kullanılabilir.

Her iki durumda da policy.productPolicy içindeki tüm uygulamalar varsayılan olarak kuruluşun mağaza düzenine eklenir. Kuruluşun mağaza düzeni, whitelist seçildiğinde Managed Google Play'in ana sayfasıdır ve all seçildiğinde "İş Uygulamaları" sekmesinden erişilebilir. Managed Google Play iFrame'sini yerleştirerek müşterinizin kuruluşun mağaza düzenini özelleştirmesine izin verebilirsiniz (Managed Google Play iFrame ile uygulamaları düzenleme bölümüne bakın).

Uygulamaları kullanıcıların cihazlarına uzaktan yükleme

Bir uygulamayı kullanıcının cihazına uzaktan yüklemek (itme yükleme olarak da bilinir) için Device'ın policy bölümünde policy.productPolicy.autoInstallPolicy ayarını yapın. Yeni bir cihaza temel hazırlığı yaparken, yönetilen Google Play Hesabı'nı cihaza eklemeden önce politikayı ayarlamanız gerekir. Aksi takdirde, hesap cihaza eklendikten sonra politika kısa bir süre boyunca uygulanmaz.

autoInstallMode şu şekilde ayarlanabilir:

  • doNotAutoInstall: Uygulama otomatik olarak yüklenmez.
  • autoInstallOnce: Uygulama bir kez otomatik olarak yüklenir. Kullanıcı uygulamayı kaldırırsa tekrar yüklenmez.
  • forceAutoInstall: Uygulama otomatik olarak yüklenir. Kullanıcı uygulamayı kaldırırsa uygulama tekrar yüklenir. Yönetilen cihazlarda DPC, DevicePolicyManager.setUninstallBlocked kullanarak kaldırma işlemini engellemelidir.

Başarısızlık durumunda (bağlantı kaybı, depolama alanı eksikliği vb.) yüklemeler başarılı olana kadar otomatik olarak yeniden denenir. Kurtarılamaz hatalar durumunda pil ve veri israfını önlemek için üstel geri çekilme yeniden deneme stratejisi uygulanır.

Yükleme önceliği

autoInstallPriority ayarını yaparak yükleme sırasını seçebilirsiniz. Öncelik, işaretsiz bir tam sayı olmalıdır ve varsayılan değer 0'dır. Uygulamalar artan öncelik sırasına göre yüklenir. Yani öncelik değeri daha düşük olan uygulamalar önce yüklenir.

Kısıtlamalar yükleme

Yükleme sırasında cihazın gerekli durumunu kontrol etmenize olanak tanıyan bir autoInstallConstraint ayarlayarak her uygulama için yükleme kısıtlamaları belirleyebilirsiniz:

  • Cihazın kablosuz ağa bağlı olup olmayacağı,
  • cihazın şarj edilip edilmemesi,
  • ve cihazın boşta (kullanıcı tarafından etkin olarak kullanılmayan) olup olmayacağı.

Kısıtlamalar hemen karşılanmazsa etkilenen yüklemeler, kısıtlamalar karşılanana kadar sıraya alınır.

autoInstallConstraint'te alanlar arasında VE kuralı uygulanır. Örneğin, aşağıdaki autoInstallConstraint ile uygulamanın yüklenmesi için cihazın hem şarj ediliyor hem de sınırsız bir ağa (ör. kablosuz ağ) bağlı olması gerekir:

"autoInstallConstraint": [
  "chargingStateConstraint" : "chargingRequired",
  "networkTypeConstraint" : "unmeteredNetwork"
]

Yeni temel hazırlığı yapılan cihazlara uygulamaları otomatik olarak yükleme

Google Play EMM API, bir cihaz ilk kez hazırlandığında NewDeviceEvent bildirimi gönderir. Yeni temel hazırlığı yapılan cihazlara uygulamaları otomatik olarak yüklemek için NewDeviceEvent bildirimlerini dinleyin. Her NewDeviceEvent'ten userId ve deviceId'yi alın, ardından ilgili cihazın politikasını ayarlamak için Devices.update'i çağırın.

EMM bildirimlerine nasıl abone olunacağını öğrenmek için EMM bildirimlerini ayarlama başlıklı makaleyi inceleyin.

Uygulama otomatik yükleme hatası geri bildirimi

Uygulama yüklemeyle ilgili hatalar Uygulama Geri Bildirimi aracılığıyla bildirilir ve DPC, KeyedAppStatesService üzerinden gönderilen EnterprisePolicyStatus mesajını izleyebilir.

DPC'nin, Base64 kodlu verilerin kodunu çözmek için EnterprisePolicyStatus proto tanımına göre sınıflar oluşturması gerekir. Proto sınıfları oluşturmayla ilgili talimatlar için Protocol Buffers belgelerine bakın.

Oluşturulan sınıflarla DPC, EnterprisePolicyStatus nesnesinin kodunu çözebilir:

EnterprisePolicyStatus enterprisePolicyStatus = EnterprisePolicyStatus.parseFrom(
    BaseEncoding.base64().decode(base64EncodedString)
);

Cihaz Politikası artık isteğe bağlı yeni PolicyId alanını içeriyor. EMM, politika oluştururken veya güncellerken belirli bir cihaz politikası sürümünü tanımlamak için PolicyId değerini herhangi bir dize değerine ayarlayabilir.

Varsa uygulama yükleme geri bildirimi, PolicyId değerini bildirir. Böylece DPC, alınan hataları belirli politikalarla eşleştirebilir.

EnterprisePolicyStatus

message EnterprisePolicyStatus {
  // Individual status for an app in the policy
  repeated ApplicationStatus app_status = 1;

  // Version of the policy for which this status applies.
  PolicyVersion version = 2;
}

ApplicationStatus

// Individual status for an app.
message ApplicationStatus {
  // The package name for the app.
  string package_name = 1;

  // The install status for the app. Only includes status for apps scheduled
  // to be auto-installed via the policy resource.
  AutoInstallStatus install_status = 2;
}

AutoInstallStatus

// Auto-install status for an app.
message AutoInstallStatus {
  // The error causing the install to fail if state is INSTALL_ERROR.
  EnterpriseAutoInstallError error = 1;

  // The current install state of the app.
  EnterpriseAutoInstallState state = 2;
}

PolicyVersion

// The version of the policy which these install states apply to.
message PolicyVersion {
  // A policy id which may be optionally set by the EMM.
  string policy_id = 1;
}

EnterpriseAutoInstallError

// Install errors resulting in failure to install an app.
enum EnterpriseAutoInstallError {
  // Catch-all for unrecognized enum values.
  ENTERPRISE_AUTO_INSTALL_ERROR_UNKNOWN = 0;

  // The app could not be found.
  ENTERPRISE_AUTO_INSTALL_ERROR_NOT_FOUND = 1;

  // The app is not available in the user's country.
  ENTERPRISE_AUTO_INSTALL_ERROR_UNAVAILABLE_COUNTRY = 2;

  // The app is not compatible with the device hardware.
  ENTERPRISE_AUTO_INSTALL_ERROR_NOT_COMPATIBLE_WITH_DEVICE = 3;

  // No license remained to grant ownership of the app, and the user did not
  // already own the app.
  ENTERPRISE_AUTO_INSTALL_ERROR_NO_LICENSES_REMAINING = 4;

  // Required permissions for the app have not been accepted.
  ENTERPRISE_AUTO_INSTALL_ERROR_MISSING_PERMISSION = 5;

  // The app is not available based on the enterprise availability policy.
  ENTERPRISE_AUTO_INSTALL_ERROR_NOT_APPROVED_OR_UNAVAILABLE = 6;

  // The app is not available to the user or device.
  ENTERPRISE_AUTO_INSTALL_ERROR_APP_UNAVAILABLE = 7;

  // Failed to grant license because the user already has ownership.
  ENTERPRISE_AUTO_INSTALL_ERROR_INCOMPATIBLE_OWNERSHIP = 8;

  // The admin has not accepted the terms of service.
  ENTERPRISE_AUTO_INSTALL_ERROR_TOS_NOT_ACCEPTED = 9;

  // The device does not have enough RAM.
  ENTERPRISE_AUTO_INSTALL_ERROR_INSUFFICIENT_RAM = 10;

  // The app is incompatible with the device carrier.
  ENTERPRISE_AUTO_INSTALL_ERROR_NOT_COMPATIBLE_WITH_DEVICE_CARRIER = 11;

  // The app is incompatible with the country or carrier.
  ENTERPRISE_AUTO_INSTALL_ERROR_NOT_COMPATIBLE_WITH_DEVICE_COUNTRY_OR_CARRIER = 12;

  // The app is incompatible with the safe search level.
  ENTERPRISE_AUTO_INSTALL_ERROR_NOT_COMPATIBLE_WITH_DEVICE_SAFE_SEARCH_LEVEL = 13;

  // The app could not be installed due to an installer error.
  ENTERPRISE_AUTO_INSTALL_ERROR_INSTALL_FAILED = 14;

  // The app could not be installed due to network errors.
  ENTERPRISE_AUTO_INSTALL_ERROR_NETWORK_FAILED = 15;

  // The device does not have enough storage.
  ENTERPRISE_AUTO_INSTALL_ERROR_INSUFFICIENT_STORAGE = 16;
}

EnterpriseAutoInstallState

// The current install state for an app.
enum EnterpriseAutoInstallState {
  // Catch-all for unrecognized enum values.
  INSTALL_STATE_UNKNOWN = 0;

  // The app has been received by Play but an install attempt has not completed
  // yet.
  INSTALL_STATE_PENDING = 1;

  // The latest install attempt failed and will be retried automatically.
  INSTALL_STATE_ERROR = 2;

  // The app has been installed.
  INSTALL_STATE_INSTALLED = 3;
}

Uygulamaları kapalı test için dağıtma

Kapalı test, uygulama geliştiricilerin uygulamalarının erken sürümleri hakkında güvenilir kullanıcılardan geri bildirim almasına olanak tanır. Geliştiriciler Google Play Console'da kapalı testler oluşturabilir. Play EMM API'yi, BT yöneticilerinin uygulamaların kapalı sürümlerini (kanal olarak da bilinir) belirli kullanıcılara dağıtmasına olanak tanımak için kullanırsınız. Kurumsal müşterileriniz bu özelliği yalnızca üçüncü taraf uygulamalarını değil, şirket içinde geliştirilen özel uygulamaları da test etmek için kullanabilir.

Uygun uygulamalar

Geliştiriciler, bir uygulamanın kapalı test kullanıcıları listesine kuruluş eklemeden önce uygulamanın aşağıdaki ölçütleri karşılaması gerekir:

  • Uygulamanın üretim sürümü Google Play'de yayınlanmış olmalıdır.
  • Google Play Console'da Managed Google Play, uygulamanın Gelişmiş Ayarlar sayfasında etkinleştirilir.
  • Uygulamanın kapalı sürümleri sürüm kodu şartlarını karşılamalıdır.

Kapalı testlere kuruluş ekleme

Uygulama geliştiriciler, Kapalı Alfa Testi veya Google Gruplar'ı kullanan Alfa Testi yöntemlerini kullanan testlere kuruluş ekleyebilir. Talimatlar için açık, kapalı veya dahili test oluşturma kılavuzuna bakın. Geliştiricinin, katılan her kuruluşun kuruluş kimliğini (kurum kimliği olarak da bilinir) girmesi gerekir. BT yöneticileri, aşağıdaki adımları uygulayarak kuruluşlarının kimliğini üçüncü taraf uygulama geliştiricilere sağlayabilir:

  1. Managed Google Play Store'da oturum açın.
  2. Yönetici Ayarları'nı tıklayın.
  3. Kuruluş kimliğini içeren dizeyi Kuruluş bilgileri kutusundan kopyalayın ve geliştiriciye gönderin.

Özel uygulamalar için ek şartlar

Gizli uygulamalarda geliştiricinin, uygulamanın Gelişmiş Ayarlar sayfasındaki Managed Google Play sekmesine katılan her kuruluşun kuruluş kimliğini de eklemesi gerekir. Talimatlar için Özel uygulama yayınlama başlıklı makaleyi inceleyin.

Kapalı parçaları kullanıcılara dağıtma

Belirli bir uygulama için bir kuruluşun kullanabileceği parçaların listesini almak üzere Products.get numaralı telefonu arayın. Yanıtta yer alan appTracks[] listesi, her uygulama için kullanılabilen kanalları içerir. appTracks[].trackAlias, kanalın EMM konsolunuzda görüntüleyebileceğiniz, kullanıcı tarafından okunabilen adıdır. appTracks[].trackId ise kanalın makine tarafından okunabilen kimliğidir.

Bir kullanıcıya uygulamanın kapalı kanalını göstermek için Device'nin policy bölümünde policy.productPolicy[].trackIds[] ayarını yapın. Bir cihaz için birden fazla kanal varsa en yüksek sürüm koduna sahip sürüm yüklenir.

trackIds, aşağıdaki gibi belirli senaryolarda Products.get çağrısından otomatik olarak kaldırılır:

  • Kanalın uygulama sürümü başka bir kanala veya üretime geçirilir.
  • Üretim sürümü, kanaldan daha yüksek bir sürümle güncellenir.
  • Bir geliştirici parçayı durdurur.

Ücretli uygulama lisanslarını takip etme

Ücretli uygulamalarda Grouplicenses nesnesi, bir kuruluşun sahip olduğu ve kullanımda olan lisans sayısını izler. Bir uygulamanın lisans ayrıntılarını öğrenmek için Grouplicenses.get numaralı telefonu arayabilirsiniz.

Ücretli bir uygulamanın cihaza yüklenebilmesi için kuruluşun uygulama için lisansa sahip olması gerekir. Lisans varsa uygulama cihaza yüklenir ve bir Entitlements nesnesi oluşturulur. Entitlements nesnesi, bir lisansı bir kullanıcıya bağlar ve uygulama için kullanılabilir lisans sayısını azaltır. Kullanılabilir lisans yoksa uygulama yükleme işlemi başarısız olur ve Entitlements nesnesi oluşturulmaz.

Grouplicenses ve Entitlements nesneleri, ücretsiz olarak dağıtılan uygulamalar tarafından kullanılmaz.