Zaloguj się przez Apple — jak zaimplementować to w swojej aplikacji
Opublikowany: 2020-03-06Uwaga redaktora: Ten artykuł został pierwotnie opublikowany na Miquido.com 14 stycznia 2020 r.
Zaloguj się za pomocą Apple — nowa funkcja zaprezentowana przez firmę Apple na WWDC w zeszłym roku, jest teraz dostępna w systemie iOS 13. Ta funkcja umożliwia prostą i bezpieczną rejestrację konta oraz logowanie w aplikacji lub witrynie internetowej. Zamiast wypełniać formularze rejestracyjne lub logować się przez media społecznościowe, możesz teraz utworzyć konto i zalogować się za pomocą swojego Apple ID i zweryfikować za pomocą Face ID, Touch ID lub kodu dostępu.
👨💻 Krótki opis Zaloguj się za pomocą Apple:
- Szybka i łatwa konfiguracja konta i logowanie
- Zweryfikowane adresy e-mail
- Wbudowane zabezpieczenia
- Zwalczania nadużyć Finansowych
- Wieloplatformowy 📱💻 ⌚️
- iOS 13+
W tym artykule skupię się na podstawowej implementacji Sign In With Apple na urządzeniach iOS bez integracji z wersją webową lub integracji z back-endem.
Zacznijmy od przyjrzenia się, jak to działa
Po naciśnięciu „Zaloguj się przez Apple” lub „Kontynuuj przez Apple” (zależy, który przycisk został wybrany do zaimplementowania w aplikacji) pojawia się okno informacyjne z możliwościami tego rozwiązania (drugi zrzut ekranu). Następnie po kliknięciu „Dalej” otrzymujemy informację o tym, jakie dane zostaną udostępnione właścicielowi aplikacji.
Tutaj mamy dwie opcje rejestracji konta w aplikacji za pomocą Sign In With Apple:
- Udostępniając nasz adres e-mail — Twój prawdziwy adres e-mail zostanie udostępniony aplikacji lub stronie internetowej.
- Dzięki ukryciu naszego adresu e-mail — Twój prawdziwy e-mail nie zostanie udostępniony aplikacji ani stronie internetowej. Apple wygeneruje dla Ciebie unikalny adres e-mail z domeną @privaterelay.appleid.com. Nie martw się, wszystkie e-maile od właściciela aplikacji i tak będą przekazywane do Twojej skrzynki odbiorczej, ponieważ e-maile będą przekazywane na nasz prawdziwy adres e-mail. Właściciel aplikacji będzie znał tylko adres e-mail wygenerowany w domenie Apple.
Po wybraniu jednej z opcji i wciśnięciu „Dalej” weryfikujemy nasz Apple ID tak jak w przypadku odblokowania telefonu, czyli poprzez Face ID, Touch ID lub wpisując hasło. W tym momencie należy założyć konto w aplikacji/stronie z unikalnym identyfikatorem dla użytkownika.
Jeśli wcześniej korzystałeś w aplikacji z opcji „Zaloguj się przez Apple”, możesz wyświetlić podgląd ustawień tego sposobu logowania i przestać korzystać z tej funkcji. Aby to zrobić, przejdź do Ustawienia > Apple ID > Hasło i zabezpieczenia > Aplikacje korzystające z Twojego Apple ID > Wybierz aplikację .
Po zapoznaniu się z teoretyczną częścią „Zaloguj się przez Apple” możemy przystąpić do wdrożenia 👨 💻
Przede wszystkim musisz otworzyć „Podpisywanie i możliwości” w swoim projekcie, a następnie nacisnąć + i dodać funkcję „Zaloguj się przez Apple”.
Apple na konferencji WWDC podzieliło proces wdrażania tej funkcji na cztery etapy. Wszystkie etapy zostały opisane poniżej.
- Przycisk 📱
Na początek musimy dodać przycisk do naszego ekranu. Musi to być przycisk ASAuthorizationAppleIDButton z platformy AuthenticationService . Jest dostępny w dwóch kolorach (białym i czarnym) z różnymi tytułami. Do przycisku musimy dodać akcję, która ma być wywołana po jej dotknięciu. Akcję autoryzacji opisuję w punkcie drugim.
importuj usługi uwierzytelniania let button = ASAuthorizationAppleIDButton(typ: .signIn, styl: .white) button.addTarget(self, action: #selector(appleIdButtonClicked), for: .touchUpInside) stackView.addArrangedSubview(przycisk)
- Autoryzacja ⚙️
Tutaj tworzymy wniosek o autoryzację, w którym jako requestScopes dostarczamy tylko informacje niezbędne do utworzenia konta w naszej aplikacji lub witrynie internetowej. W moim przypadku jest to imię i nazwisko oraz adres e-mail. Następnie ustaw delegata i wyślij żądanie.
@objc func appleIdButtonClicked() { let request = ASAuthorizationAppleIDProvider().createRequest() request.requestedScopes = [.fullName, .email] let controller = ASAuthorizationController(authorizationRequests: [żądanie]) controller.delegate = self controller.presentationContextProvider = self controller.performRequests() }
- Weryfikacja ✅
Po szybkim sprawdzeniu za pomocą Face ID, Touch ID lub hasła zostanie zwrócony wynik autoryzacji. Gdy autoryzacja zakończy się powodzeniem, metoda didCompleteWithAuthorization zwróci obiekt typu AppleIdCredential . Następnie należy sprawdzić, czy są to dane uwierzytelniające typu ASAuthorizationAppleIdCredential — jeśli tak, w tym obiekcie znajdziemy wszystkie niezbędne dane do założenia konta w naszych systemach, takie jak unikalny identyfikator użytkownika, imię i nazwisko oraz adres e-mail (który użytkownik prosił o to wcześniej). W tym momencie możemy przystąpić do tworzenia konta w naszym systemie, podając tylko niezbędne informacje. Jeśli wystąpi błąd, zostanie on zwrócony w metodzie didCompleteWithError , gdzie możemy obsłużyć ten błąd.

funcauthorizationController(controller: ASAuthorizationController, didCompleteWithAuthorizationauthorization: ASAuthorization) {
if let appleIDCredential =author.credential as? ASAutoryzacjaAppleIDCredential { // Utwórz konto w swoim systemie. } else if let passwordCredential =author.credential as? Poświadczenia hasła { // Zaloguj się przy użyciu istniejącego poświadczenia pęku kluczy iCloud. } } func authenticationController(controller: ASAuthorizationController, didCompleteWithError error: Error) { drukuj (błąd) }
- Obsługa zmian 🔀
Musisz być przygotowany na to, że użytkownik np. przestał korzystać z logowania do aplikacji za pomocą Apple ID. Powinno to być prawidłowo obsługiwane po ponownym uruchomieniu aplikacji przez użytkownika.
Korzystając z identyfikatora użytkownika, który otrzymaliśmy podczas rejestracji konta, możemy uzyskać aktualny stan poświadczeń Apple ID, bardzo szybko wywołując metodę getCredentialState . Ta metoda może zwrócić trzy stany:
- autoryzowany — autoryzowany użytkownik, który może nadal korzystać z aplikacji.
- unieważnione — wyloguj użytkownika i opcjonalnie możesz przekierować go do ekranu logowania, aby zalogować się ponownie.
- notFound — oznacza, że użytkownik nie korzystał wcześniej z funkcji „Zaloguj się przez Apple”. W tym momencie pokaż również użytkownikowi ekran logowania.
Wywołanie metody getCredentialState powinno znajdować się w AppDelegate w metodzie didFinishLaunchingWithOptions .
Dodatkowo Apple udostępnia Powiadomienie, w którym informuje, kiedy dane uwierzytelniające zostały unieważnione, a następnie musimy obsłużyć go w wyżej opisany sposób dla tego statusu.
appleIDProvider.getCredentialState (forUserID: userId) { credentialState, błąd w przełącz stan poświadczeń { sprawa .uprawniona: // Poświadczenie Apple ID jest prawidłowe. sprawa .unieważniona: // Poświadczenie Apple ID zostało unieważnione, wyloguj się. sprawa .notZnaleziona: // Nie znaleziono poświadczeń, więc pokaż interfejs logowania. domyślna: zepsuć } } // Zarejestruj się, aby otrzymać powiadomienie o unieważnieniu NotificationCenter.default.addObserver (dla nazwy: NSNotification.Name.ASAuthorizationAppleIDProviderCredentialRevoked, obiekt: zero, kolejka: zero) { _ w // Wyloguj użytkownika, opcjonalnie poprowadź go do ponownego zalogowania } Po zaimplementowaniu wszystkich czterech etapów w mojej przykładowej aplikacji wszystko działa 🎉🎉🎉 i wygląda to tak:
Czy muszę dodać „Zaloguj się przez Apple” do mojej aplikacji? 🤔.
Jeśli Twoja aplikacja korzysta z metody logowania innej firmy, takiej jak Facebook, Google lub LinkedIn, musisz również dodać opcję Zaloguj się przez Apple zgodnie z nowymi wytycznymi. Jeśli go nie dodasz, Twoje zgłoszenie może zostać odrzucone i może nie zostać rozpatrzone przez Apple. Poniżej link do nowości oraz cytat z wytycznych.
Nowe wytyczne dotyczące logowania się przez Apple — 12 września 2019 r
Od dzisiaj nowe aplikacje przesyłane do App Store muszą być zgodne z tymi wytycznymi. Istniejące aplikacje i aktualizacje aplikacji muszą zostać dodane do kwietnia 2020 r.
Poniżej aplikacje, które oferują logowanie za pomocą nowej funkcji Apple’a, oczywiście z każdym dniem jest ich coraz więcej 😎
👨 Możesz sprawdzić cały projekt na GitHub tutaj .
📚 Źródła:
- https://developer.apple.com/videos/play/wwdc2019/706/
- https://developer.apple.com/videos/play/wwdc2019/516
- https://developer.apple.com/sign-in-with-apple/get-started/
- https://developer.apple.com/news/?id=09122019b
- https://developer.apple.com/app-store/review/guidelines/#sign-in-with-apple