Mobil oyunlar, milyarlarca dolarlık cirosu olan bir sektör hâline geldi ve milyonlarca insan her gün akıllı telefon ve tabletlerinde oyun oynuyor. Kullanıcılara en iyi oyun deneyimini sağlamak için geliştiriciler, çeşitli özellikleri ve çözümleri oyunlarına entegre etmek amacıyla yazılım geliştirme kitleri kullanır. Bu tür SDK’ler, analitik veya sosyal ağ entegrasyonu gibi belirli işlevleri projenize eklemek için kullanılabilen hazır kod bloklarıdır. SDK’ler genellikle oyunları daha etkili ve kârlı hâle getirmeye yardımcı olur. Bu makalede, ZiMAD COO’su Ilya Utemov, SDK entegrasyonlarını kullanmayı düşünenler için en yaygın soruları yanıtlıyor ve gelecek vadeden geliştiricilerin karşılaşabileceği tuzaklardan bahsediyor.
SDK nedir ve işlevleri nelerdir?
Bir SDK, (mobil geliştirmede) derlenmiş kod ve kaynaklardan (görüntüler, sesler ve animasyon) oluşan ve belirli işlevleri yerine getiren bir yazılım geliştirme kitidir. Bir geliştirici için genellikle projeye bağlanan ve yeni fırsatlar sunan bir kara kutudur. Uygulamanıza ekleyebileceğiniz bir modül gibi düşünebilirsiniz. Teorik olarak, bir SDK ihtiyacınız olan herhangi bir işlevi yerine getirebilir ve hatta içine ek bir oyun ekleyebilir, ancak gerçekte bunlar genellikle belirli hizmetlere erişmek için kullanılır. Örneğin, herhangi bir MMP platformunun SDK’si, bu platformla çalışmak için işlevler sağlar ve belirli bir tedarikçinin reklamlarıyla çalışmak için bir reklam SDK’si kullanılır.
En popüler SDK’ler Appsflyer/Adjust, Firebase, Google Ads, In-app ve Facebook/Meta Audience Network’tür.
Bir SDK bir mobil oyuna nasıl entegre edilir?
Her şeyden önce, geliştirici, seçtiği bir SDK’nin işlevlerine gerçekten ihtiyaç duyup duymadığına karar vermelidir. Her SDK’nin uygulamanın boyutu üzerinde olumsuz bir etkisi olduğu göz önünde bulundurulmalıdır — bazen birkaç zararsız SDK’yı entegre etmek, oyunun boyutunu kolayca %20-30 oranında arttırabilir ve bu da kullanıcının cihazındaki performansını etkiler. Bir SDK, kullanıcıların canını sıkacak istenmeyen izin istekleri getirebilir (örneğin, konum erişimi gerektiren SDK’lerle karşılaştık ki bu, işlevleri için oldukça alışılmadık bir durumdu). Ayrıca, SDK’lerin insanlar tarafından yazıldığını ve hatalar içerebileceğini belirtmekte fayda var (ancak, popüler SDK’lerin çoğu oldukça kararlıdır). Hâlâ onlara ihtiyacınız olduğuna karar verirseniz, süreç iki şekilde ilerleyebilir.
Tek platformlu bir uygulamadan bahsediyorsak (örneğin, AndroidStudio/XCode gibi markalı platform ortamları kullanılarak Android/iOS için bir oyun geliştirildiğinde), entegrasyon, uygulamaya bir SDK dâhil etmeye kadar gelir. Ayrıca, platformlar arası bir motor (Cordova, Flutter, Unity, Unreal) kullanılarak geliştirilen bir uygulama söz konusu olduğunda, SDK entegrasyonu neredeyse her zaman hedef platformların her biri için SDK’ler içeren belirli bir paketin entegrasyonuna odaklanır. Aynı zamanda, bir paketin, örneğin Xbox için değil de Android/iOS için SDK’ler içerdiği durumlar vardır. Bu nedenle, platformlar arası geliştirme ortamlarını kullanırken, ihtiyacınız olan SDK’nın yalnızca ortamınız için değil, aynı zamanda hedef platformunuz için de mevcut olduğundan emin olmanız önemlidir.
Mobil oyun geliştirmede en sık kullanılan SDK’ler hangileridir?
En popüler olanları, çeşitli analitik sistemlerle çalışmak için SDK’ler, MMP, oyun içi satın almalar ve reklam SDK’leridir. Genel olarak, modern bir oyunda kolayca düzinelerce farklı SDK olabilir.
Bir platform için oluşturulan bir SDK’yi başka bir platform için kullanmak mümkün müdür?
Çoğu zaman hayır. Android için SDK yoksa, SDK’yi yalnızca Windows için kullanamazsınız. Ancak, bazı iyi istisnalar vardır. Örneğin, bir SDK’nin Android ile uyumlu olduğu iddia ediliyorsa, Amazon veya Huawei gibi diğer Android tabanlı platformlarla da uyumlu olma olasılığı çok yüksektir. Bununla birlikte, gerçekçi olmak ve SDK’nin entegre ettiğiniz platformda doğru şekilde çalışıp çalışmayacağını anlamak önemlidir. Örneğin, GooglePlay ödemeleriyle çalışan bir SDK, Google Play olmadan bir Amazon cihazında çalışmaz, ancak Google Play ile Android cihazlarda reklam gösterebilen bir reklam SDK’si muhtemelen Huawei ile bir Android cihazında çalışır.
SDK entegrasyon sürecinin en yaygın sorunları nelerdir ve nasıl çözülür?
Herhangi bir entegrasyon ve destek sürecinde karşılaşabileceğiniz ilk sorun teknik sorunlardır. Bir SDK genellikle bir kara kutudur ve dâhilî çalışması biz yayıncılardan gizlenir. Bir projede genellikle çok sayıda SDK vardır ve bunlar birbirleriyle yakından bağlantılıdır. Geliştiricilerin bu tür bağlantıları güncel olarak desteklemesine yardımcı olan özel sistemler vardır (ki bu, geliştirme için olmazsa olmazdır).
Teknik kısmı atlarsak en sık karşılaştığımız sorun genel giderler olacaktır. Uygulamanızda bir SDK’ye sahip olmanın avantajını öngörmeniz ve bunu neden olduğu genel giderlerle karşılaştırmanız gerekir. Bu, belirli bir SDK ile çalışmaya karar verirken göz önünde bulundurmanız gerekenlerin yalnızca küçük bir kısmıdır, çünkü bir SDK genellikle gerekliliği yayıncı tarafından da değerlendirilmesi gereken harici bir hizmetin parçasıdır.
Diyelim ki bir oyunumuz var ve yeni sürüm yeni harika özellikler vaat ettiği için belirli bir SDK’yi güncellememiz gerektiğine karar veriyoruz. Bu SDK’nin güncellenmesi, projenin güncellenmiş bir hizmet kitaplığına sahip olmasını gerektiriyor ve bu da projedeki diğer on SDK tarafından kullanılıyor. Bağımlılıkları çözdükten sonra (basit bir ifadeyle, projenin tüm SDK’larına “uyan” SDK sürümlerini ve kitaplıkları seçerek), yalnızca bir SDK’yi güncelleyemeyeceğimizi anlıyoruz – on tanesini de güncellememiz gerekiyor. Bu da tamamen farklı bir değişiklik ve test hacmidir.
Bir örnek daha, yeni bir reklamcılık SDK’si eklemektir. Testler herhangi bir sorun göstermez ve sürüm üretime gönderilir. Tüm kullanıcılar için yayınlandığında, bu SDK’nin belirli koşullarda (örneğin, belirli bir cihaz modeli, bir işletim sistemi sürümü ve hatta GEO) uygulama çökmelerine neden olduğu ortaya çıktı. Ya yayınlanan sürümü geri almaya ya da sorunlu kullanıcılar için bu SDK’yi seçerek devre dışı bırakmaya karar vermeliyiz. SDK geliştiricisini de bu sorunlar hakkında bilgilendirmeliyiz.
Belirli proje gereksinimleri için bir SDK’yı nasıl uyarladığınıza dair bir örnek verebilir misiniz?
Hazır SDK’ler genellikle derlenmiş durumda gelir, bu da değişiklikleri imkânsız, çok karmaşık ve üretim ve geliştirme açısından makul olmayan bir şekilde pahalı hâle getirir ve hatta SDK’nin sahibi olan şirketin politikası tarafından doğrudan yasaklanır. Çoğu durumda, bir SDK’de değişiklik yapmanın tek yolu, bu SDK’nin tedarikçisiyle iletişim kurmaktır. Ancak, deneyimimizde bir SDK’nin Android/iOS platformlarını desteklediği ancak oyunumuzda kullanılan Unity’yi desteklemediği durumlar oldu. Unity ve Android geliştiricilerinden oluşan küçük bir ekip toplamamız ve Unity için bir Android SDK kullanmamıza izin verecek kendi paketimizi oluşturmamız gerekiyordu. SDK’yi bu şekilde değiştirmedik, ancak gerekli motor için bir “adaptör” yaptık. Kolay bir iş değildi, ama kesinlikle işe yaradı.
Entegrasyondan sonra bir SDK’nın performansını ve etkinliğini nasıl değerlendiriyorsunuz?
Genellikle SDK entegrasyonunu gerçekleştirdiğimiz hedefe ulaşılıp ulaşılmadığını düşünürüz. Örneğin, bir zamanlar geleneksel olarak bir SDK aracılığıyla yapılan markalı reklamcılığı projemize entegre etmiştik. Entegre ettikten, test ettikten ve yayınladıktan sonra, bu tür reklamlardan elde edilen gelirin çok düşük olduğunu ve kilitlenme oranı ve performans göstergelerinin önemli ölçüde kötüleştiğini gördük. Bu SDK’yi oluşturan şirket aracılığıyla bu sorunu çözmek imkânsızdı. Bu nedenle markalı reklamların sağlayıcısını değiştirdik. Sonuç olarak kilitlenme oranı ve performans göstergeleri entegrasyon öncesi seviyeye geldi (yani SDK entegrasyonundan sonra oyunda herhangi bir teknik sorun gözlemlemedik) ve markalı reklamlar sayesinde reklamlardan elde edilen gelir önemli ölçüde arttı.
Gelecek vadeden geliştiriciler için SDK başlangıç kiti
Olması gereken SDK’lerden bahsetmişken, her şeyden önce, bir geliştirici olarak oyun içi satın alımlarla çalışmanıza olanak tanıyan Unity In-App gibi uygulama içi SDK’leri göz önünde bulundurmalısınız. Ardından, analitikle ilgilenmeniz gerekir ve Firebase SDK bunun için gayet uygun olacaktır. Uygulamanız için trafik satın almayı planlıyorsanız Appsflyer/Adjust SDK’ye (trafik ilişkilendirme hizmetleri) de ihtiyacınız olacaktır. Bir de tabii ki, reklamlardan kâr elde etmek istiyorsanız, uyumlulaştırmaya ve Google Ads, Ironsource, MAX veya Facebook gibi reklam SDK’lerine ihtiyacınız olacak. Farklı SDK’lerle boğulmamanızı, küçükten başlamanızı ve uygulamanızın çalışması için gereken minimum miktarı elde etmenizi önerebilirim.