Uwierzytelnianie Glassware GDK

Jeśli Twoje oprogramowanie GDK Glassware wymaga uwierzytelniania użytkowników w usłudze internetowej, udostępnia interfejs API, który pozwala użytkownikowi wpisać swoje dane logowania podczas instalowania oprogramowania.

Korzystanie z tego interfejsu API zapewnia użytkownikom korzystającym z Google Glass spójny komfort korzystania z usługi i unikniesz problemów związanych z wdrażaniem niestandardowych schematów uwierzytelniania.

Tworzenie konta usługi interfejsu API Google

Po prawidłowym skonfigurowaniu uwierzytelniania interfejs aplikacji internetowej używa interfejsu Mirror API, aby przekazywać informacje o kontach użytkowników do Glass po uwierzytelnieniu się w usłudze.

Aby uzyskać dostęp do tego interfejsu API, utwórz projekt interfejsu API Google, a potem utwórz identyfikator klienta dla „konta usługi” (a nie „aplikacji internetowej”). Korzystając z konta usługi, użytkownicy nie muszą oddzielnie przyznawać aplikacji uprawnień do przekazywania swoich danych uwierzytelniających do Google Glass. Nie będą też widzieli ponownie strony uprawnień OAuth ani Twojej strony uwierzytelniania.

Aby utworzyć to konto:

  1. Otwórz Google Developers Console.
  2. Kliknij przycisk Utwórz projekt i wpisz wymagane informacje.
  3. Po utworzeniu projektu zanotuj numer projektu, ponieważ będzie Ci potrzebny później.
  4. W sekcji APIs & amp; auth (Interfejsy API i uwierzytelnianie) kliknij Interfejsy API i włącz Google Mirror API dla nowego projektu.
  5. W sekcji APIs & amp; auth (Interfejsy API i uwierzytelnianie) kliknij Credentials (Dane logowania), a następnie kliknij Create New Client ID (Utwórz nowy identyfikator klienta). Zaznacz pole Konto usługi, aby utworzyć nowy identyfikator klienta OAuth 2.0 dla projektu.
  6. W wyskakującym okienku pojawi się informacja, że klucz prywatny jest pobierany na Twój komputer, oraz hasło do niego. Gdy zamkniesz to okno, utracisz możliwość pobrania tego klucza prywatnego i ponownego wyświetlenia hasła. Jeśli je utracisz, musisz utworzyć nowe.
  7. Zanotuj adres e-mail konta usługi, który będzie potrzebny później do wywołania interfejsu API.

Udostępnianie metadanych Glassware

Gdy przygotujesz swoje urządzenie Glass, musisz podać te informacje. Dzięki temu będziemy mogli prawidłowo skonfigurować szkło w Twojej aplikacji.

  • Twój URL uwierzytelniania, na który użytkownicy są przekierowywani, gdy włączyli Twoje okulary w MyGlass.
  • Typ konta (ciąg, którego będziesz używać podczas wywoływania interfejsów API AccountManager na Androida na urządzeniu Glass).
  • Nazwa pakietu aplikacji z AndroidManifest.xml
  • Numeryczny identyfikator projektu interfejsu API Google projektu utworzonego powyżej
  • Plik APK do przesłania w usłudze MyGlass. Aby przetestować aplikację, wystarczy, że raz prześlesz ten plik APK, aby włączyć wstępne pobieranie z MyGlass. Po wykonaniu tego działania możesz ponownie iterować i debugować lokalnie, nadpisując plik APK na swoim urządzeniu. Ten plik APK musi spełniać te kryteria:
    • Musi być wyrównany do pliku ZIP.
    • Po tym terminie nie możesz wprowadzać zmian w nazwie pakietu ani kluczu podpisywania prywatnego (menedżer pakietów na Androida nie pozwala na uaktualnianie, jeśli któraś z tych zmian).
    • musi być mniejszy niż 50 megabajtów.
    • Należy go skompilować przy użyciu najnowszej wersji GDK.

Wdrażanie procesu uwierzytelniania

Ten diagram przedstawia podstawowy przepływ uwierzytelniania w przypadku oprogramowania Glassware GDK:

