GDK Glassware için kimlik doğrulama

GDK Glassware'ınızın kullanıcıların kimliğini bir web hizmetine göre doğrulaması gerekiyorsa GDK, Glassware'ınızı yüklerken kullanıcının kimlik bilgilerini girmesine olanak tanıyan bir API sağlar.

Bu API'yi kullanarak Glass kullanıcılarına tutarlı bir kullanıcı deneyimi sunar ve kendi özel kimlik doğrulama şemalarınızı uygulamanın yükünden kurtulursunuz.

Google API hizmet hesabı oluşturma

Kimlik doğrulama doğru şekilde ayarlandığında, web uygulamanızın arka ucu, kullanıcılar hizmetinizle kimlik doğrulamasını yaptıktan sonra kullanıcıların hesap bilgilerini Glass'a göndermek için Mirror API'yi kullanır.

Bu API'ye erişmek için bir Google API projesi oluşturun ve ardından "hizmet hesabı" ("web uygulaması" için değil) için bir istemci kimliği oluşturun. Bir hizmet hesabı kullanıldığında, kullanıcıların kimlik bilgilerini Glass'a aktarmak için uygulamanıza ayrı ayrı izin vermesi gerekmez. Ayrıca bu kullanıcılar hem OAuth izinleri sayfası hem de kendi kimlik doğrulama sayfanız gösterilmez.

Bu hesabı oluşturmak için:

  1. Google Developers Console'a gidin.
  2. Proje Oluştur düğmesini tıklayın ve istenen bilgileri girin.
  3. Projeniz oluşturulduktan sonra, daha sonra ihtiyacınız olacak proje numarasını not edin.
  4. API'ler ve kimlik doğrulama bölümünde API'ler'i tıklayın ve yeni projeniz için Google Mirror API'yi etkinleştirin.
  5. API'ler ve yetkilendirme bölümünde Kimlik bilgileri'ni, ardından Yeni İstemci Kimliği Oluştur'u tıklayın. Proje için yeni bir OAuth 2.0 istemci kimliği oluşturmak üzere Hizmet hesabı etiketli kutuyu işaretleyin.
  6. Özel anahtarın bilgisayarınıza indirildiğini bildiren bir pop-up pencere açılır ve bu özel anahtarın şifresi gösterilir. Bu pencereyi kapattıktan sonra bu özel anahtarı indiremez veya şifreyi tekrar göremezsiniz. Kaybolmaları halinde yeni bir hesap oluşturmanız gerekir.
  7. Hizmet hesabının e-posta adresini not edin. API çağrısı yapmak için daha sonra bu adrese ihtiyacınız olacak.

Glassware'ınızla ilgili meta veriler sağlama

