Bu kılavuzda, Unity 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 kodu (C/C++) kullandığı durumlar için ayrı kılavuzlar vardır.
Unity SDK'ya genel bakış
Play uygulama içi güncelleme API'si, Play Core SDK ailesinin bir parçasıdır. Unity
Plugin, uygulamanız ile Google Play API arasındaki iletişimi yönetmek için AppUpdateManager sınıfını sunar. Uygulama içi güncellemeleri yönetmek için bu sınıfı kullanmadan önce ö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.appupdateOpenUPM
Paket yöneticisi ayarlarını açmak için Unity menü seçeneği olan Edit > Project Settings > Package Manager'ı (Düzenle > Proje Ayarları > Paket Yöneticisi) seçin.
OpenUPM'yi Paket Yöneticisi penceresine kapsamlı 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.appupdateUnity menü seçeneği Window > Package Manager'ı belirleyerek paket yöneticisi menüsünü açın.
Yönetici kapsamı açılır listesini Kayıtlarım'ı seçecek şekilde ayarlayın.
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
.unitypackagesürümünü indirin..unitypackagedosyasını, Unity menü seçeneği Öğeler > Paketi içe aktar > Özel Paket'i belirleyip tüm öğeleri içe aktararak içe aktarın.
Güncelleme olup olmadığını kontrol etme
Güncelleme isteğinde bulunmadan önce uygulamanız için güncelleme olup olmadığını kontrol edin. AppUpdateManager kullanarak eş yordam içinde güncelleme olup olmadığını kontrol edin:
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ılabilirliği durumunu içerir. Uygulama içi güncelleme zaten devam ediyorsa örnek, devam eden güncellemenin durumunu da bildirir.
Güncelliğini yitirmiş güncellemeleri kontrol etme
Güncelleme olup olmadığını kontrol etmenin yanı sıra, kullanıcının Play Store üzerinden en son güncelleme bildirimi almasından bu yana ne kadar zaman geçtiğini de kontrol etmek isteyebilirsiniz. Bu, esnek güncelleme mi yoksa anında güncelleme mi başlatmanız gerektiğine karar vermenize yardımcı olabilir. Örneğin, kullanıcıya esnek bir güncelleme bildirimi göndermeden önce birkaç gün, ardından da acil güncelleme yapmasını istemeden önce birkaç gün bekleyebilirsiniz.
Güncellemenin Play Store'da kullanıma sunulmasının üzerinden kaç gün geçtiğini kontrol etmek için ClientVersionStalenessDays aracını 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, uygulamanızın kullanıcıya güncellemeyi ne kadar ısrarlı bir şekilde önereceğine karar vermesini sağlar. Örneğin, güncelleme önceliğini ayarlamak için aşağıdaki stratejiyi göz önünde bulundurun:
- Kullanıcı arayüzüyle ilgili küçük iyileştirmeler: Düşük öncelikli güncelleme; esnek güncelleme veya acil güncelleme isteğinde bulunulmaz.
- Performans iyileştirmeleri: Orta öncelikli güncelleme; esnek bir güncelleme isteyin.
- Kritik güvenlik güncellemesi: Yüksek öncelikli güncelleme; hemen güncelleme isteğinde bulunun.
Google Play, önceliği belirlemek için 0 ile 5 arasında bir tam sayı değeri kullanır. Varsayılan değer 0, en yüksek öncelik ise 5'tir. Bir güncellemenin önceliğini ayarlamak için Google Play Developer API'deki Edits.tracks.releases altında inAppUpdatePriority alanını kullanın. Sürüme yeni eklenen tüm sürümler, sürümle aynı önceliğe sahip olarak kabul edilir. Öncelik yalnızca yeni bir sürüm yayınlanırken ayarlanabilir ve daha sonra değiştirilemez.
Google Play Developer API'yi kullanarak önceliği Play Developer API dokümanlarında açıklandığı şekilde 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üncellemeyi başlatma
Güncelleme olup olmadığını kontrol ettikten sonra AppUpdateManager.StartUpdate() kullanarak güncelleme isteğinde bulunabilirsiniz. Güncelleme isteğinde bulunmadan önce güncel bir AppUpdateInfo nesnenizin olduğ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 örnek, esnek güncelleme akışı için bir AppUpdateOptions nesnesi oluşturur:
// 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()'a ileterek bunun yerine 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 nesneniz ve düzgün şekilde yapılandırılmış bir AppUpdateOptions nesneniz olduğunda, AppUpdateManager.StartUpdate() işlevini çağırarak eşzamansız olarak güncelleme akışı isteğinde bulunabilirsiniz.
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).
}
Hemen güncelleme yapma
Güncel bir AppUpdateInfo nesneniz ve düzgün şekilde yapılandırılmış bir AppUpdateOptions nesneniz olduğunda, AppUpdateManager.StartUpdate() işlevini çağırarak eşzamansız olarak güncelleme akışı isteğinde bulunabilirsiniz.
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ışı için kullanıcı onayı iletişim kutusu gösterir. Kullanıcı isteği kabul ettiğinde Google Play, güncellemeyi otomatik olarak indirip yükler. Yükleme başarılı olursa uygulamayı güncellenmiş sürümde yeniden başlatır.
Hata işleme
Bu bölümde, sık karşılaşılan hataların çözümleri açıklanmaktadır.
StartUpdate(),ArgumentNullExceptionoluşturursaAppUpdateInfodeğerinin boş olduğu anlamına gelir. Güncelleme akışını başlatmadan önceAppUpdateInfonesnesininGetAppUpdateInfo()tarafından döndürülen değerinin boş olmadığından emin olun.PlayAsyncOperation,ErrorUpdateUnavailablehata kodunu döndürürse aynı uygulama kimliğine ve imzalama anahtarına sahip güncellenmiş bir uygulama sürümünün mevcut olduğundan emin olun.PlayAsyncOperation,ErrorUpdateNotAllowedhata kodunu döndürürseAppUpdateOptionsnesnesinin, mevcut güncelleme için izin verilmeyen bir güncelleme türünü gösterdiği anlamına gelir. Güncelleme akışını başlatmadan önceAppUpdateInfonesnesinin, seçilen güncelleme türüne izin verildiğini gösterip göstermediğini kontrol edin.
Sonraki adımlar
Entegrasyonunuzun doğru şekilde çalıştığını doğrulamak için uygulamanızın uygulama içi güncellemelerini test edin.