İçeriğe geç
AppFoyer
Başla

Rehberler Yayından sonra

Gizlilik politikanızı derlemenizle senkron tutmak

Gizlilik politikası bir kez yazılır, bir pull request SDK eklediği gün eskir. Yalnızca derleme dosyalarını okuyan ücretsiz bir kontrolle bunu pull request'te görün.

Sayfalarınızın hangi SDK'lar, veri türleri ve izinlerden yola çıkılarak yazıldığını kaydedin, ardından her pull request'in derleme dosyalarını bu kayıtla karşılaştırın. Kayıtta olmayan bir bağımlılık ya da izin ortaya çıktığında, pull request bunu sürümden önce gösterir; gizlilik politikası ve mağaza formları hâlâ kolayca güncellenebilirken.

Bunun yerine birkaç dakikada halledin

AppFoyer, bu rehberin konusu olan sayfaları — gizlilik politikası, kullanım koşulları, destek, hesap silme ve app-ads.txt — kendi alt alan adlarında barındırır; size ait bir alan adı ya da sunucu gerekmez. Bir uygulama ücretsizdir ve bir mağazanın zorunlu tuttuğu hiçbir şey asla ödeme duvarının arkasında değildir.

30 Eylül 2026 tarihinde kontrol edildi. Mağaza politikaları bazen haber vermeden değişir. Aşağıdaki her şey resmî belgelere bağlantı verir ve yetkili kaynak bu sayfa değil, o sayfadır. İkisi çelişirse mağaza haklıdır. Bu rehber İngilizceden çevrilmiştir; mağaza belgelerinden yapılan alıntılar orijinal İngilizce hâliyle korunmuştur.

Gizlilik politikası yazmak tek seferlik bir iştir. Onu doğru tutmak öyle değildir: politika, yazdığınız andaki derlemeyi anlatır ve derleme değişmeye devam eder. Bir pull request çökme raporlama, bir abonelik kitaplığı ya da bir konum izni ekler, uygulama yayınlanır ve politika, Data safety formu ve App Privacy ayrıntıları hâlâ eski uygulamayı anlatır.

İki mağaza da bunu kendi sorunları değil, sizin sorununuz olarak görür. Google Play, Data safety yanıtlarınızın her zaman doğru ve eksiksiz kalması gerektiğini ve uygulamanızdaki üçüncü taraf kitaplıkların ve SDK’ların topladığı verileri sizin beyan etmeniz gerektiğini söyler. Apple da App Privacy ayrıntıları için aynısını söyler ve yanıtları bir güncelleme göndermeden App Store Connect’te istediğiniz zaman değiştirebileceğinizi ekler.

Kayma gerçekte nereden gelir

Neredeyse hiçbir zaman “daha fazla veri toplama” kararından gelmez. Sıradan mühendislik işinden gelir:

  • Yeni bir bağımlılık. Çökme raporlama, analiz, bir ödeme duvarı SDK’sı, bir harita kitaplığı.
  • Yeni bir izin. Bir özellik için konum, bir tarayıcı için kamera, reklamlar için izleme.
  • Bir flavor ya da target. Ücretsiz derleme, ücretli derlemede olmayan bir reklam SDK’sı kazanır.
  • Bir kaldırma. Bu da kaymadır; politika artık fazla beyan eder, bu daha güvenli bir hatadır ama yine de hatadır.

Bunların her biri bir derleme dosyasına düşer: build.gradle, AndroidManifest.xml, Podfile, Package.swift, Info.plist, pubspec.yaml, package.json. Kontrol edilebilir olmasını sağlayan budur.

Yaklaşım: bir kayıt ve her pull request’te bir kontrol

  1. Sayfalarınız yazıldığında, neyden yola çıkılarak yazıldıklarını kaydedin: o andaki derlemede bulunan SDK’lar, veri türleri ve izinler.
  2. Her pull request’te derleme dosyalarını yeniden okuyun ve karşılaştırın.
  3. Bir şey farklıysa, neyin, nerede (dosya ve satır) farklı olduğunu ve hangi sayfayı ya da formu etkileyebileceğini söyleyin.

İki özellik önemlidir. Kontrol yalnızca derleme dosyalarını okumalıdır (asla kaynak kodu, asla gizli bilgileri değil), böylece herhangi bir depoda çalıştırılması güvenli olur. Ve “ihlal” değil, “güncelliğini yitirmiş olabilir” demelidir: bir derleme dosyasındaki bir kitaplık, uygulamanın onu kullandığının kanıtı değildir ve uygulamanızın topladıklarını değiştirip değiştirmediğini yalnızca siz bilirsiniz.

AppFoyer ile kurulum

Kontrol her planda ücretsizdir. Yalnızca derleme dosyalarını okur, anahtar ya da gizli bilgi gerektirmez, hiçbir yere hiçbir şey göndermez ve asla bir sayfayı değiştirmez.

