Guideline 4.8 Login Services: perlukah Sign in with Apple?
Oleh Mehdi Azizi
Diterbitkan pada , 9 min
Guideline 4.8: jika app anda ada log masuk Google atau Facebook, tambah pilihan yang melindungi e-mel, seperti Apple. Pengecualian, kod Expo, padam akaun.
Guideline 4.8 terpakai sebaik sahaja app anda menggunakan Google, Facebook atau log masuk pihak ketiga lain untuk mencipta akaun utama. Ia mewajibkan satu lagi pilihan log masuk yang setara, yang mengehadkan data kepada nama dan e-mel, membenarkan pengguna menyembunyikan e-mel dan tidak menjejak pengguna untuk iklan tanpa persetujuannya. Sejak Januari 2024, pilihan ini tidak semestinya "Sign in with Apple", tetapi itulah yang Apple sendiri sebut dalam mesej penolakannya.
Dalam app saya, Solys dan Nolera menawarkan Apple, Google dan e-mel. Panduan ini bermula daripada teks semasa Apple, kemudian menunjukkan cara saya menambah log masuk Apple dalam app Expo yang disambung ke Supabase, dan apa kesannya pada pemadaman akaun. Untuk gambaran keseluruhan sebab penolakan, baca kenapa Apple menolak app.
Apa kata guideline 4.8 Login Services?
4.8 terletak dalam bahagian 4, "Design", dalam App Review Guidelines. Ia menyasarkan app yang menggunakan "a third-party or social login service" untuk mencipta atau mengesahkan akaun utama: Facebook Login, Google Sign-In, Log in with X, LinkedIn, Amazon atau WeChat. App ini juga mesti menawarkan, "as an equivalent option", satu lagi perkhidmatan log masuk yang memenuhi tiga syarat.
| Syarat Apple | Ringkasnya |
|---|---|
| Data terhad | Nama dan e-mel, itu sahaja |
| E-mel peribadi boleh | Pengguna boleh menyembunyikannya |
| Tiada iklan tanpa izin | Tiada penjejakan iklan tanpa persetujuan |
Teks itu juga mentakrifkan akaun utama: akaun yang dicipta oleh pengguna dalam app anda untuk mengenal pasti diri, log masuk dan mengakses fungsi anda. Berdasarkan takrif ini, butang Google yang hanya digunakan untuk mengimport fail tidak mencipta akaun utama. 4.8 menyasarkan skrin tempat orang masuk ke app anda.
Apa yang berubah pada Januari 2024
Sebelum 2024, peraturan ini mewajibkan "Sign in with Apple" bagi app yang menggunakan log masuk pihak ketiga untuk akaun utama. Pada 25 Januari 2024, Apple melonggarkan perkara ini: anda boleh menawarkan log masuk Apple, atau perkhidmatan setara yang melindungi privasi. Banyak halaman masih menyatakan sebaliknya. Dokumentasi Expo masih menulis bahawa app dengan log masuk pihak ketiga mesti menawarkan Apple.
Dalam praktiknya, mesej penolakan 4.8 yang disiarkan di forum pembangun Apple berakhir begini: "Note that Sign in with Apple meets the requirements specified in guideline 4.8". Apple tidak menamakan perkhidmatan lain yang mematuhi. Supaya tidak main teka-teki dengan reviewer, saya tambah log masuk Apple.
Lima pengecualian dalam teks
Apple menyenaraikan lima keadaan di mana tiada log masuk lain diperlukan:
- App anda hanya menggunakan sistem akaun anda sendiri, contohnya e-mel dengan kata laluan atau kod yang dihantar melalui e-mel.
- App anda ialah kedai app alternatif, atau diedarkan oleh salah satunya, dengan log masuk khusus kedai itu.
- App anda bersifat pendidikan, syarikat atau profesional, dan memerlukan akaun sekolah atau syarikat sedia ada.
- App anda menggunakan sistem identiti elektronik yang disokong oleh kerajaan atau industri.
- App anda ialah klien bagi perkhidmatan pihak ketiga tertentu: pengguna log masuk ke e-mel atau rangkaian sosialnya untuk mengakses kandungannya sendiri.
Sebelum pengecualian ini pun, tanya diri anda: adakah app anda memerlukan akaun? Jika tidak, guideline 5.1.1(v) meminta app boleh digunakan tanpa log masuk, seperti yang saya terangkan dalam panduan guideline 5.1.1.
| Skrin log masuk anda | 4.8 terpakai? |
|---|---|
| Tiada akaun | Tidak |
| E-mel atau kod sahaja | Tidak |
| Google sahaja | Ya |
| Google dan e-mel | Ya, pada dasarnya |
| Google dan Apple | Ya, dan mematuhi |
| Akaun sekolah sedia ada | Tidak |
| Google untuk import | Tidak, tiada akaun |
Tambah "Sign in with Apple" dalam app Expo
1. Pasang modul dan isytiharkan keupayaan
npx expo install expo-apple-authentication
Dokumentasi Expo kemudian meminta anda mengaktifkan keupayaan dalam konfigurasi app:
{
"expo": {
"ios": {
"usesAppleSignIn": true,
"infoPlist": { "CFBundleAllowMixedLocalizations": true }
}
}
}
Baris kedua memaparkan butang dalam bahasa iPhone. Dengan EAS Build, keupayaan ini diaktifkan pada pengecam app anda semasa build. Ini tetapan native: ia dihantar dengan build baharu, tidak sekali-kali dengan kemas kini jarak jauh.
Satu perangkap yang saya jumpa semasa menyemak semula kod permulaan kit saya: keupayaan ini memerlukan tandatangan, walaupun untuk menjalankan app pada simulator. Pada Mac tanpa sijil "Apple Development", kompilasi tempatan gagal dengan "No code signing certificates are available to use". Pembetulannya: aktifkan log masuk Apple hanya apabila pelayan pengesahan sudah dikonfigurasi.
2. Paparkan butang rasmi, senampak butang Google
Garis panduan reka bentuk Apple jelas: butang Apple tidak boleh lebih kecil daripada butang log masuk lain, dan pengguna tidak perlu menatal skrin untuk melihatnya. Komponen Expo melukis butang rasmi, dengan tajuk yang dibenarkan 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: tiada log masuk Apple, tiada butang.
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 menyatakan bahawa butang tidak muncul tanpa lebar dan tinggi. Warna dan bucu bulat diatur melalui buttonStyle dan cornerRadius, bukan melalui style.
3. Buka sesi dalam 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 tiada");
const { error } = await supabase.auth.signInWithIdToken({
provider: "apple",
token: credential.identityToken,
});
if (error) throw error;
// Nama pertama hanya diterima pada kebenaran pertama: simpan terus.
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;
}
}
Empat perincian penting, diambil daripada dokumentasi Supabase, dokumentasi Expo dan garis panduan reka bentuk Apple:
- Dalam Supabase, isytiharkan pengecam bundle anda dalam Client IDs penyedia Apple. App yang native sepenuhnya tidak memerlukan kunci rahsia untuk log masuk. Tambah
host.exp.Exponentjika anda menguji dalam Expo Go. - Nama pertama dan e-mel hanya diterima sekali. Apple tidak menghantarnya lagi pada log masuk seterusnya: simpan sebaik sahaja diterima kali pertama.
- E-mel mungkin alamat relay. Apple mengesyorkan supaya tidak meminta alamat peribadi selepas itu.
- Pembatalan bukan ralat. Dalam Nolera, menutup helaian Apple tidak mencetuskan sebarang mesej merah: itu tindakan sengaja.
Satu kes sebenar dalam Solys, pada Ogos 2026: butang Apple dan Google ada dalam app, tetapi kedua-dua penyedia tidak diaktifkan dalam Supabase. Kodnya betul, pembetulan dibuat di pihak pelayan, tanpa build baharu. Butang Apple yang gagal di depan reviewer bermakna penolakan 2.1 menggantikan penolakan 4.8. Perinciannya dalam panduan guideline 2.1.
4. Uji pada iPhone sebenar
Expo memberi amaran bahawa simulator hanya membenarkan ujian terhad, dan pengecam yang diterima dalam Expo Go berbeza daripada app yang diterbitkan. Uji log masuk, log keluar dan log masuk semula pada iPhone sebenar, dengan build TestFlight.
Log masuk Apple dan pemadaman akaun
Guideline 5.1.1(v) meminta akaun yang dicipta dalam app boleh dipadam dari dalam app. Dengan log masuk Apple, halaman Apple tentang pemadaman akaun menambah satu langkah: gunakan REST API Sign in with Apple untuk membatalkan token pengguna.
Pembatalan ini memerlukan dua perkara: token pengguna, yang diperoleh dengan mengesahkan kod kebenaran, dan rahsia yang ditandatangani dengan kunci peribadi Sign in with Apple anda. Walaupun log masuk native tidak memerlukan kunci rahsia, pembatalan memerlukannya, dan ia kekal di pelayan anda. Sebabnya dalam kunci API rahsia dalam app Expo.
Dalam Nolera, semasa memadam akaun, app meminta log masuk Apple sekali lagi untuk mendapatkan kod kebenaran yang baharu. App menghantarnya ke fungsi pelayan, yang menukarnya dengan Apple lalu membatalkan token. Jika pengguna membatalkan, mesej yang jelas memberitahunya dan tiada apa yang dipadam. Selebihnya proses, termasuk data, langganan dan ujian, ada dalam pemadaman akaun iOS.
Apa nak jawab kepada Apple selepas penolakan 4.8
Mesej Apple menawarkan dua jalan keluar. Sama ada anda tambah pilihan yang setara. Atau app anda sudah ada satu: anda jawab dalam App Store Connect, nyatakan yang mana dan kenapa ia memenuhi tiga syarat itu. Apple juga mencadangkan anda mengemas kini tangkapan skrin yang menunjukkan skrin log masuk. Prosedur untuk membalas App Review sama seperti untuk peraturan lain.
Ini templat dalam bahasa Inggeris, sesuaikan (gantikan nombor build):
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,
Senarai semak 4.8 sebelum menghantar
- Anda tahu sama ada app anda memerlukan akaun. Jika tidak, ia boleh digunakan tanpa log masuk.
- Jika Google, Facebook atau X mencipta akaun, log masuk Apple ada pada skrin yang sama.
- Butang Apple ialah butang rasmi, sama besar dengan yang lain, nampak tanpa menatal.
- Penyedia Apple diaktifkan di pihak pelayan, dengan pengecam bundle anda.
- Pembatalan membawa kembali ke skrin log masuk, tanpa mesej ralat.
- Nama pertama dan e-mel disimpan sejak log masuk pertama.
- Pemadaman akaun membatalkan token Apple, dari pelayan anda.
- Semuanya diuji pada iPhone sebenar, dengan akaun Apple yang belum pernah log masuk ke app.
- Tangkapan skrin anda menunjukkan skrin log masuk seperti dalam build yang dihantar.
Betulkan penolakan anda sebelum menghantar semula app
Jika app anda baru ditolak atas 4.8, Apple Review Kit mengumpulkan apa yang saya semak sebelum setiap penghantaran, dengan dua skill yang menyemak projek anda dalam Claude Code dan menyediakan jawapan anda jika Apple menolak. Untuk pandangan manusia, tempah satu jam dengan saya: kita baca mesej itu bersama dan lihat skrin log masuk anda. Langkah lengkap selepas penolakan ada di halaman app ditolak oleh Apple.
Jika anda sedang menyediakan pelancaran pertama, buat diagnostik percuma anda: ia memberitahu langkah mana perlu diuruskan dahulu dan menghantar senarai semak anti-penolakan Apple saya.
Tiada siapa boleh menjamin Apple akan menerima app anda. Menambah log masuk Apple di tempat yang betul sekurang-kurangnya membuang sebab ini daripada senarai.
Soalan lazim
Adakah log masuk dengan Apple wajib di iOS?
Tidak, bukan dalam semua keadaan. Ia hanya diperlukan jika app anda menawarkan log masuk pihak ketiga, seperti Google atau Facebook, untuk mencipta akaun utama. Sejak Januari 2024, perkhidmatan setara lain boleh menggantikannya, tetapi Apple hanya menyebut log masuk Apple sebagai mematuhi.
Apa maksud "Guideline 4.8 - Design - Login Services"?
Itu tajuk penolakan dalam mesej Apple. Maksudnya app anda menawarkan log masuk pihak ketiga tanpa pilihan setara yang mengehadkan data kepada nama dan e-mel, membenarkan e-mel disembunyikan dan tidak digunakan untuk iklan tanpa persetujuan.
Adakah pendaftaran e-mel saya cukup di sebelah Google?
Tiada jaminan. Teks itu meminta perkhidmatan yang membenarkan e-mel kekal peribadi, sedangkan borang biasa memintanya. Apple belum menyiarkan pendirian tentang kes ini, dan mesej penolakannya hanya menyebut log masuk Apple. Saya tidak akan mengambil risiko itu.
Perlukah log masuk Apple ditawarkan di Android?
Tidak. 4.8 ialah peraturan App Store, dan modul Expo hanya berfungsi di iOS. Di Android, isAvailableAsync() memulangkan false: butang Apple tidak dipaparkan, dan Google boleh kekal bersendirian.
Perlukah build baharu selepas penolakan 4.8?
Ya, dalam kebanyakan kes. Log masuk Apple memerlukan keupayaan native, yang diaktifkan semasa build. Kemas kini jarak jauh tidak boleh menambahnya. Satu-satunya pengecualian: app anda sudah ada pilihan yang mematuhi, dan anda cuma perlu menerangkannya kepada Apple dalam jawapan anda.