Zaloguj się przez Apple — jak zaimplementować to w swojej aplikacji

Opublikowany: 2020-03-06

Uwaga 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.

  1. 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)
  1. 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()

}
  1. 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)

}
  1. 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