Bu kılavuzda, Unity'i kullanarak uygulamanızda uygulama içi güncellemeleri nasıl destekleyeceğiniz açıklanmaktadır. Uygulamanızın Kotlin programlama dilini veya Java programlama dilini kullandığı durumlar ve uygulamanızın yerel kod (C/C++) kullandığı durumlar için ayrı kılavuzlar vardır.
Geliştirme ortamınızı kurma
OpenUPM-CLI
OpenUPM CLI yüklüyse OpenUPM kayıt defterini şu komutla yükleyebilirsiniz:
openupm add com.google.play.appupdate
OpenUPM
Düzenle > Proje Ayarları > Paket Yöneticisi Unity menü seçeneğini belirleyerek paket yöneticisi ayarlarını açın.
OpenUPM'yi Paket Yöneticisi penceresine kapsamlı bir kayıt defteri olarak ekleyin:
Name: package.openupm.com URL: https://package.openupm.com Scopes: com.google.external-dependency-manager com.google.play.common com.google.play.core com.google.play.appupdate
Unity menü seçeneği Pencere > Paket Yöneticisi'ni seçerek paket yöneticisi menüsünü açın.
Yönetici kapsamı açılır menüsünden Kayıt Dairelerim'i seçin.
Paket listesinden Unity için Google Play Integrity eklentisi paketini seçin ve Yükle'ye basın.
GitHub'dan içe aktarma
GitHub'dan en son
.unitypackage
sürümünü indirin.Öğeler > Paket içe aktar > Özel Paket Unity menü seçeneğini belirleyip tüm öğeleri içe aktararak
.unitypackage
dosyasını içe aktarın.
Unity SDK'sına genel bakış
Play uygulama içi güncelleme API'si, Play Core SDK ailesinin bir parçasıdır. Unity eklentisi, uygulamanız ile Play API arasındaki iletişimi yönetmek için bir AppUpdateManager
sınıfı sunar. Uygulama içi güncellemeleri yönetmek için bu sınıfı kullanabilmenizden önce sınıfı örneklemeniz gerekir:
AppUpdateManager appUpdateManager = new AppUpdateManager();
Güncelleme olup olmadığını kontrol etme
Güncelleme isteğinde bulunmadan önce uygulamanız için güncelleme olup olmadığını kontrol edin. Komut dizisi içinde güncelleme olup olmadığını kontrol etmek için AppUpdateManager
öğesini kullanın:
IEnumerator CheckForUpdate()
{
PlayAsyncOperation<AppUpdateInfo, AppUpdateErrorCode> appUpdateInfoOperation =
appUpdateManager.GetAppUpdateInfo();
// Wait until the asynchronous operation completes.
yield return appUpdateInfoOperation;
if (appUpdateInfoOperation.IsSuccessful)
{
var appUpdateInfoResult = appUpdateInfoOperation.GetResult();
// Check AppUpdateInfo's UpdateAvailability, UpdatePriority,
// IsUpdateTypeAllowed(), etc. and decide whether to ask the user
// to start an in-app update.
}
else
{
// Log appUpdateInfoOperation.Error.
}
}
Döndürülen AppUpdateInfo
örneği, güncelleme kullanılabilirlik durumunu içerir. Uygulama içi güncelleme devam ediyorsa örnek, devam eden güncellemenin durumunu da bildirir.
Güncellemenin güncel olup olmadığını kontrol etme
Kullanıcıya Play Store üzerinden son güncelleme bildirimi gönderildikten bu yana ne kadar süre geçtiğini de kontrol edebilirsiniz. Bu, esnek bir güncelleme mi yoksa anında güncelleme mi başlatacağınıza karar vermenize yardımcı olabilir. Örneğin, kullanıcıyı esnek bir güncellemeyle bilgilendirmeden önce birkaç gün bekleyebilir ve hemen güncelleme yapmadan önce birkaç gün daha bekleyebilirsiniz.
Güncellemenin Play Store'da kullanıma sunulmasından bu yana geçen gün sayısını kontrol etmek için ClientVersionStalenessDays
simgesini kullanın:
var stalenessDays = appUpdateInfoOperation.ClientVersionStalenessDays;
Güncelleme önceliğini kontrol etme
Google Play Developer API, her güncellemenin önceliğini ayarlamanıza olanak tanır. Bu sayede uygulamanız, kullanıcıya güncellemeyi ne kadar güçlü bir şekilde önereceğine karar verebilir. Örneğin, güncelleme önceliğini belirlemek için aşağıdaki stratejiyi kullanabilirsiniz:
- Kullanıcı arayüzünde küçük iyileştirmeler: Düşük öncelikli güncelleme; esnek güncelleme veya anlık güncelleme isteğinde bulunmayın.
- Performans iyileştirmeleri: Orta öncelikli güncelleme; esnek bir güncelleme isteyin.
- Kritik güvenlik güncellemesi: Yüksek öncelikli güncellemedir. Hemen güncelleme isteyin.
Google Play, önceliği belirlemek için 0 ile 5 arasında bir tam sayı kullanır. 0 varsayılan, 5 ise en yüksek önceliktir. Bir güncellemenin önceliğini ayarlamak için Google Play Developer API'de Edits.tracks.releases
altındaki inAppUpdatePriority
alanını kullanın. Sürüme yeni eklenen tüm sürümlerin önceliği, sürümle aynı kabul edilir. Öncelik yalnızca yeni bir sürüm kullanıma sunulduğunda belirlenebilir ve daha sonra değiştirilemez.
Önceliği, Play Developer API dokümanlarında açıklandığı şekilde Google Play Developer API'yi kullanarak ayarlayın.
Uygulama içi güncelleme önceliği, Edit.tracks: update
metodunda iletilen Edit.tracks
kaynağında belirtilmelidir. Aşağıdaki örnekte, sürüm kodu 88 ve inAppUpdatePriority
5 olan bir uygulamanın yayınlanması gösterilmektedir:
{ "releases": [{ "versionCodes": ["88"], "inAppUpdatePriority": 5, "status": "completed" }] }
Uygulamanızın kodunda, UpdatePriority
kullanarak belirli bir güncellemenin öncelik düzeyini kontrol edebilirsiniz:
var priority = appUpdateInfoOperation.UpdatePriority;
Güncelleme başlatma
Güncelleme olduğunu doğruladıktan sonra AppUpdateManager.StartUpdate()
simgesini kullanarak güncelleme isteğinde bulunabilirsiniz.
Güncelleme isteğinde bulunmadan önce güncel bir AppUpdateInfo
nesnenizin bulunduğundan emin olun. Güncelleme akışını yapılandırmak için bir AppUpdateOptions
nesnesi de oluşturmanız gerekir.
Aşağıdaki örnekte, anında güncelleme akışı için bir AppUpdateOptions
nesnesi oluşturulmaktadır:
// Creates an AppUpdateOptions defining an immediate in-app
// update flow and its parameters.
var appUpdateOptions = AppUpdateOptions.ImmediateAppUpdateOptions();
Aşağıdaki örnekte, esnek bir güncelleme akışı için bir AppUpdateOptions
nesnesi oluşturulmaktadır:
// Creates an AppUpdateOptions defining a flexible in-app
// update flow and its parameters.
var appUpdateOptions = AppUpdateOptions.FlexibleAppUpdateOptions();
AppUpdateOptions
nesnesi, sınırlı cihaz depolama alanı olması durumunda güncellemenin öğe paketlerini temizlemesine izin verilip verilmeyeceğini tanımlayan bir AllowAssetPackDeletion
alanı da içerir. Bu alan varsayılan olarak false
olarak ayarlanır ancak allowAssetPackDeletion
isteğe bağlı bağımsız değişkenini ImmediateAppUpdateOptions()
veya FlexibleAppUpdateOptions()
olarak ileterek true
olarak ayarlayabilirsiniz:
// Creates an AppUpdateOptions for an immediate flow that allows
// asset pack deletion.
var appUpdateOptions =
AppUpdateOptions.ImmediateAppUpdateOptions(allowAssetPackDeletion: true);
// Creates an AppUpdateOptions for a flexible flow that allows asset
// pack deletion.
var appUpdateOptions =
AppUpdateOptions.FlexibleAppUpdateOptions(allowAssetPackDeletion: true);
Sonraki adımlar, esnek güncelleme mi yoksa anlık güncelleme mi istediğinize bağlıdır.
Esnek güncellemeyi işleme
Güncel bir AppUpdateInfo
nesnesi ve düzgün yapılandırılmış bir AppUpdateOptions
nesnesi oluşturduktan sonra, güncelleme akışı isteğinde bulunmak için AppUpdateManager.StartUpdate()
işlevini ayrıştırmalı olarak çağırabilirsiniz.
IEnumerator StartFlexibleUpdate()
{
// Creates an AppUpdateRequest that can be used to monitor the
// requested in-app update flow.
var startUpdateRequest = appUpdateManager.StartUpdate(
// The result returned by PlayAsyncOperation.GetResult().
appUpdateInfoResult,
// The AppUpdateOptions created defining the requested in-app update
// and its parameters.
appUpdateOptions);
while (!startUpdateRequest.IsDone)
{
// For flexible flow,the user can continue to use the app while
// the update downloads in the background. You can implement a
// progress bar showing the download status during this time.
yield return null;
}
}
Esnek bir güncelleme akışı için, indirme işlemi başarıyla tamamlandıktan sonra uygulama güncellemesinin yüklenmesini tetiklemeniz gerekir. Bunun için aşağıdaki örnekte gösterildiği gibi AppUpdateManager.CompleteUpdate()
işlevini çağırın:
IEnumerator CompleteFlexibleUpdate()
{
var result = appUpdateManager.CompleteUpdate();
yield return result;
// If the update completes successfully, then the app restarts and this line
// is never reached. If this line is reached, then handle the failure (e.g. by
// logging result.Error or by displaying a message to the user).
}
Acil güncellemeyi işleme
Güncel bir AppUpdateInfo
nesnesi ve düzgün yapılandırılmış bir AppUpdateOptions
nesnesi oluşturduktan sonra, güncelleme akışı isteğinde bulunmak için AppUpdateManager.StartUpdate()
işlevini ayrıştırmalı olarak çağırabilirsiniz.
IEnumerator StartImmediateUpdate()
{
// Creates an AppUpdateRequest that can be used to monitor the
// requested in-app update flow.
var startUpdateRequest = appUpdateManager.StartUpdate(
// The result returned by PlayAsyncOperation.GetResult().
appUpdateInfoResult,
// The AppUpdateOptions created defining the requested in-app update
// and its parameters.
appUpdateOptions);
yield return startUpdateRequest;
// If the update completes successfully, then the app restarts and this line
// is never reached. If this line is reached, then handle the failure (for
// example, by logging result.Error or by displaying a message to the user).
}
Google Play, anında güncelleme akışında kullanıcı onayı iletişim kutusu gösterir. Kullanıcı isteği kabul ettiğinde Google Play güncellemeyi otomatik olarak indirip yükler, ardından yükleme başarılı olursa uygulamayı güncellenmiş sürüme yeniden başlatır.
Hata işleme
Bu bölümde, sık karşılaşılan hataların çözümleri açıklanmaktadır.
StartUpdate()
birArgumentNullException
atarsaAppUpdateInfo
boş demektir. Güncelleme akışını başlatmadan önceGetAppUpdateInfo()
tarafından döndürülenAppUpdateInfo
nesnesinin null olmadığından emin olun.PlayAsyncOperation
,ErrorUpdateUnavailable
hata kodunu döndürüyorsa aynı uygulama kimliğine ve imzalama anahtarına sahip güncel bir uygulama sürümünün bulunduğundan emin olun.PlayAsyncOperation
,ErrorUpdateNotAllowed
hata kodunu döndürüyorsaAppUpdateOptions
nesnesi, mevcut güncelleme için izin verilmeyen bir güncelleme türünü gösteriyor demektir. Güncelleme akışını başlatmadan önceAppUpdateInfo
nesnesinin, seçilen güncelleme türüne izin verildiğini belirtip belirtmediğini kontrol edin.
Sonraki adımlar
Entegrasyonunuzun düzgün çalıştığını doğrulamak için uygulamanızın uygulama içi güncellemelerini test edin.