Bu kılavuzda, Unity'yi 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.
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 Google 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ı kullanmadan önce sınıfı örneklemeniz gerekir:
AppUpdateManager appUpdateManager = new AppUpdateManager();
Geliştirme ortamınızı kurma
OpenUPM-CLI
OpenUPM CLI yüklüyse OpenUPM kayıt defterini aşağıdaki 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'i 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..unitypackage
dosyasını içe aktarmak için Unity menü seçeneğini Öğeler > Paketi içe aktar > Özel Paket'i belirleyip tüm öğeleri içe aktarın.
Güncelleme kullanılabilirliğini 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(), ... 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 zaten 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 en 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 anında güncelleme isteğinde bulunmayın.
- Performans iyileştirmeleri: Orta öncelikli güncelleme; esnek 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ı değeri kullanır. 0 varsayılan, 5 ise en yüksek önceliktir. Bir güncellemenin önceliğini ayarlamak için Google Play Developer API'sinde 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 ayarlanabilir 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
yönteminde 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 verilmediğini tanımlayan bir AllowAssetPackDeletion
alanı da içerir. Bu alan varsayılan olarak false
değerine ayarlanmıştır ancak allowAssetPackDeletion
isteğe bağlı bağımsız değişkenini ImmediateAppUpdateOptions()
veya FlexibleAppUpdateOptions()
değerine göndererek true
değerine 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 hemen 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ışını asynkron olarak istemek için AppUpdateManager.StartUpdate()
işlevini ç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. Bunu yapmak 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).
}
Anında güncelleme yapma
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
null olur. Güncelleme akışını başlatmadan önceGetAppUpdateInfo()
kaynağı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ü belirtiyor 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.