Glassware'inizi göndermeye hazır olduğunuzda aşağıdaki bilgileri sağlamanız gerekecektir. Bu sayede, Glassware'ınızı uyguladığınızda kimlik doğrulamasının doğru şekilde yapılmasını sağlayabiliriz.

  • Kullanıcıların MyGlass'ta Glassware'ınızı açtığında yönlendirildiği kimlik doğrulama URL'niz.
  • Hesap türü (Glass cihazda Android AccountManager API'lerini çağırırken kullanacağınız dize)
  • AndroidManifest.xml cihazınızdaki uygulamanızın paket adı
  • Yukarıda oluşturduğunuz projenin sayısal Google API proje kimliği
  • MyGlass'a yüklenecek APK. Test için, Glassware'ınız MyGlass'tan açıldığında ilk indirme işlemini gerçekleştirmek üzere bu APK'yı yalnızca bir kez sağlamanız gerekir. Ardından, cihazınızdaki APK'nın üzerine yazarak yerel olarak yineleme yapabilir ve hata ayıklama yapabilirsiniz. Bu APK'nın aşağıdaki ölçütleri karşılaması gerektiğini unutmayın:
    • Sıkıştırılmış şekilde hizalanmış olmalıdır.
    • Bu işlemden sonra paket adında veya özel imzalama anahtarında herhangi bir değişiklik yapmamanız gerekir (Android paket yöneticisi, bu değişikliklerden herhangi biri yapıldığında yükseltmelere izin vermez).
    • Dosya boyutu 50 megabayttan küçük olmalıdır.
    • GDK'nın en son sürümü kullanılarak derlenmiş olmalıdır.

Kimlik doğrulama akışını uygulama

Aşağıdaki şemada GDK Glassware için temel kimlik doğrulama akışı gösterilmektedir:

Kimlik doğrulama akışını uygulamak için:

  1. Kullanıcılar, Glassware'ı MyGlass'ta açtığında kimlik doğrulama URL'nize yönlendirilir. Bu istekler, daha sonra kullanmanız gereken userToken adlı bir sorgu parametresi içerir.

  2. Kullanıcı, kimlik doğrulama sayfanıza kimlik bilgilerini girer.

  3. Sunucunuz, kullanıcının kimlik bilgilerini doğrular. Kimlik bilgileri geçerliyse mirror.accounts.insert yöntemine bir Mirror API çağrısı yapın. Bu yöntem, Yansıtma hizmet nesnenizi oluştururken https://www.googleapis.com/auth/glass.thirdpartyauth kapsamını belirtmenizi gerektirir. Bu API çağrısını ham HTTP veya Java kullanarak yapma örnekleri hesap oluşturma örneklerinde gösterilmektedir.

    Aşağıda belirttiğiniz parametreler ve istek gövdesi, hesabı doğrudan cihazda oluşturuyor olsaydınız Android'in AccountManager işlevine sağlayacağınız bilgileri temsil eder.

    Mülk adı Değer Açıklama
    features[] dize listesi Özelliklerin listesi ( AccountManager.hasFeatures bölümüne bakın).
    password dize Hesap şifresi ( AccountManager.getPassword bölümüne bakın). Kullanıcının gerçek şifresini bu alanda saklamamanızı, bunun yerine yenileme jetonu gibi uzun süreli gizli verileri saklamak için kullanmanızı öneririz.
    userData[] nesne listesi Hesabla ilişkili bir veya daha fazla kullanıcı verisi çifti ( AccountManager.getUserData bölümüne bakın).
    userData[].key dize Belirli bir kullanıcı verisi anahtar/değer çiftiyle ilişkili anahtar.
    userData[].value dize Belirli bir kullanıcı verisi anahtar/değer çiftiyle ilişkili değer.
    authTokens[] nesne listesi Hesabınızla ilişkili bir veya daha fazla kimlik doğrulama jetonu ( AccountManager.getAuthToken bölümüne bakın).
    authTokens[].type dize Yetkilendirme jetonunun türü.
    authTokens[].authToken dize Yetkilendirme jetonu.
  4. Mirror API, mirror.account.insert isteğini aldıktan sonra hesabı kullanıcının Glass cihazlarına gönderir. Artık AccountManager sınıfını kullanarak hesaba erişebilirsiniz.

Kullanıcı dostu bir kimlik doğrulama akışı uygulamak için aşağıdaki yönergeleri uygulayın:

  • Akışınızı mobil cihazlar için optimize edin.
  • Akışınızda bir kapsam varsa ve kullanıcı bunu iptal ederse iyi tasarlanmış bir hata mesajı kullanın.
  • İstediğiniz kapsamların Glassware'ınızda gerçekten kullanıldığından emin olun.
  • Bağlanabilen kullanıcı hesaplarını bağladığınızdan emin olun.
  • Mümkünse kullanıcı verileri bulutta yedeklenmelidir.

Glassware kimlik doğrulamasında tutarlılık sağlamak için aşağıdaki kimlik doğrulama akışlarından birini kullanın:

Hesap olmadan yansıtma veya karma

  1. MyGlass'ta etkinleştirdikten sonra kimlik doğrulama URL'niz bir pop-up'ta açılır.
  2. Bu işlem, kullanıcıyı doğrudan kabul etmesi gereken kapsamlara gönderir.
  3. Kullanıcı kapsamları kabul ettikten veya iptal ettikten sonra pop-up'ı kapatın.

Hesapla yansıtma

  1. MyGlass'ta etkinleştirdikten sonra kimlik doğrulama URL'niz bir pop-up'ta açılır.
    • Kullanıcı hizmetinizde oturum açmışsa kullanıcıyı doğrudan kapsamlara gönderin.
    • Kullanıcı oturum açmadıysa oturum açma alanlarını gösterin, kullanıcının hizmetinizde oturum açmasına izin verin ve ardından kullanıcıyı kapsamlara gönderin.
    • Kullanıcının hesabı yoksa hesap oluşturma bağlantısı sağlayın. Kullanıcıların, yükleme akışı süreci kapsamında hesap oluşturabilecekleri bir yöntem olmalıdır.
  2. Kullanıcı kapsamları kabul eder.
    • Glassware'ınızda yapılandırılabilir ayarlar varsa kullanıcıyı, makul varsayılanların seçildiği ayarlar sayfasına yönlendirin.
    • Glassware'ınızda yapılandırılabilir ayar yoksa kullanıcıyı bir onay sayfasına yönlendirin. Ek yapılandırma gerekmiyorsa pop-up'ı kapatın.

Bir hesapla karma

  1. MyGlass'ta etkinleştirdikten sonra kimlik doğrulama URL'niz bir pop-up'ta açılır.
    • Kullanıcı hizmetinizde oturum açmışsa kullanıcıyı doğrudan kapsamlara gönderin.
    • Kullanıcı oturum açmadıysa oturum açma alanlarını gösterin, kullanıcının oturum açmasına izin verin ve ardından kullanıcıyı kapsamlara gönderin.
    • Kullanıcının hesabı yoksa hesap oluşturmak için bir bağlantı sağlayın.
  2. Kullanıcı, kapsamları kabul eder.
  3. GDK hesabını eklemek için Mirror API'ye istek gönderin.
    • Kullanıcıyı, makul varsayılan ayarların seçili olduğu ayarlar sayfasına yönlendirin.
    • Kullanıcıya bir onay sayfası gönderin. Ek yapılandırma gerekmiyorsa pop-up'ı kapatın.

Hesap ve özel kapsamlarla yansıtma veya karma

  1. MyGlass'ta etkinleştirdikten sonra kimlik doğrulama URL'niz bir pop-up'ta açılır.
    • Kullanıcı hizmetinizde zaten oturum açtıysa kullanıcıyı dahili kapsamlarınıza gönderin
    • Kullanıcı oturum açmadıysa oturum açma alanlarını gösterin, oturum açmasına izin verin ve ardından kullanıcıyı dahili kapsamlarınıza gönderin
    • Kullanıcının hesabı yoksa hesap oluşturma bağlantısı sağlayın.
  2. Kullanıcı özel kapsamlarınızı kabul ettiğinde kullanıcıyı Google'ın kapsamlarına gönderin.
  3. GDK hesabını eklemek için Mirror API'ye istek gönderin.
    • Kullanıcıyı, makul varsayılan ayarların seçili olduğu ayarlar sayfasına yönlendirin.
    • Kullanıcıya bir onay sayfası gönderin. Ek yapılandırma gerekmiyorsa pop-up'ı kapatın.

Android/iPhone uygulamasıyla yansıtma veya karma

  1. MyGlass'ta etkinleştirildikten sonra kimlik doğrulama URL'niz bir pop-up pencerede açılır.
  2. Bu işlem, kullanıcıyı doğrudan kabul edeceği kapsamlara gönderir.
  3. Kullanıcı kapsamları kabul ettikten sonra:
    • Kullanıcının tamamlayıcı uygulaması varsa ve kimliği doğrulanmışsa pop-up pencereyi kapatın.
    • Aksi takdirde, kullanıcıyı uygulamayı Google Play Store'dan veya iOS Store'dan indirmeye yönlendiren bir geçiş reklamına gönderin.
  4. Uygulamayı yükleyip kimlik doğrulamasını yaptıktan sonra pop-up pencereyi kapatın

GDK ve hesap yok

Bu akış için MyGlass'ta Glassware'ı etkinleştirmeniz yeterlidir.

bir hesapla GDK

  1. MyGlass'ta etkinleştirdikten sonra kimlik doğrulama URL'niz bir pop-up'ta açılır.
    • Kullanıcı hizmetinizde zaten oturum açmışsa kullanıcıyı onay ekranına yönlendirin.
    • Kullanıcı oturum açmamışsa oturum açma alanlarını görüntüleyin, oturum açmasına izin verin ve ardından onay ekranına gönderin.
    • Kullanıcının hesabı yoksa hesap oluşturmak için bir bağlantı sağlayın.
  2. Kullanıcı, kapsamları kabul eder.
  3. GDK hesabını eklemek için Mirror API'ye istek gönderin.
  4. Onay ekranını gösterin ve kısa bir süre sonra ekranı kapatın.

Hesap oluşturma örnekleri

Mümkün olduğunda Mirror API için istemci kitaplıklarını kullanın. Bu sayede, hesabı oluşturmak için mirror.accounts.insert numarası çağrılır.

Ham HTTP örneği

Aşağıdaki örnekte yalnızca isteğin URL'si ve beklenen JSON gövdesinin bir örneği gösterilmektedir. Bir hizmet hesabı adına ham HTTP isteği göndermek çok daha karmaşıktır (tüm ayrıntılar için Sunucudan Sunucuya Uygulamalar için OAuth 2.0'ı Kullanma başlıklı makaleye bakın). Bu nedenle, mümkünse bu işlemi kolaylaştırmak için Google API istemci kitaplıklarımızdan birini kullanmanızı öneririz.

İstek yöntemi ve URL:

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

İstek içeriği:

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

İstek URL'sindeki {userToken} değerini, Kimlik doğrulama akışını uygulama başlıklı makalenin 1. adımında kimlik doğrulama URL'nize iletilen jetonla değiştirin.

Java Örneği

Bu örnekte, mirror.accounts.insert yöntemini çağırmak için Java istemci kitaplığının nasıl kullanılacağı gösterilmektedir

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();
  }
}

Glass'ta Hesapları Alma

Glass'ta Account nesnelerini almak ve kullanmak, standart Android AccountManager kullanımına benzer.

  1. AndroidManifest.xml dosyanızda aşağıdaki manifest izinlerini beyan edin:

    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.USE_CREDENTIALS" />
    
  2. Glassware'ın hesaplarını alma:

    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. Account'ten bir yetkilendirme jetonu alın:

    // 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);