Zaloguj się przez Apple — zaimplementuj to w swojej aplikacji!

Opublikowany: 2020-01-14

Zaloguj się za pomocą Apple — nowa funkcja zaprezentowana przez Apple na WWDC w zeszłym roku, jest teraz dostępna w systemie iOS 13. Ta funkcja oferuje 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.

Jak działa funkcja „Zaloguj się przez Apple”?

Zaloguj się za pomocą Apple - interfejs

Po naciśnięciu „Zaloguj się z Apple” lub „Kontynuuj z 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:

  1. Udostępniając nasz adres e-mail — Twój prawdziwy adres e-mail zostanie udostępniony aplikacji lub stronie internetowej.
  2. 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ć w aplikacji/serwisie konto 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ę.


Jak wdrożyć „Zaloguj się przez Apple”?

Po zapoznaniu się z teoretyczną częścią „Zaloguj się przez Apple” możemy przystąpić do wdrożenia

Zaloguj się przez Apple – pierwszy krok 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”.

Zaloguj się za pomocą Apple — proces wdrażania krok po kroku

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 . Dostępny jest 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)

2. Autoryzacja ️

Tutaj tworzymy requestedScopes 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 pełne 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()
}

3. Weryfikacja

Po szybkim sprawdzeniu za pomocą Face ID, Touch ID lub kodu dostępu 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 naszym systemie, 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)
}

4. 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:

  • authorized — autoryzowany użytkownik, który może nadal korzystać z aplikacji.
  • revoked — 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:
        przerwanie
    }
}

// Zarejestruj się, aby otrzymać powiadomienie o unieważnieniu
NotificationCenter.default.addObserver (dla nazwy: NSNotification.Name.ASAuthorizationAppleIDProviderCredentialRevoked, 
                                       obiekt: zero,
                                       kolejka: zero) { _ in
    // 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:

Zaimplementowane logowanie za pomocą Apple

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ę za pomocą 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 ich aktualizacje 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

Przykłady aplikacji korzystających z funkcji Zaloguj się przez Apple

Cały projekt możesz sprawdzić na moim GitHubie 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