Aby wdrożyć proces uwierzytelniania:

  1. Gdy użytkownik włączy Glass w MyGlass, zostanie przekierowany do adresu URL uwierzytelniania. Żądania te zawierają parametr zapytania o nazwie userToken, którego musisz użyć później.

  2. Użytkownik wpisuje swoje dane logowania na stronie uwierzytelniania.

  3. Serwer weryfikuje dane logowania użytkownika. Jeśli dane logowania są prawidłowe, wywołaj metodę Mirror API na metodę mirror.accounts.insert. Ta metoda wymaga określenia zakresu https://www.googleapis.com/auth/glass.thirdpartyauth podczas tworzenia obiektu usługi Dublowanie. Przykłady wywołania tego interfejsu API przy użyciu nieprzetworzonego HTTP lub Java są widoczne w przykładach tworzenia konta.

    Podane poniżej parametry i treść żądania odpowiadają tym samym informacjom, które przekazujesz do aplikacji AccountManager na potrzeby tworzenia konta bezpośrednio na urządzeniu.

    Nazwa usługi Wartość Opis
    features[] lista ciągów tekstowych Lista funkcji (patrz AccountManager.hasFeatures).
    password tekst Hasło do konta (patrz AccountManager.getPassword). Zalecamy, aby nie przechowywać w tym polu prawdziwego hasła użytkownika, ale przechowywać zamiast niego długotrwałe dane prywatne, takie jak token odświeżania.
    userData[] lista obiektów Co najmniej 1 parę danych użytkownika powiązanych z kontem (patrz AccountManager.getUserData).
    userData[].key tekst Klucz powiązany z konkretną parą klucz-wartość danych użytkownika.
    userData[].value tekst Wartość powiązana z konkretną parą klucz-wartość danych użytkownika.
    authTokens[] lista obiektów Co najmniej 1 token uwierzytelniania powiązany z kontem (patrz AccountManager.getAuthToken).
    authTokens[].type tekst Typ tokena uwierzytelniania.
    authTokens[].authToken tekst Token uwierzytelniania.
  4. Po otrzymaniu żądania mirror.account.insert interfejs Mirror API przekazuje konto na urządzenia Glass użytkowników, gdzie możesz uzyskać do nich dostęp za pomocą klasy AccountManager.

Postępuj zgodnie z tymi wskazówkami, aby wdrożyć łatwy w obsłudze proces uwierzytelniania:

  • Zoptymalizuj swoje działanie pod kątem urządzeń mobilnych.
  • Jeśli przepływ ma zakres, a użytkownik go anuluje, przygotuj dobrze zaprojektowany komunikat o błędzie.
  • Sprawdź, czy żądane zakresy są rzeczywiście używane w Glassware.
  • Jeśli można połączyć konto użytkownika, upewnij się, że jest ono połączone.
  • W miarę możliwości kopie zapasowe danych użytkowników powinny być tworzone w chmurze.

Aby zachować spójność podczas uwierzytelniania Glassware, użyj jednego z tych procesów uwierzytelniania:

Dublowany lub hybrydowy bez konta

  1. Po włączeniu w MyGlass adres URL uwierzytelniania otwiera się w wyskakującym okienku.
  2. Spowoduje to bezpośrednie wysłanie użytkownika do zakresów do zaakceptowania.
  3. Gdy użytkownik zaakceptuje lub anuluje zakresy, zamknij wyskakujące okienko.

Dubluj z kontem

  1. Po włączeniu w MyGlass adres URL uwierzytelniania otwiera się w wyskakującym okienku.
    • Jeśli użytkownik jest już zalogowany w usłudze, wyślij go bezpośrednio do zakresów.
    • Jeśli użytkownik nie jest zalogowany, pokaż pola logowania, zezwól mu na zalogowanie się w Twojej usłudze i wysłanie go do zakresów.
    • Jeśli użytkownik nie ma konta, podaj link do jego utworzenia. Użytkownicy muszą mieć możliwość utworzenia konta w ramach procesu instalacji.
  2. Użytkownik akceptuje zakresy.
    • Jeśli urządzenie Glassware ma konfigurowalne ustawienia, skieruj użytkownika na stronę ustawień z wybranymi ustawieniami domyślnymi.
    • Jeśli urządzenie Glassware nie ma konfigurowalnych ustawień, skieruj użytkownika na stronę potwierdzenia. Jeśli nie potrzebujesz dodatkowej konfiguracji, zamknij wyskakujące okienko.

