Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Önemli
Visual Studio App Center, 30 Haziran 2026'ya kadar desteklenmeye devam edecek Analiz ve Tanılama özellikleri dışında 31 Mart 2025'te kullanımdan kaldırılmıştır. Daha fazla bilgi edinin.
App Center Distribute, app Center aracılığıyla dağıttığınızda kullanıcılarınızın uygulamanın yeni bir sürümünü yüklemesine olanak verir. Uygulamanın yeni bir sürümü kullanılabilir durumdaysa SDK, kullanıcılara yeni sürümü indirmeleri veya ertelemeleri için bir güncelleştirme iletişim kutusu sunar. Güncelleştirmeyi seçtikten sonra SDK uygulamanızı güncelleştirmeye başlar.
Uyarı
Google Play, uygulama içi güncelleştirme kodunu çalışma zamanında kullanılmasa bile kötü amaçlı davranış olarak kabul eder. Uygulamanızı Google Play'e göndermeden önce , bu bölümde belirtildiği gibi SDK'nın bir değişkenini kullanın veya uygulama içi güncelleştirme kodu içeren Distribute SDK'sını tamamen kaldırın. Bunun yapılmaması, uygulamanın Google Play'den uyumsuzluğuna ve kaldırılmasına neden olabilir.
Uyarı
Otomatik kullanıcı arabirimi testleri çalıştırıyorsanız, uygulama içi güncelleştirmeler App Center arka uçta kimlik doğrulaması yapmaya çalışacakları için otomatik kullanıcı arabirimi testlerinizi engeller. Ui testleriniz için App Center Distribute'ı etkinleştirmemenizi öneririz.
Uygulamanıza uygulama içi güncelleştirmeler ekleme
Henüz uygulamanızda SDK'yı ayarlamadıysanız ve başlatmadıysanız Başlarken bölümünü izleyin.
1. App Center Distribute modülünü ekleme
App Center SDK modüler bir yaklaşımla tasarlanmıştır; bir geliştiricinin yalnızca ilgilendiği hizmetlerin modüllerini tümleştirmesi gerekir.
Projenin uygulama düzeyi build.gradle dosyasını (
app/build.gradle
) açın ve sonraapply plugin
aşağıdaki satırları ekleyin.dependencies { def appCenterSdkVersion = '5.0.6' implementation "com.microsoft.appcenter:appcenter-distribute:${appCenterSdkVersion}" }
Uyarı
Android Gradle Plugin sürümünüz 3.0.0'dan düşükse implementation'ı compile ile değiştirmeniz gerekir.
build.gradle dosyanızı kaydedin ve Android Studio'da bir Gradle eşitlemesi tetiklediğinize emin olun.
DownloadManager güncelleştirmeleri indirmek için kullanılır. App Center SDK'sı güvenliği geliştirmek için TLS 1.2'yi zorunlu kıldı.
2. App Center Dağıtımını Başlat
App Center'ı kullanmak için, kullanmak istediğiniz modülleri kabul edin. Varsayılan olarak hiçbir modül başlatılmaz ve SDK'yı başlatırken bunların her birini açıkça çağırmanız gerekir.
App Center Distribute hizmetini başlatmak için Yönteminize AppCenter.start()
Distribute sınıfını ekleyin.
AppCenter.start(getApplication(), "{Your App Secret}", Distribute.class);
AppCenter.start(application, "{Your App Secret}", Distribute::class.java)
Kod örneğindeki {Your App Secret}
'yi uygulama gizli anahtarınızla değiştirdiğinizden emin olun. Android Studio'ya sınıf Distribute
başvurusunu start()
yöntemine eklediğinizde gerekli içeri aktarma deyimini otomatik olarak önerir. Ancak sınıf adlarının tanınmadığını belirten bir hata varsa, etkinlik sınıfınızdaki içeri aktarma deyimlerine aşağıdaki satırları ekleyin.
import com.microsoft.appcenter.AppCenter;
import com.microsoft.appcenter.distribute.Distribute;
import com.microsoft.appcenter.AppCenter
import com.microsoft.appcenter.distribute.Distribute
Uyarı
Android 10 veya üzeri sürümlerde arka planda başlatma etkinliği kısıtlamaları vardır. Etkinlikleri arka planda başlatmayla ilgili kısıtlamalarla ilgili makaleye bakın.
Uyarı
Android 10 (Go sürümü) üzerinde çalışan uygulamalar SYSTEM_ALERT_WINDOW izni alamaz. Go cihazlarında SYSTEM_ALERT_WINDOW hakkındaki makaleye bakın.
Uyarı
Android 11'dan başlayarak, ACTION_MANAGE_OVERLAY_PERMISSION
amaçlar kullanıcıyı her zaman üst düzey Ayarlar ekranına getirir ve burada kullanıcı uygulamalar için izinleri verebilir veya iptal SYSTEM_ALERT_WINDOW
edebilir.
Android 11'de izin güncelleştirmeleri hakkındaki makaleye bakın.
Google Play sürümünüzü hazırlayın
Google Play, uygulama içi güncelleştirme kodunu çalışma zamanında kullanılmasa bile kötü amaçlı davranış olarak kabul eder. Uygulamanızı Google Play'e göndermeden önce, bu bölümde belirtildiği gibi SDK'nın bir değişkenini kullanın veya uygulama içi güncelleştirme kodu içeren Distribute SDK'sını tamamen kaldırın. Bunun yapılmaması, uygulamanın Google Play'den uyumsuzluğuna ve kaldırılmasına neden olabilir. Bunu kolaylaştırmak için App Center Distribute SDK'sının saplanmış API'ler içeren sürümünü sağlıyoruz, bu nedenle sizin için tek değişiklik bağımlılık değişimidir.
Projenin uygulama düzeyi build.gradle dosyasını (
app/build.gradle
açın.Ürün tatları ekleyerek derleme değişkenlerini yapılandırın:
android { flavorDimensions "distribute" productFlavors { appCenter { dimension "distribute" } googlePlay { dimension "distribute" } } }
Ürün türüne göre farklı bağımlılıkları kullanmak için bağımlılık bloğunu değiştirin:
dependencies { def appCenterSdkVersion = "5.0.6" appCenterImplementation "com.microsoft.appcenter:appcenter-distribute:${appCenterSdkVersion}" googlePlayImplementation "com.microsoft.appcenter:appcenter-distribute-play:${appCenterSdkVersion}" }
build.gradle dosyanızı kaydedin ve Android Studio'da bir Gradle eşitlemesi tetiklediğinize emin olun.
Derleme değişkenini Derleme > Seçimi Derleme Değişkeni açılan menüsünde veya Araç penceresi çubuğundaki Derleme Varyantları'nda değiştirebilirsiniz.
Derleme değişkenlerini yapılandırma hakkında daha fazla bilgiyi Android belgelerinden okuyabilirsiniz.
Özel dağıtım grubunu kullanma
Varsayılan olarak, Distribute bir genel dağıtım grubu kullanır. Özel bir dağıtım grubu kullanmak istiyorsanız, bunu API aracılığıyla setUpdateTrack
açıkça ayarlamanız gerekir.
Distribute.setUpdateTrack(UpdateTrack.PRIVATE);
Distribute.setUpdateTrack(UpdateTrack.PRIVATE)
Uyarı
Varsayılan değer şudur: UpdateTrack.PUBLIC
. Bu yöntem yalnızca yöntem çağrısından AppCenter.start
önce çağrılabilir. Uygulama işlemi yeniden başlatıldığında güncelleştirme izlemesinde yapılan değişiklikler kalıcı olmaz ve bu nedenle yöntem her zaman çağrıdan AppCenter.start
önce çağrılmazsa varsayılan olarak genel olur.
Uygulama etkin durumdayken (Distribute.setUpdateTrack(UpdateTrack.PRIVATE);
ve AppCenter.start
sonrasında), kullanıcının kimliğini doğrulamak için bir tarayıcı penceresi açılır. Sonraki tüm güncelleştirme denetimleri özel parçada en son sürümü alır.
Bir kullanıcı özel yoldaysa, başarılı kimlik doğrulamasından sonra üyesi olduğu tüm özel dağıtım gruplarından en son sürümü alacakları anlamına gelir. Bir kullanıcı genel yoldaysa, herhangi bir genel dağıtım grubundan en son sürümü edinecektir.
Güncelleştirme için Otomatik Denetimi Devre Dışı Bırak
Varsayılan olarak, SDK yeni sürümleri otomatik olarak denetler:
- Uygulama başlatıldığında.
- Uygulama arka plana geçtikten sonra ön plana çıktığında.
- Daha önce devre dışı bırakılmışsa Distribute modülünü etkinleştirirken.
Yeni sürümleri el ile denetlemek istiyorsanız, güncelleştirme için otomatik denetimi devre dışı bırakabilirsiniz. Bunu yapmak için SDK başlamadan önce aşağıdaki yöntemi çağırın:
Distribute.disableAutomaticCheckForUpdate();
Distribute.disableAutomaticCheckForUpdate()
Uyarı
Bu yöntem, yöntem çağrısından AppCenter.start
önce çağrılmalıdır.
Ardından, aşağıdaki bölümde açıklanan API'yi kullanabilirsiniz checkForUpdate
.
Güncelleştirmeyi El ile Denetle
Distribute.checkForUpdate();
Distribute.checkForUpdate()
Bu, App Center'a bir istek gönderir ve kullanılabilir yeni bir sürüm olması durumunda bir güncelleştirme iletişim kutusu görüntüler.
Uyarı
Otomatik güncelleştirmeler etkinleştirildiğinde bile güncelleştirme araması için el ile yapılan bir denetim çalışır. Başka bir denetim zaten yapılıyorsa elle yapılan güncelleme denetimi yoksayılır. Kullanıcı güncelleştirmeleri ertelediyse (en son sürüm zorunlu bir güncelleştirme olmadığı sürece) güncelleştirmeyi el ile denetleme işlemi yapılmaz.
Uygulama içi güncelleştirme iletişim kutusunu özelleştirme veya yerelleştirme
1. Metni özelleştirme veya yerelleştirme
Güncelleştirme iletişim kutusunda görüntülenen metni değiştirmek veya yerelleştirmek istiyorsanız kendi kaynak dizelerinizi kolayca sağlayabilirsiniz. Bu kaynak dosyasındaki dize dosyalarına bakın. Aynı dize adını/anahtarını kullanın ve kendi uygulama kaynak dosyalarınızdaki iletişim kutusuna yansıtılacak yerelleştirilmiş değeri belirtin.
2. Güncelleştirme iletişim kutusunu özelleştirme
Arabirimi uygulayarak DistributeListener
varsayılan güncelleştirme iletişim kutusunun görünümünü özelleştirebilirsiniz.
AppCenter.start
fonksiyonunu çağırmadan önce, aşağıdaki örnekte gösterildiği gibi dinleyiciyi kaydetmeniz gerekir.
Distribute.setListener(new MyDistributeListener());
AppCenter.start(...);
Distribute.setListener(MyDistributeListener())
AppCenter.start(...)
SDK iletişim kutusunun yerine özel bir tane koyan dinleyici uygulamasına bir örnek aşağıda verilmiştir:
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.net.Uri;
import com.microsoft.appcenter.distribute.Distribute;
import com.microsoft.appcenter.distribute.DistributeListener;
import com.microsoft.appcenter.distribute.ReleaseDetails;
import com.microsoft.appcenter.distribute.UpdateAction;
public class MyDistributeListener implements DistributeListener {
@Override
public boolean onReleaseAvailable(Activity activity, ReleaseDetails releaseDetails) {
// Look at releaseDetails public methods to get version information, release notes text or release notes URL
String versionName = releaseDetails.getShortVersion();
int versionCode = releaseDetails.getVersion();
String releaseNotes = releaseDetails.getReleaseNotes();
Uri releaseNotesUrl = releaseDetails.getReleaseNotesUrl();
// Build our own dialog title and message
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(activity);
dialogBuilder.setTitle("Version " + versionName + " available!"); // you should use a string resource instead, this is just a simple example
dialogBuilder.setMessage(releaseNotes);
// Mimic default SDK buttons
dialogBuilder.setPositiveButton(com.microsoft.appcenter.distribute.R.string.appcenter_distribute_update_dialog_download, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// This method is used to tell the SDK what button was clicked
Distribute.notifyUpdateAction(UpdateAction.UPDATE);
}
});
// We can postpone the release only if the update isn't mandatory
if (!releaseDetails.isMandatoryUpdate()) {
dialogBuilder.setNegativeButton(com.microsoft.appcenter.distribute.R.string.appcenter_distribute_update_dialog_postpone, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// This method is used to tell the SDK what button was clicked
Distribute.notifyUpdateAction(UpdateAction.POSTPONE);
}
});
}
dialogBuilder.setCancelable(false); // if it's cancelable you should map cancel to postpone, but only for optional updates
dialogBuilder.create().show();
// Return true if you're using your own dialog, false otherwise
return true;
}
@Override
public void onNoReleaseAvailable(Activity activity) {
Toast.makeText(activity, activity.getString(R.string.no_updates_available), Toast.LENGTH_LONG).show();
}
}
import android.app.Activity
import android.app.AlertDialog
import com.microsoft.appcenter.distribute.Distribute
import com.microsoft.appcenter.distribute.DistributeListener
import com.microsoft.appcenter.distribute.ReleaseDetails
import com.microsoft.appcenter.distribute.UpdateAction
class MyDistributeListener : DistributeListener {
override fun onReleaseAvailable(activity: Activity, releaseDetails: ReleaseDetails): Boolean {
// Look at releaseDetails public methods to get version information, release notes text or release notes URL
val versionName = releaseDetails.shortVersion
val versionCode = releaseDetails.version
val releaseNotes = releaseDetails.releaseNotes
val releaseNotesUrl = releaseDetails.releaseNotesUrl
// Build our own dialog title and message
val dialogBuilder = AlertDialog.Builder(activity)
dialogBuilder.setTitle("Version $versionName available!") // you should use a string resource instead, this is just a simple example
dialogBuilder.setMessage(releaseNotes)
// Mimic default SDK buttons
dialogBuilder.setPositiveButton(
com.microsoft.appcenter.distribute.R.string.appcenter_distribute_update_dialog_download
) { dialog, which ->
// This method is used to tell the SDK what button was clicked
Distribute.notifyUpdateAction(UpdateAction.UPDATE)
}
// We can postpone the release only if the update isn't mandatory
if (!releaseDetails.isMandatoryUpdate) {
dialogBuilder.setNegativeButton(
com.microsoft.appcenter.distribute.R.string.appcenter_distribute_update_dialog_postpone
) { dialog, which ->
// This method is used to tell the SDK what button was clicked
Distribute.notifyUpdateAction(UpdateAction.POSTPONE)
}
}
dialogBuilder.setCancelable(false) // if it's cancelable you should map cancel to postpone, but only for optional updates
dialogBuilder.create().show()
// Return true if you're using your own dialog, false otherwise
return true
}
override fun onNoReleaseAvailable(activity: Activity) {
Toast.makeText(activity, activity.getString(R.string.no_updates_available), Toast.LENGTH_LONG).show()
}
}
Örnekte gösterildiği gibi, dinleyiciniz true
döndürüyorsa, Distribute.notifyUpdateAction(UpdateAction.UPDATE);
veya Distribute.notifyUpdateAction(UpdateAction.POSTPONE);
çağırmalısınız.
Eğer notifyUpdateAction
öğesini çağırmazsanız, geri arama her etkinlik değişikliğinde yinelenir.
Kullanıcı eylemi SDK'ya bildirilmeden önce etkinlik değişirse dinleyici aynı sürümle yeniden çağrılabilir.
Bu davranış aşağıdaki senaryoları kapsayacak şekilde gereklidir:
- Uygulamanız arka plana gönderilir ( HOME tuşuna basma gibi) sonra farklı bir etkinlikte sürdürülür.
- Etkinliğiniz, uygulamadan çıkmadan (bazı bildirimlere tıklamak gibi) başka bir etkinlik kapsamındadır.
- Diğer benzer senaryolar.
Bu durumda, iletişim kutusunu barındıran etkinlik kullanıcı etkileşimi olmadan değiştirilebilir. Özel iletişim kutusunu geri yükleyebilmeniz için SDK dinleyiciyi yeniden çağırır.
SDK güncelleştirmeleri denetlediğinde ve şu anda kullanılandan daha yeni kullanılabilir güncelleştirmeler bulamadığında arabirim onNoReleaseAvailable
DistributeListener
geri çağrısı çağrılır. Bu, bu tür senaryolarda özel kod yürütmenize olanak tanır. Yukarıdaki örnek, güncelleştirme bulunmadığında toast mesajının nasıl gösterileceğini göstermektedir.
Çalışma zamanında App Center Distribute'ı etkinleştirme veya devre dışı bırakma
App Center Distribute'ı çalışma zamanında etkinleştirebilir ve devre dışı bırakabilirsiniz. Devre dışı bırakırsanız SDK, uygulama içi güncelleştirme işlevi sağlamaz, ancak Hizmeti App Center portalında dağıtma özelliğini kullanmaya devam edebilirsiniz.
Distribute.setEnabled(false);
Distribute.setEnabled(false)
App Center Distribute'ı yeniden etkinleştirmek için aynı API'yi kullanın ancak parametre olarak geçirin true
.
Distribute.setEnabled(true);
Distribute.setEnabled(true)
Durum, uygulama başlatmaları arasında cihazın depolama alanında kalıcı olur.
Bu API zaman uyumsuzdur. Bu konuda daha fazla bilgiyi App Center Zaman Uyumsuz API'ler kılavuzumuzdan okuyabilirsiniz.
Uyarı
Distribute
başlatıldıktan sonra bu yöntem yalnızca kullanılmalıdır.
App Center Distribute'ın etkinleştirilip etkinleştirilmediğini denetleyin
App Center Distribute'ın etkinleştirilip etkinleştirilmediğini de de de kontrol edebilirsiniz:
Distribute.isEnabled();
Distribute.isEnabled()
Bu API zaman uyumsuzdur. Bu konuda daha fazla bilgiyi App Center Zaman Uyumsuz API'ler kılavuzumuzdan okuyabilirsiniz.
Uyarı
Bu yöntem, Distribute
başlatıldıktan sonra kullanılmalıdır, başlamadan önce her zaman false
döndürecektir.
Hata ayıklama derlemeleri için uygulama içi güncelleştirmeleri etkinleştirme
App Center varsayılan olarak yalnızca sürüm derlemeleri için uygulama içi güncelleştirmeleri etkinleştirir.
Hata ayıklama derlemelerinde uygulama içi güncelleştirmeleri etkinleştirmek için, önce AppCenter.start
aşağıdaki yöntemi çağırın:
Distribute.setEnabledForDebuggableBuild(true);
Distribute.setEnabledForDebuggableBuild(true)
Uyarı
Bu yöntem yalnızca hata ayıklama derlemelerini etkiler ve yayın derlemelerini etkilemez.
Hata ayıklama derlemesi, android:debuggable
bayrağının true
olarak ayarlandığı anlamına gelir (bu genellikle, önceden tanımlanmış hata ayıklama derlemesi varyantları tarafından Gradle aracılığıyla otomatik olarak yapılır). Aksi takdirde, bu bir sürüm derlemesidir.
Uygulama içi güncelleştirmeler nasıl çalışır?
Uyarı
Uygulama içi güncelleştirmelerin çalışması için bağlantıdan bir uygulama derlemesi indirilmelidir. IDE'den veya el ile yüklenirse çalışmaz.
Uygulama içi güncelleştirmeler özelliği aşağıdaki gibi çalışır:
Bu özellik yalnızca App Center Distribute hizmeti kullanılarak dağıtılan RELEASE derlemeleriyle (varsayılan olarak) çalışır.
SDK'yı tümleştirdikten, uygulamanızın yayın sürümünü derleyip App Center'a yükledikten sonra, bu dağıtım grubundaki kullanıcılara yeni sürüm için e-posta yoluyla bildirim gönderilir.
Her kullanıcı e-postasında bağlantıyı açtığında, uygulama kendi cihazına yüklenir. Yüklemek için e-posta bağlantısını kullanmaları önemlidir. Dışarıdan yüklemeyi desteklemiyoruz. Bir uygulama bağlantıdan indirildiğinde SDK, güncelleştirmeleri daha sonra denetlemek için tanımlama bilgilerinden önemli bilgileri kaydeder, aksi takdirde SDK'da bu anahtar bilgileri bulunmaz.
Uygulama izlemeyi özel olarak ayarlarsa, kullanıcının kimliğini doğrulamak ve uygulama içi güncelleştirmeleri etkinleştirmek için bir tarayıcı açılır. Kimlik doğrulama bilgileri genel parçaya geri dönüp daha sonra tekrar özel duruma geçtiğinde bile geçerli kaldığı sürece tarayıcı yeniden açılmaz. Tarayıcı kimlik doğrulaması başarılı olursa, kullanıcı otomatik olarak uygulamaya yeniden yönlendirilir. Parça genelse (varsayılan değerdir), sonraki adım doğrudan gerçekleşir.
Uygulamanın yeni bir sürümü, aşağıdaki durumlarda kullanıcıların uygulamanızı güncelleştirmesini isteyen uygulama içi güncelleştirme iletişim kutusunu gösterir:
-
versionCode
değerinin daha yüksek olması -
versionCode
eşit değerde, ancakversionName
farklı değerde.
-
Tavsiye
Aynı APK'yı ikinci kez yüklerseniz, sürümler aynı olduğundan iletişim kutusu GÖRÜNTÜLENMEZ .
Uygulama içi güncelleştirmeleri nasıl test ederim?
Uygulama içi güncelleştirmeleri test etmek ve her seferinde sürüm numaralarını artırmak için sürüm derlemelerini (App Center SDK'sının Dağıtma modülünü kullanan) App Center Portalı'na yüklemeniz gerekir.
- Henüz yapmadıysanız uygulamanızı App Center Portalı'nda oluşturun.
- Uygulama içi güncelleştirme özelliğini test etme amaçlı olduğunu fark edebilmeniz için yeni bir dağıtım grubu oluşturun ve grubu adlandırın.
- Kendinizi (veya uygulama içi güncelleştirme özelliği testinize dahil etmek istediğiniz tüm kişileri) ekleyin. App Center'da bu uygulama için kullanılmayan yeni veya geçici bir e-posta adresi kullanın. Bu, deneyiminizin gerçek testçilerinizin deneyimine yakın olmasını sağlar.
- Uygulamanızın App Center Distribute içeren ve yukarıda açıklandığı gibi kurulum mantığını içeren yeni bir derleme oluşturun. Grup özelse setUpdateTrack API'sini kullanmaya başlamadan önce özel uygulama içi güncelleştirme izlemesini ayarlamayı unutmayın.
- Portalda Yeni sürümü dağıt düğmesine tıklayın ve uygulama derlemenizi karşıya yükleyin.
- Karşıya yükleme tamamlandıktan sonra İleri'ye tıklayın ve bu uygulama dağıtımının Hedefi olarak oluşturduğunuz Dağıtım grubunu seçin.
- Dağıtım'ı gözden geçirin ve derlemeyi uygulama içi test grubunuzla dağıtın.
- Bu gruptaki kişiler, uygulamanın test edicileri olmak için bir davet alır. Daveti kabul ettikten sonra uygulamayı mobil cihazlarından App Center Portalı'ndan indirebilirler. Uygulama içi güncelleştirmeler yüklendikten sonra, uygulama içi güncelleştirmeleri test etmeye hazırsınız demektir.
- Uygulamanızın
versionCode
öğesini güncelleyin. - Uygulamanızın yayın sürümünü derleyin ve önceki adımda yaptığınız gibi uygulamanızın yeni bir derlemesini karşıya yükleyin ve bunu daha önce oluşturduğunuz Dağıtım Grubuna dağıtın. Uygulama bir sonraki başlatıldığında Dağıtım Grubu üyelerinden yeni bir sürüm istenir.
Tavsiye
Dağıtım Grupları vb. hakkında daha ayrıntılı bilgi için App Center Distribute'ın nasıl kullanıldığına ilişkin bilgilere göz atın. App Center Distribute'ı kullanarak uygulamanızın yeni bir sürümünü kod eklemeden dağıtmak mümkün olsa da App Center Distribute'ı uygulamanızın koduna eklemek, uygulama içi güncelleştirme deneyimine sahip olan test kullanıcılarınız ve kullanıcılarınız için daha sorunsuz bir deneyim sağlar.