Guideline 4.8 Login Services: wajibkah Sign in with Apple?
Oleh Mehdi Azizi
Terbit , 9 mnt
Guideline 4.8: kalau app kamu pakai login Google atau Facebook, tambahkan login yang melindungi e-mail, seperti Apple. Pengecualian, kode Expo, dan hapus akun.
Guideline 4.8 berlaku begitu app kamu memakai Google, Facebook, atau login pihak ketiga lain untuk membuat akun utama. Dalam kasus itu, kamu wajib menyediakan opsi login lain yang setara: datanya terbatas pada nama dan e-mail, pengguna bisa menyembunyikan e-mail, dan pengguna tidak dilacak untuk iklan tanpa persetujuannya. Sejak Januari 2024, opsi ini tidak harus "Sign in with Apple", tapi justru itulah yang disebut Apple sendiri di pesan penolakannya.
Di app saya, Solys dan Nolera menyediakan login Apple, Google, dan e-mail. Panduan ini berangkat dari teks Apple yang berlaku sekarang, lalu menunjukkan cara saya menambahkan login Apple di app Expo yang terhubung ke Supabase, dan apa dampaknya untuk penghapusan akun. Untuk gambaran umum alasan penolakan, baca saja kenapa Apple menolak app.
Apa isi guideline 4.8 Login Services?
Guideline 4.8 ada di bagian 4, "Design", dari App Review Guidelines. Aturan ini menyasar app yang memakai "a third-party or social login service" untuk membuat atau mengautentikasi akun utama: Facebook Login, Google Sign-In, Log in with X, LinkedIn, Amazon, atau WeChat. App seperti ini juga harus menyediakan, "as an equivalent option", layanan login lain yang memenuhi tiga syarat.
| Syarat Apple | Artinya |
|---|---|
| Data terbatas | Nama dan e-mail, tidak lebih |
| E-mail bisa dirahasiakan | Pengguna bisa menyembunyikannya |
| Tanpa iklan tanpa persetujuan | Tidak ada pelacakan iklan tanpa izin |
Teksnya juga mendefinisikan akun utama: akun yang dibuat seseorang di app kamu untuk mengidentifikasi diri, login, dan mengakses fiturmu. Berdasarkan definisi ini, tombol Google yang hanya dipakai untuk mengimpor file tidak membuat akun utama. Guideline 4.8 menyasar layar tempat orang masuk ke app kamu.
Apa yang berubah pada Januari 2024
Sebelum 2024, aturan ini mewajibkan "Sign in with Apple" untuk app yang memakai login pihak ketiga untuk akun utama. Pada 25 Januari 2024, Apple melonggarkannya: kamu boleh menyediakan login Apple, atau layanan setara yang melindungi privasi. Banyak halaman masih bilang sebaliknya. Dokumentasi Expo sampai sekarang masih menulis bahwa app dengan login pihak ketiga wajib menyediakan Apple.
Dalam praktiknya, pesan penolakan 4.8 yang dipublikasikan di forum developer Apple diakhiri begini: "Note that Sign in with Apple meets the requirements specified in guideline 4.8". Apple tidak menyebut layanan lain yang memenuhi syarat. Supaya tidak main tebak-tebakan dengan reviewer, saya tambahkan login Apple.
Lima pengecualian dalam teksnya
Apple mencantumkan lima kasus yang tidak mewajibkan login lain:
- App kamu hanya memakai sistem akunmu sendiri, misalnya e-mail dengan password atau kode yang dikirim lewat e-mail.
- App kamu adalah toko app alternatif, atau didistribusikan oleh toko seperti itu, dengan login khusus toko tersebut.
- App kamu untuk pendidikan, perusahaan, atau bisnis, dan mewajibkan akun sekolah atau kantor yang sudah ada.
- App kamu memakai sistem identitas elektronik yang didukung pemerintah atau industri.
- App kamu adalah klien untuk layanan pihak ketiga tertentu: orang login ke e-mail atau media sosialnya untuk mengakses kontennya sendiri.
Sebelum melihat pengecualian ini, tanyakan dulu: apakah app kamu memang butuh akun? Kalau tidak, guideline 5.1.1(v) meminta app tetap bisa dipakai tanpa login, seperti yang saya jelaskan di panduan guideline 5.1.1.
| Layar login kamu | Guideline 4.8 berlaku? |
|---|---|
| Tanpa akun | Tidak |
| Hanya e-mail atau kode | Tidak |
| Hanya Google | Ya |
| Google dan e-mail | Ya, kemungkinan besar |
| Google dan Apple | Ya, dan sudah sesuai |
| Akun sekolah yang sudah ada | Tidak |
| Google untuk impor | Tidak, bukan akun |
Menambahkan "Sign in with Apple" di app Expo
1. Pasang modul dan deklarasikan capability
npx expo install expo-apple-authentication
Dokumentasi Expo lalu meminta kamu mengaktifkan capability di konfigurasi app:
{
"expo": {
"ios": {
"usesAppleSignIn": true,
"infoPlist": { "CFBundleAllowMixedLocalizations": true }
}
}
}
Baris kedua membuat tombol tampil dalam bahasa iPhone. Dengan EAS Build, capability ini diaktifkan di identifier app kamu saat build. Ini pengaturan native: ikut lewat build baru, tidak pernah lewat update jarak jauh.
Satu jebakan yang saya temukan saat membaca ulang kode awal kit saya: capability ini mewajibkan signing, bahkan untuk menjalankan app di simulator. Di Mac tanpa sertifikat "Apple Development", kompilasi lokal gagal dengan "No code signing certificates are available to use". Solusinya: aktifkan login Apple hanya kalau server autentikasi sudah dikonfigurasi.
2. Tampilkan tombol resmi, sama terlihatnya dengan Google
Aturan desain Apple jelas: tombol Apple tidak boleh lebih kecil dari tombol login lain, dan tidak boleh perlu scroll untuk melihatnya. Komponen Expo menggambar tombol resmi, dengan judul yang diizinkan Apple.
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 dan web: tidak ada login Apple, tidak ada tombol.
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 menegaskan bahwa tombol tidak akan muncul tanpa lebar dan tinggi. Warna dan sudut membulat diatur lewat buttonStyle dan cornerRadius, bukan lewat style.
3. Membuka sesi di Supabase
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("Token Apple tidak ada");
const { error } = await supabase.auth.signInWithIdToken({
provider: "apple",
token: credential.identityToken,
});
if (error) throw error;
// Nama depan hanya dikirim saat otorisasi pertama: langsung simpan.
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;
}
}
Ada empat detail penting, diambil dari dokumentasi Supabase, dokumentasi Expo, dan aturan desain Apple:
- Di Supabase, daftarkan bundle identifier kamu di Client IDs provider Apple. App yang murni native tidak butuh secret key untuk login. Tambahkan
host.exp.Exponentkalau kamu menguji di Expo Go. - Nama depan dan e-mail hanya dikirim sekali. Apple tidak mengirimnya lagi di login berikutnya: simpan begitu respons pertama datang.
- E-mailnya bisa berupa alamat relay. Apple menyarankan untuk tidak meminta alamat pribadi lagi setelahnya.
- Pembatalan bukan error. Di Nolera, menutup sheet Apple tidak memunculkan pesan merah apa pun: itu tindakan yang disengaja.
Kasus nyata di Solys, Agustus 2026: tombol Apple dan Google sudah ada di app, tapi tidak satu pun provider-nya diaktifkan di Supabase. Kodenya benar, perbaikannya dilakukan di sisi server, tanpa build baru. Tombol Apple yang gagal di depan reviewer berarti penolakan 2.1, bukan penolakan 4.8. Detailnya ada di panduan guideline 2.1.
4. Uji di iPhone sungguhan
Expo memperingatkan bahwa simulator hanya bisa menguji secara terbatas, dan kredensial yang diterima di Expo Go berbeda dengan app yang dipublikasikan. Uji login, logout, lalu login ulang di iPhone sungguhan, dengan build TestFlight.
Login Apple dan penghapusan akun
Guideline 5.1.1(v) meminta akun yang dibuat di app bisa dihapus dari dalam app. Dengan login Apple, halaman Apple tentang penghapusan akun menambahkan satu langkah: memakai REST API Sign in with Apple untuk mencabut token milik orang tersebut.
Pencabutan ini butuh dua hal: token milik orang itu, yang didapat dengan memvalidasi authorization code, dan secret yang ditandatangani dengan private key Sign in with Apple kamu. Meski login native tidak butuh secret key, pencabutan token butuh, dan key itu harus tetap di server kamu. Alasannya ada di secret API key di app Expo.
Di Nolera, saat menghapus akun, app meminta login Apple lagi untuk mendapatkan authorization code yang baru. App mengirimnya ke fungsi server, yang menukarnya ke Apple lalu mencabut tokennya. Kalau orangnya membatalkan, pesan yang jelas memberi tahu hal itu dan tidak ada yang dihapus. Sisa alurnya, termasuk data, langganan, dan pengujian, ada di penghapusan akun iOS.
Cara membalas Apple setelah penolakan 4.8
Pesan Apple menawarkan dua jalan keluar. Pertama, kamu menambahkan opsi yang setara. Kedua, app kamu sudah punya opsi itu: kamu membalas di App Store Connect, sebutkan opsinya dan kenapa opsi itu memenuhi tiga syarat. Apple juga menyarankan memperbarui screenshot yang menampilkan layar login. Prosedur untuk membalas App Review sama dengan aturan lain.
Ini template dalam bahasa Inggris, silakan disesuaikan (ganti nomor build-nya):
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,
Checklist 4.8 sebelum submit
- Kamu tahu apakah app kamu butuh akun. Kalau tidak, app bisa dipakai tanpa login.
- Kalau Google, Facebook, atau X membuat akun, login Apple ada di layar yang sama.
- Tombol Apple adalah tombol resmi, sama besar dengan yang lain, terlihat tanpa scroll.
- Provider Apple sudah aktif di sisi server, dengan bundle identifier kamu.
- Pembatalan mengembalikan ke layar login, tanpa pesan error.
- Nama depan dan e-mail disimpan sejak login pertama.
- Penghapusan akun mencabut token Apple, dari server kamu.
- Semua sudah diuji di iPhone sungguhan, dengan akun Apple yang belum pernah login ke app.
- Screenshot kamu menampilkan layar login persis seperti di build yang dikirim.
Perbaiki penolakanmu sebelum mengirim ulang app
Kalau app kamu baru saja ditolak karena 4.8, Apple Review Kit berisi semua yang saya cek sebelum setiap submit, dengan dua skill yang membaca ulang proyekmu di Claude Code dan menyiapkan balasan kalau Apple menolak. Kalau butuh pendapat manusia, booking satu jam dengan saya: kita baca pesannya bersama dan cek layar login kamu. Langkah lengkap setelah penolakan ada di halaman app ditolak Apple.
Kalau kamu sedang menyiapkan rilis pertama, ikuti diagnostik gratis: diagnostik ini memberi tahu tahap mana yang perlu digarap duluan dan mengirimkan checklist anti-penolakan Apple saya.
Tidak ada yang bisa menjamin Apple akan menerima app kamu. Menambahkan login Apple di tempat yang tepat setidaknya mencoret satu alasan ini dari daftar.
Pertanyaan umum
Apakah login dengan Apple wajib di iOS?
Tidak selalu. Login Apple hanya diwajibkan kalau app kamu menyediakan login pihak ketiga, seperti Google atau Facebook, untuk membuat akun utama. Sejak Januari 2024, layanan lain yang setara bisa menggantikannya, tapi Apple hanya menyebut login Apple sebagai yang memenuhi syarat.
Apa arti "Guideline 4.8 - Design - Login Services"?
Itu judul penolakan di pesan Apple. Artinya app kamu menyediakan login pihak ketiga tanpa opsi setara yang membatasi data pada nama dan e-mail, memungkinkan e-mail disembunyikan, dan tidak dipakai untuk iklan tanpa persetujuan.
Apakah pendaftaran lewat e-mail cukup di samping Google?
Tidak ada jaminan. Teksnya meminta layanan yang memungkinkan e-mail tetap privat, sedangkan formulir biasa justru meminta e-mail. Apple belum mempublikasikan sikapnya soal kasus ini, dan pesan penolakannya hanya menyebut login Apple. Saya tidak akan ambil risiko itu.
Apakah login Apple perlu disediakan di Android?
Tidak. Guideline 4.8 adalah aturan App Store, dan modul Expo hanya berfungsi di iOS. Di Android, isAvailableAsync() mengembalikan false: tombol Apple tidak tampil, dan Google boleh sendirian.
Apakah perlu build baru setelah penolakan 4.8?
Ya, di sebagian besar kasus. Login Apple butuh capability native yang diaktifkan saat build. Update jarak jauh tidak bisa menambahkannya. Satu-satunya pengecualian: app kamu sudah punya opsi yang sesuai, dan cukup kamu jelaskan ke Apple di balasanmu.