Hybrydowa z kontem

  1. Po włączeniu w MyGlass adres URL uwierzytelniania otwiera się w wyskakującym okienku.
    • Jeśli użytkownik jest już zalogowany w usłudze, wyślij go bezpośrednio do zakresów.
    • Jeśli użytkownik nie jest zalogowany, pokaż pola logowania, pozwól mu się zalogować i wyślij do zakresów.
    • Jeśli użytkownik nie ma konta, podaj link do jego utworzenia.
  2. Użytkownik akceptuje zakresy.
  3. Aby wstawić konto GDK, wyślij żądanie do interfejsu Mirror API.
    • Wyślij użytkownika na stronę ustawień z wybranymi rozsądnymi ustawieniami domyślnymi.
    • Wyślij użytkownikowi stronę potwierdzenia. Jeśli nie potrzebujesz dodatkowej konfiguracji, zamknij wyskakujące okienko.

Dublowany lub hybrydowy z kontem i zakresami niestandardowymi

  1. Po włączeniu w MyGlass adres URL uwierzytelniania otwiera się w wyskakującym okienku.
    • Jeśli użytkownik jest już zalogowany w usłudze, należy go skierować do zakresów wewnętrznych.
    • Jeśli użytkownik nie jest zalogowany, pokaż pola logowania, pozwól mu się zalogować i wyślij do zakresów wewnętrznych.
    • Jeśli użytkownik nie ma konta, podaj link do jego utworzenia.
  2. Gdy użytkownik zaakceptuje zakresy niestandardowe, odesłaj go do zakresów Google.
  3. Aby wstawić konto GDK, wyślij żądanie do interfejsu Mirror API.
    • Wyślij użytkownika na stronę ustawień z wybranymi rozsądnymi ustawieniami domyślnymi.
    • Wyślij użytkownikowi stronę potwierdzenia. Jeśli nie potrzebujesz dodatkowej konfiguracji, zamknij wyskakujące okienko.

Wersja lustrzana lub hybrydowa w aplikacji na Androida lub iPhone'a

  1. Po włączeniu w MyGlass adres URL uwierzytelniania otwiera się w wyskakującym okienku.
  2. Spowoduje to bezpośrednie wysłanie użytkownika do zakresów do zaakceptowania.
  3. Gdy użytkownik zaakceptuje zakresy:
    • Jeśli użytkownik ma aplikację towarzyszącą i jest uwierzytelniony, zamknij wyskakujące okienko.
    • Jeśli nie, skieruj użytkownika na reklamę pełnoekranową, która zachęci go do pobrania aplikacji ze Sklepu Google Play lub iOS.
  4. Po zainstalowaniu aplikacji i zakończeniu uwierzytelniania zamknij wyskakujące okienko

GDK i brak konta

Aby włączyć ten proces, wystarczy włączyć Glass w usłudze MyGlass.

GDK na koncie

  1. Po włączeniu w MyGlass adres URL uwierzytelniania otwiera się w wyskakującym okienku.
    • Jeśli użytkownik jest już zalogowany w usłudze, skieruj go na ekran potwierdzenia.
    • Jeśli użytkownik nie jest zalogowany, wyświetl pola logowania, zezwól mu na zalogowanie się, a następnie wyślij go na ekran potwierdzenia.
    • Jeśli użytkownik nie ma konta, podaj link do jego utworzenia.
  2. Użytkownik akceptuje zakresy.
  3. Aby wstawić konto GDK, wyślij żądanie do interfejsu Mirror API.
  4. Pokaż ekran potwierdzenia i zamknij go po krótkim czasie.

Przykłady tworzenia kont

W miarę możliwości używaj bibliotek klienta interfejsu Mirror API. Ułatwia to połączenie z mirror.accounts.insert.

Przykład nieprzetworzonego HTTP

Poniżej widać tylko adres URL żądania i oczekiwaną treść JSON. Tworzenie nieprzetworzonych żądań HTTP w imieniu konta usługi jest o wiele bardziej skomplikowane (szczegóły znajdziesz w artykule Używanie protokołu OAuth 2.0 w aplikacjach serwer-serwer), dlatego w miarę możliwości zalecamy używanie jednej z naszych bibliotek klienta Google API.

Metoda żądania i adres URL:

POST https://www.googleapis.com/mirror/v1/accounts/{userToken}/com.example.myapp/username%40email.com

Treść żądania:

{
    "features": ["a", "b", "c"],
    "userData": [
        { "key": "realName", "value": "Rusty Shackleford" },
        { "key": "foo", "value": "bar" }
    ],
    "authTokens": [
        { "type": "your_token_type", "authToken": "zT419Ma3X2pBr0L..." }
    ]
}

Zastąp {userToken} w adresie URL żądania tokenem przekazanym do adresu URL uwierzytelniania w kroku 1 procesu implementacji uwierzytelniania.

Przykład Javy

Ten przykład pokazuje, jak używać biblioteki klienta w języku Java do wywoływania mirror.accounts.insert

import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson.JacksonFactory;
import com.google.api.services.mirror.Mirror;
import com.google.api.services.mirror.model.Account;
import com.google.api.services.mirror.model.AuthToken;
import com.google.common.collect.Lists;
...

/** Email of the Service Account */
private static final String SERVICE_ACCOUNT_EMAIL =
    "<some-id>@developer.gserviceaccount.com";

/** Path to the Service Account's Private Key file */
private static final String SERVICE_ACCOUNT_PKCS12_FILE_PATH =
    "/path/to/<public_key_fingerprint>-privatekey.p12";

/** The account type, usually based on your company or app's package. */
private static final String ACCOUNT_TYPE = "com.example.myapp";

/** The Mirror API scopes needed to access the API. */
private static final String MIRROR_ACCOUNT_SCOPES =
    "https://www.googleapis.com/auth/glass.thirdpartyauth";

/**
 * Build and returns a Mirror service object authorized with the service accounts.
 *
 * @return Mirror service object that is ready to make requests.
 */
public static Mirror getMirrorService() throws GeneralSecurityException,
    IOException, URISyntaxException {
  HttpTransport httpTransport = new NetHttpTransport();
  JacksonFactory jsonFactory = new JacksonFactory();
  GoogleCredential credential = new GoogleCredential.Builder()
      .setTransport(httpTransport)
      .setJsonFactory(jsonFactory)
      .setServiceAccountId(SERVICE_ACCOUNT_EMAIL)
      .setServiceAccountScopes(MIRROR_ACCOUNT_SCOPES)
      .setServiceAccountPrivateKeyFromP12File(
          new java.io.File(SERVICE_ACCOUNT_PKCS12_FILE_PATH))
      .build();
  Mirror service = new Mirror.Builder(httpTransport, jsonFactory, null)
      .setHttpRequestInitializer(credential).build();
  return service;
}

/**
 * Creates an account and causes it to be synced up with the user's Glass.
 * This example only supports one auth token; modify it if you need to add
 * more than one, or to add features, user data, or the password field.
 *
 * @param mirror the service returned by getMirrorService()
 * @param userToken the user token sent to your auth callback URL
 * @param accountName the account name for this particular user
 * @param authTokenType the type of the auth token (chosen by you)
 * @param authToken the auth token
 */
public static void createAccount(Mirror mirror, String userToken, String accountName,
    String authTokenType, String authToken) {
  try {
    Account account = new Account();
    List<AuthToken> authTokens = Lists.newArrayList(
        new AuthToken().setType(authTokenType).setAuthToken(authToken));
    account.setAuthTokens(authTokens);
    mirror.accounts().insert(
        userToken, ACCOUNT_TYPE, accountName, account).execute();
  } catch (IOException e) {
    e.printStackTrace();
  }
}

Odzyskiwanie kont w Google Glass

Pobieranie i używanie obiektów Account w Google Glass jest podobne do używania standardowego Androida AccountManager.

  1. Zadeklaruj te uprawnienia w pliku AndroidManifest.xml:

    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.USE_CREDENTIALS" />
    
  2. Pobierz konta Glassware:

    AccountManager accountManager = AccountManager.get(mContext);
    // Use your Glassware's account type.
    Account[] accounts = accountManager.getAccountsByType("com.example");
    
    // Pick an account from the list of returned accounts.
    
  3. Pobierz token uwierzytelniania z Account:

    // Your auth token type.
    final String AUTH_TOKEN_TYPE = "oauth2:https://www.example.com/auth/login";
    
    accountManager.getAuthToken(account, AUTH_TOKEN_TYPE, null, activity, new AccountManagerCallback<Bundle>() {
        public void run(AccountManagerFuture<Bundle> future) {
            try {
                String token = future.getResult().getString(AccountManager.KEY_AUTHTOKEN);
                // Use the token.
            } catch (Exception e) {
                // Handle exception.
            }
        }
    }, null);