Claude Code eklentisiyle

  1. “make this app store-ready” (bu uygulamayı mağazaya hazır hale getir) deyin. Eklenti, sayfaların taslağını hazırlamanın yanı sıra deponuzun köküne appfoyer.json dosyasını yazar: sayfaların neyden yola çıkılarak yazıldığının kaydı.
  2. “add the AppFoyer drift check” (AppFoyer kayma kontrolünü ekle) deyin. Size bir GitHub iş akışı gösterir ve evet dediğinizde .github/workflows/appfoyer.yml dosyasını yazar.
  3. İki dosyayı da commit edin. Eklenti sizin yerinize asla commit ya da push yapmaz.

Eklenti olmadan

İş akışını kendiniz ekleyin:

name: AppFoyer drift check
on: pull_request
permissions:
  contents: read
jobs:
  check:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
      - uses: appfoyer/check-action@v1

Bir pull request açın. Depoda henüz appfoyer.json yoksa, iş özeti derlemenizden yazacağı dosyayı gösterir. Onu yayınlanmış sayfalarınızla karşılaştırın ve commit edin.

Ya da yerel olarak oluşturun; aynı tarayıcı npm’de yayınlanmıştır:

npx @appfoyer/check init

Başka bir CI sisteminde

npm paketi, Node 20 veya üzerinin çalıştığı her yerde çalışır. Örneğin GitLab için:

appfoyer-drift-check:
  image: node:22
  script:
    - npx -y @appfoyer/check --fail-on-drift

--format markdown, GitHub iş özetinin gösterdiği raporun aynısını verir; --format json betikler içindir.

Bir bulgu nasıl görünür

Sayfaları RevenueCat olmadan yazılmış bir uygulamaya RevenueCat ekleyen bir pull request:

"Trail Notes": 2 changes
  + In-app purchases / subscriptions (data collected)  app/build.gradle.kts:28
      → Privacy policy may not declare "In-app purchases / subscriptions"
      → Google Play Data safety and Apple App Privacy answers may be outdated
      → Terms may not cover purchases and subscriptions
  + RevenueCat (SDK)  app/build.gradle.kts:28
      → Store forms: RevenueCat is not in the app's SDK list
      → Privacy policy may not name this SDK

Varsayılan olarak iş raporlar ve başarılı olur. Kayıt güncellenene kadar başarısız olmasını sağlamak için with: altına fail-on-drift: "true" ekleyin.

Bir değişiklik bildirdiğinde

  1. Değişikliğin etkilediklerini güncelleyin. Aynı dalda yeniden “make this app store-ready” deyin: eklenti derlemeyi yeniden okur, uygulamanın olgularını günceller, değişikliğin etkilediği sayfaların taslağını yeniden hazırlar ve appfoyer.json dosyasını yeniden yazar. Ya da sayfaları ve Store forms sekmesini kontrol panelinde kendiniz düzenleyin.
  2. Kaydı yenileyin. Eklenti bunu zaten yaptı. Kontrol panelinde düzenleme yaptıktan sonra npx @appfoyer/check update komutunu çalıştırın ya da yenilenmiş dosyayı iş özetinden, bulguların altında durduğu yerden kopyalayın.
  3. Aynı pull request’te commit edin. Bir sonraki çalıştırma hiçbir değişiklik göstermez ve geçmiş, bağımlılığın ve beyan değişikliğinin birlikte geldiğini gösterir.
  4. Konsollardaki mağaza formlarını güncelleyin. Ne kontrol ne de AppFoyer, Play Console’a ya da App Store Connect’e erişebilir. Taslak yanıtlar kontrol panelinin Store forms sekmesindedir.
  5. Güncellenmiş taslakları inceleme ekranından yayınlayın.

Tek depoda birden fazla uygulama

appfoyer.json her mağaza sayfası için bir girdi tutar. Kendi application id’si olan bir product flavor kendi girdisini alır; böylece yalnızca ücretsiz flavor’ın kullandığı bir reklam SDK’sı, ücretli olanın değil, ücretsiz flavor’ın sayfalarıyla karşılaştırılır. Eklenti, mağazaya hazır hale getirdiği her flavor için bir girdi yazar. Elle yazarken bir girdi bir sourceSets listesi alır (["free"] ya da çok boyutlu bir derleme için kombinasyondaki her flavor ile kombinasyonun kendisi) ve uygulama bir monorepo içindeyse bir root klasörü alır.

Neleri göremez

  • Bağımlılıkların bağımlılıkları; Podfile.lock dosyasının bunları listelediği iOS hariç. Başka bir kitaplığın getirdiği bir SDK derleme dosyanızda görünmez, dolayısıyla burada da görünmez.
  • Yalnızca kodla yapılan yapılandırma. Expo’daki app.config.js / app.config.ts JavaScript’tir ve okunmaz; app.json ve package.json okunur.
  • Beyan ettiğiniz şeyi kullanıp kullanmadığınız. Mevcut ama kullanılmayan bir bağımlılık yine de bildirilir.
  • Arka ucunuz. Bir derleme dosyasındaki hiçbir şey sunucunuzun neyi ne kadar süre sakladığını söylemez.

Bu, bir değişikliği beyan etmenin en ucuz olduğu anda yapılan bir hatırlatmadır; bir uyumluluk kararı değildir ve hukuki tavsiye değildir.

Yetkili kaynaklar