Guideline 4.8 Login Services: Apple ile giriş şart mı?
Yazan: Mehdi Azizi
tarihinde yayınlandı, 9 dk.
Guideline 4.8: Uygulaman Google veya Facebook ile giriş sunuyorsa, Apple gibi e-postayı koruyan bir giriş seçeneği ekle. İstisnalar, Expo kodu, hesap silme.
Uygulaman ana hesabı oluşturmak için Google, Facebook ya da başka bir üçüncü taraf girişi kullanıyorsa guideline 4.8 devreye girer. Bu durumda ona denk başka bir giriş seçeneği sunman gerekir. Bu seçenek verileri ad ve e-postayla sınırlamalı, kullanıcının e-postasını gizlemesine izin vermeli ve onayı olmadan kullanıcıyı reklam için takip etmemeli. Ocak 2024'ten beri bu seçeneğin illa "Sign in with Apple" olması gerekmiyor, ama Apple'ın ret mesajlarında adını verdiği tek seçenek bu.
Benim uygulamalarımdan Solys ve Nolera; Apple, Google ve e-posta ile giriş sunuyor. Bu rehber Apple'ın güncel metninden yola çıkıyor, sonra Supabase'e bağlı bir Expo uygulamasına Apple ile girişi nasıl eklediğimi ve bunun hesap silme tarafında neyi değiştirdiğini gösteriyor. Ret sebeplerinin genel resmi için Apple neden uygulamanı reddeder yazısını oku.
Guideline 4.8 Login Services ne diyor?
4.8, App Review Guidelines içinde 4. bölümde, "Design" başlığı altında yer alıyor. Ana hesabı oluşturmak ya da doğrulamak için "a third-party or social login service" kullanan uygulamaları hedefliyor: Facebook Login, Google Sign-In, Log in with X, LinkedIn, Amazon veya WeChat. Bu uygulamalar ayrıca "as an equivalent option" olarak üç koşulu sağlayan başka bir giriş hizmeti de sunmak zorunda.
| Apple'ın koşulu | Açıkçası |
|---|---|
| Sınırlı veri | Ad ve e-posta, fazlası değil |
| Gizli e-posta mümkün | Kullanıcı e-postasını gizleyebilir |
| Onaysız reklam yok | Onay olmadan hiçbir reklam takibi yok |
Metin ana hesabı da tanımlıyor: kişinin uygulamanda kendini tanıtmak, giriş yapmak ve özelliklere erişmek için oluşturduğu hesap. Bu tanıma göre sadece dosya içe aktarmaya yarayan bir Google butonu ana hesap oluşturmaz. 4.8, uygulamana giriş yapılan ekranı hedefliyor.
Ocak 2024'te ne değişti?
2024'ten önce kural, ana hesap için üçüncü taraf girişi kullanan uygulamalara "Sign in with Apple" zorunluluğu getiriyordu. 25 Ocak 2024 tarihinde Apple bu noktayı esnetti: Apple ile girişi ya da gizliliği koruyan denk bir hizmeti sunabilirsin. Pek çok sayfa hâlâ aksini söylüyor. Expo dokümantasyonu hâlâ üçüncü taraf girişi olan bir uygulamanın Apple'ı sunması gerektiğini yazıyor.
Pratikte, Apple geliştirici forumlarında paylaşılan 4.8 ret mesajı şöyle bitiyor: "Note that Sign in with Apple meets the requirements specified in guideline 4.8". Apple uyumlu başka hiçbir hizmetin adını vermiyor. Reviewer'la tahmin oyunu oynamamak için ben Apple ile girişi ekliyorum.
Metnin öngördüğü beş istisna
Apple, başka bir giriş seçeneğinin istenmediği beş durumu sıralıyor:
- Uygulaman yalnızca kendi hesap sistemini kullanıyor, örneğin şifreli e-posta girişi ya da e-postayla gönderilen bir kod.
- Uygulaman alternatif bir uygulama mağazası ya da böyle bir mağaza üzerinden dağıtılıyor ve o mağazaya özel bir giriş kullanıyor.
- Uygulaman eğitim, kurumsal ya da iş amaçlı ve mevcut bir okul veya şirket hesabı istiyor.
- Uygulaman devlet ya da sektör destekli bir elektronik kimlik sistemi kullanıyor.
- Uygulaman belirli bir üçüncü taraf hizmetin istemcisi: kişi kendi içeriğine erişmek için mesajlaşma uygulamasına ya da sosyal ağına giriş yapıyor.
Bu istisnalardan bile önce kendine şunu sor: uygulamanın gerçekten bir hesaba ihtiyacı var mı? Yoksa, guideline 5.1.1 rehberinde anlattığım gibi guideline 5.1.1(v) uygulamanın girişsiz kullanılabilmesini istiyor.
| Giriş ekranın | 4.8 geçerli mi? |
|---|---|
| Hesap yok | Hayır |
| Sadece e-posta veya kod | Hayır |
| Sadece Google | Evet |
| Google ve e-posta | Muhtemelen evet |
| Google ve Apple | Evet, ve uyumlu |
| Mevcut okul hesabı | Hayır |
| İçe aktarma için Google | Hayır, hesap yok |
Expo uygulamasına "Sign in with Apple" eklemek
1. Modülü kur ve yeteneği tanımla
npx expo install expo-apple-authentication
Expo dokümantasyonu ardından uygulama yapılandırmasında yeteneği (capability) etkinleştirmeni istiyor:
{
"expo": {
"ios": {
"usesAppleSignIn": true,
"infoPlist": { "CFBundleAllowMixedLocalizations": true }
}
}
}
İkinci satır butonu iPhone'un dilinde gösteriyor. EAS Build ile yetenek, build sırasında uygulama kimliğinde etkinleştiriliyor. Bu native bir ayar: yeni bir build ile gider, uzaktan güncellemeyle asla gitmez.
Kitlerimin başlangıç kodunu yeniden okurken bulduğum bir tuzak var: bu yetenek, uygulamayı simülatörde çalıştırmak için bile imza gerektiriyor. "Apple Development" sertifikası olmayan bir Mac'te yerel derleme "No code signing certificates are available to use" hatasıyla başarısız oluyordu. Çözüm: Apple ile girişi yalnızca kimlik doğrulama sunucusu yapılandırıldığında etkinleştirmek.
2. Resmi butonu Google kadar görünür şekilde göster
Apple'ın tasarım kuralları net: Apple butonu diğer giriş butonlarından küçük olmamalı ve görmek için ekranı kaydırmak gerekmemeli. Expo bileşeni, Apple'ın izin verdiği bir başlıkla resmi butonu çiziyor.
import * as AppleAuthentication from "expo-apple-authentication";
import { useEffect, useState } from "react";
export function BoutonApple({ onPress }: { onPress: () => void }) {
const [disponible, setDisponible] = useState(false);
useEffect(() => {
AppleAuthentication.isAvailableAsync().then(setDisponible);
}, []);
// Android ve web: Apple ile giriş yok, buton yok.
if (!disponible) return null;
return (
<AppleAuthentication.AppleAuthenticationButton
buttonType={AppleAuthentication.AppleAuthenticationButtonType.CONTINUE}
buttonStyle={AppleAuthentication.AppleAuthenticationButtonStyle.BLACK}
cornerRadius={12}
style={{ width: "100%", height: 50 }}
onPress={onPress}
/>
);
}
Expo, genişlik ve yükseklik verilmezse butonun görünmediğini belirtiyor. Renk ve köşe yuvarlaklığı style ile değil, buttonStyle ve cornerRadius ile ayarlanıyor.
3. Supabase'te oturumu aç
import * as AppleAuthentication from "expo-apple-authentication";
import { supabase } from "./supabase";
export async function connexionApple(): Promise<"ok" | "annule"> {
try {
const credential = await AppleAuthentication.signInAsync({
requestedScopes: [
AppleAuthentication.AppleAuthenticationScope.FULL_NAME,
AppleAuthentication.AppleAuthenticationScope.EMAIL,
],
});
if (!credential.identityToken) throw new Error("Apple token'ı yok");
const { error } = await supabase.auth.signInWithIdToken({
provider: "apple",
token: credential.identityToken,
});
if (error) throw error;
// Ad yalnızca ilk yetkilendirmede gelir: hemen kaydediyoruz.
const prenom = credential.fullName?.givenName;
if (prenom) await supabase.auth.updateUser({ data: { prenom } });
return "ok";
} catch (e) {
if ((e as { code?: string }).code === "ERR_REQUEST_CANCELED")
return "annule";
throw e;
}
}
Supabase dokümantasyonundan, Expo dokümantasyonundan ve Apple'ın tasarım kurallarından çıkan dört önemli ayrıntı:
- Supabase'te bundle kimliğini Apple sağlayıcısının Client IDs alanına ekle. Tamamen native bir uygulamanın giriş için gizli anahtara ihtiyacı yok. Expo Go'da test ediyorsan
host.exp.Exponentekle. - Ad ve e-posta yalnızca bir kez gelir. Apple sonraki girişlerde bunları bir daha göndermez: ilk yanıtta kaydet.
- E-posta bir aktarma (relay) adresi olabilir. Apple sonradan kişisel adres istememeni öneriyor.
- İptal bir hata değildir. Nolera'da Apple sayfasını kapatmak hiçbir kırmızı mesaj tetiklemiyor: bu bilinçli bir hareket.
Solys'te Ağustos 2026'da yaşadığım bir durum: Apple ve Google butonları uygulamadaydı ama iki sağlayıcı da Supabase'te etkin değildi. Kod doğruydu, düzeltme sunucu tarafında, yeni build olmadan yapıldı. Reviewer'ın önünde çöken bir Apple butonu, 4.8 reddi yerine 2.1 reddi demek. Ayrıntılar guideline 2.1 rehberinde.
4. Gerçek bir iPhone'da test et
Expo, simülatörün yalnızca sınırlı test sağladığı ve Expo Go'da alınan kimlik bilgilerinin yayınlanan uygulamadakinden farklı olduğu konusunda uyarıyor. Girişi, çıkışı ve yeniden girişi gerçek bir iPhone'da, bir TestFlight build'iyle test et.
Apple ile giriş ve hesap silme
Guideline 5.1.1(v), uygulamada oluşturulan bir hesabın uygulamadan silinebilmesini istiyor. Apple ile girişte, Apple'ın hesap silme sayfası bir adım daha ekliyor: kişinin token'larını iptal etmek için Sign in with Apple REST API'sini kullanmak.
Bu iptal iki şey gerektiriyor: bir yetkilendirme kodunu doğrulayarak elde edilen kişiye ait bir token ve Sign in with Apple özel anahtarınla imzalanmış bir secret. Native giriş gizli anahtarsız çalışsa bile iptal bir anahtar gerektirir ve bu anahtar sunucunda kalır. Nedeni Expo uygulamasında gizli API anahtarı yazısında.
Nolera'da hesabı silerken uygulama, taze bir yetkilendirme kodu almak için yeniden Apple ile giriş istiyor. Kodu bir sunucu fonksiyonuna gönderiyor; fonksiyon kodu Apple'da takas edip token'ı iptal ediyor. Kişi iptal ederse açık bir mesaj bunu söylüyor ve hiçbir şey silinmiyor. Veriler, abonelik ve testler dahil sürecin geri kalanı iOS hesap silme yazısında.
4.8 reddinden sonra Apple'a ne cevap vermeli?
Apple'ın mesajı iki çıkış yolu sunuyor. Ya denk bir seçenek eklersin. Ya da uygulamanda zaten böyle bir seçenek vardır: App Store Connect'te cevap verir, hangisi olduğunu ve neden üç koşulu sağladığını söylersin. Apple ayrıca giriş ekranını gösteren ekran görüntülerini güncellemeni öneriyor. App Review'a cevap verme prosedürü diğer kurallardakiyle aynı.
İşte uyarlayabileceğin İngilizce bir şablon (build numarasını değiştir):
Hello,
Thank you for your review.
Build X adds Sign in with Apple as an equivalent login option.
It appears on the same screen as Google Sign-In, with the same
size, and is visible without scrolling.
How to verify: launch the app, open the sign-in screen and
tap "Continue with Apple".
We also updated the screenshots that show the sign-in screen.
Best regards,
Göndermeden önce 4.8 kontrol listesi
- Uygulamanın bir hesaba ihtiyacı olup olmadığını biliyorsun. İhtiyacı yoksa girişsiz kullanılıyor.
- Hesabı Google, Facebook veya X oluşturuyorsa, Apple ile giriş aynı ekranda.
- Apple butonu resmi buton, diğerleri kadar büyük ve kaydırmadan görünüyor.
- Apple sağlayıcısı sunucu tarafında, bundle kimliğinle etkin.
- İptal, hata mesajı olmadan giriş ekranına geri döndürüyor.
- Ad ve e-posta ilk girişte kaydediliyor.
- Hesap silme, Apple token'ını sunucundan iptal ediyor.
- Her şey gerçek bir iPhone'da, uygulamaya hiç giriş yapmamış bir Apple hesabıyla test edildi.
- Ekran görüntülerin giriş ekranını gönderilen build'deki haliyle gösteriyor.
Uygulamayı tekrar göndermeden önce reddi düzelt
Uygulaman az önce 4.8 nedeniyle reddedildiyse, Apple Review Kit her gönderimden önce kontrol ettiğim her şeyi bir araya getiriyor; Claude Code'da projeni okuyan ve Apple reddederse cevabını hazırlayan iki skill de içinde. İnsan gözü istiyorsan benimle bir saatlik görüşme ayarla: mesajı birlikte okuyup giriş ekranına bakalım. Retten sonraki tüm süreç Apple tarafından reddedilen uygulama sayfasında.
İlk yayınına hazırlanıyorsan ücretsiz teşhisini yap: önce hangi adıma girişmen gerektiğini söyler ve sana Apple reddine karşı kontrol listemi gönderir.
Kimse Apple'ın uygulamanı kabul edeceğini garanti edemez. Apple ile girişi doğru yere eklemek en azından bu sebebi listeden çıkarır.
Sık sorulan sorular
Apple ile giriş iOS'ta zorunlu mu?
Hayır, her durumda değil. Yalnızca uygulaman ana hesabı oluşturmak için Google veya Facebook gibi bir üçüncü taraf girişi sunuyorsa isteniyor. Ocak 2024'ten beri denk başka bir hizmet onun yerini alabilir, ama Apple uyumlu olarak yalnızca Apple ile girişi anıyor.
"Guideline 4.8 - Design - Login Services" ne demek?
Apple'ın mesajındaki ret başlığı bu. Uygulamanın üçüncü taraf girişi sunduğu, ama verileri ad ve e-postayla sınırlayan, e-postayı gizlemeye izin veren ve onay olmadan reklam için kullanılmayan denk bir seçenek sunmadığı anlamına geliyor.
Google'ın yanında e-posta ile kayıt yeterli mi?
Garantisi yok. Metin e-postanı gizli tutmana izin veren bir hizmet istiyor, oysa klasik bir form e-postayı soruyor. Apple bu konuda bir tutum yayınlamadı ve ret mesajı yalnızca Apple ile girişi anıyor. Ben bu riski almazdım.
Android'de Apple ile giriş sunmak gerekir mi?
Hayır. 4.8 bir App Store kuralı ve Expo modülü yalnızca iOS'ta çalışıyor. Android'de isAvailableAsync() false döndürüyor: Apple butonu görünmüyor ve Google tek başına kalabilir.
4.8 reddinden sonra yeni build gerekir mi?
Evet, çoğu durumda. Apple ile giriş, build sırasında etkinleştirilen native bir yetenek gerektiriyor. Uzaktan güncelleme bunu ekleyemez. Tek istisna: uygulamanda zaten uyumlu bir seçenek vardı ve bunu Apple'a cevabında açıklaman yeterli.