GDK Glassware için kimlik doğrulama

GDK Glassware'in, kullanıcıların kimliklerini bir web hizmetiyle karşılaştırarak doğrulaması gerekiyorsa GDK, kullanıcının Glassware'i yüklerken 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 ek yükünü ortadan kaldırırsınız.

Google API hizmet hesabı oluşturma

Kimlik doğrulama doğru şekilde ayarlandığında, web uygulamanızın arka ucu, kullanıcıların hizmetinizle kimlik doğrulaması yaptıktan sonra hesap bilgilerini Glass'e aktarmak 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ı" için bir istemci kimliği oluşturun ("web uygulaması" değil). Hizmet hesabı kullandığınızda, kullanıcıların kimlik bilgilerini Glass'a aktarması için uygulamanıza ayrı olarak izin vermesi gerekmez ve bir daha 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. Projenizi oluşturduktan sonra, daha sonra ihtiyaç duyacağınız Proje Numarası'nı not edin.
  4. API'ler ve yetkilendirme bölümünde API'leri 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 ve ardından Yeni İstemci Kimliği Oluştur'u tıklayın. Projenin yeni OAuth 2.0 istemci kimliğini oluşturmak için Service account (Hizmet hesabı) etiketli kutuyu işaretleyin.
  6. Pop-up pencerede özel anahtarın bilgisayarınıza indirildiği bildirilir ve söz konusu özel anahtarın şifresi verilir. Bu pencereyi kapattıktan sonra bu özel anahtarı indiremez veya şifreyi tekrar göremezsiniz. Bunlar kaybolursa yeni bir etiket oluşturmanız gerekir.
  7. Hizmet hesabını, daha sonra API çağrısı yapmak için kullanmanız gereken e-posta adresini not edin.

Glassware'iniz hakkında meta veri sağlama

Glassware'i göndermeye hazır olduğunuzda aşağıdaki bilgileri sağlamanız gerekir. Bu, Glassware'i uyguladığınızda doğru bir şekilde kimlik doğrulaması yapacak şekilde ayarlamamıza olanak tanır.

  • MyGlass'ta Glassware'i etkinleştirdiklerinde kullanıcıların yönlendirildiği kimlik doğrulama URL'niz.
  • Hesap türü (Cam cihazdan Android AccountManager API'lerini çağırırken kullanacağınız dize)
  • AndroidManifest.xml etiketinizden uygulamanızın paket adı
  • Yukarıda oluşturduğunuz projenin sayısal Google API projesi kimliği
  • MyGlass'a yüklenecek APK. Test amaçlı olarak, Glassware'iniz MyGlass'dan açıldığında ilk indirme işlemini gerçekleştirmek için bu APK'yı yalnızca bir kez sağlamanız gerekir. Bundan sonra, cihazınızda APK'nın üzerine yazarak yerel olarak iterasyon ve hata ayıklama yapabilirsiniz. Bu APK'nın aşağıdaki ölçütleri karşılaması gerektiğini unutmayın:
    • Zip uyumlu olmalıdır.
    • Sonrasında paket adında veya özel imzalama anahtarında herhangi bir değişiklik yapmamanız gerekir (Android paket yöneticisi, bu değişikliklerden birinin geçerli olması durumunda yükseltmelere izin vermez).
    • 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 MyGlass'ta Glassware'i etkinleştirdiklerinde, kimlik doğrulama URL'nize yönlendirilirler. Bu istekler, daha sonra kullanmanız gereken userToken adlı bir sorgu parametresi içeriyor.

  2. Kullanıcı, kimlik doğrulama sayfanızda 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. Ham HTTP veya Java kullanarak bu API çağrısını yapma örnekleri hesap oluşturma örneklerinde gösterilmiştir.

    Aşağıda sağladığınız parametreler ve istek gövdesi, hesabı doğrudan cihazda oluşturuyorsanız Android'in AccountManager bölümüne sağlanan bilgilerin aynısını temsil eder.

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

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

  • Akışınızı mobil cihazlar için optimize edin.
  • Akışınızın bir kapsamı varsa ve kullanıcı bunları iptal ediyorsa iyi tasarlanmış bir hata mesajınıza sahip olun.
  • İstediğiniz kapsamların Glassware'de kullanıldığından emin olun.
  • Bir kullanıcı hesabı bağlanabiliyorsa bu hesabı bağladığınızdan emin olun.
  • Mümkün olduğunda, kullanıcı verileri buluta yedeklenmelidir.

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

Hesap olmadan yansıtın veya karma oluşturun

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

Hesapla yansıt

  1. MyGlass'ta geçiş yaptıktan sonra kimlik doğrulama URL'niz bir pop-up'ta açılır.
    • Kullanıcı hizmetinizde zaten oturum açmışsa kullanıcıyı doğrudan kapsamlara gönderin.
    • Kullanıcı oturum açmamışsa oturum açma alanlarını gösterin, hizmetinizde oturum açmasına izin verin ve ardından kapsamlara gönderin.
    • Kullanıcının hesabı yoksa hesap oluşturmak için bir bağlantı sağlayın. Kullanıcılar, yükleme akışı süreci kapsamında hesap oluşturma imkanına sahip olmalıdır.
  2. Kullanıcı kapsamları kabul eder.
    • Glassware'inizin yapılandırılabilir ayarları varsa kullanıcıyı makul varsayılanlar seçili şekilde ayarlar sayfasına gönderin.
    • Glassware'inizin yapılandırılabilir ayarları yoksa kullanıcıyı bir onay sayfasına gönderin. Ek yapılandırma gerekmiyorsa pop-up'ı kapatın.

Bir hesapla karma yapı

  1. MyGlass'ta geçiş yaptıktan sonra kimlik doğrulama URL'niz bir pop-up'ta açılır.
    • Kullanıcı hizmetinizde zaten oturum açmışsa kullanıcıyı doğrudan kapsamlara gönderin.
    • Kullanıcı oturum açmamışsa oturum açma alanlarını gösterin, oturum açmasına izin verin ve ardından kullanıcıları kapsamlara gönderin.
    • Kullanıcının hesabı yoksa hesap oluşturma bağlantısı sağlayın.
  2. Kullanıcı kapsamları kabul eder.
  3. GDK Hesabı'nı eklemesi için Mirror API'ye bir istek gönderin.
    • Kullanıcıyı, makul varsayılanlar seçili şekilde ayarlar sayfasına gönderin.
    • 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 oluşturma

  1. MyGlass'ta geçiş yaptıktan sonra kimlik doğrulama URL'niz bir pop-up'ta açılır.
    • Kullanıcı hizmetinizde zaten oturum açmışsa kullanıcıyı dahili kapsamlarınıza gönderin
    • Kullanıcı oturum açmamışsa oturum açma alanlarını gösterin, oturum açmasına izin verin ve ardından 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ı eklemesi için Mirror API'ye bir istek gönderin.
    • Kullanıcıyı, makul varsayılanlar seçili şekilde ayarlar sayfasına gönderin.
    • Kullanıcıya bir onay sayfası gönderin. Ek yapılandırma gerekmiyorsa pop-up'ı kapatın.

Android/iPhone uygulaması ile yansıtma veya karma oluşturma

  1. MyGlass'ta geçiş yaptıktan sonra kimlik doğrulama URL'niz bir pop-up'ta açılır.
  2. Bu işlem, kullanıcıyı kabul etmesi için doğrudan kapsamlara gönderir.
  3. Kullanıcı kapsamları kabul ettikten sonra:
    • Kullanıcı tamamlayıcı uygulamaya sahipse ve kimliği doğrulandıysa pop-up pencereyi kapatın.
    • Yoksa kullanıcıyı, uygulamayı Google Play Store'dan veya iOS mağazasından indirmeye yönlendiren bir geçiş reklamına gönderin
  4. Uygulamayı yükleyip kimlik doğrulaması yaptıktan sonra pop-up pencereyi kapatın

GDK ve hesap yok

Bu akış için gerekli olan tek işlem MyGlass'ta Glassware'i açmaktır.

Hesabı olan GDK

  1. MyGlass'ta geçiş yaptıktan sonra kimlik doğrulama URL'niz bir pop-up'ta açılır.
    • Kullanıcı hizmetinizde zaten oturum açmışsa onay ekranına gönderin.
    • 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şturma bağlantısı sağlayın.
  2. Kullanıcı kapsamları kabul eder.
  3. GDK Hesabı'nı eklemesi için Mirror API'ye bir istek gönderin.
  4. Onay ekranını gösterin ve kısa bir süre gösterdikten sonra kapatın.

Hesap oluşturma örnekleri

Mümkün olduğunda Mirror API için istemci kitaplıklarını kullanın. Bu özellik, hesabı oluşturmak için mirror.accounts.insert yöntemini aramayı kolaylaştırır.

Ham HTTP örneği

Aşağıdaki örnekte yalnızca isteğin URL'si ve beklediği JSON gövdesinin bir örneği gösterilmektedir. Bir hizmet hesabı adına ham HTTP isteklerinde bulunmak çok daha karmaşık bir işlemdir (ayrıntılı bilgi için Sunucudan Sunucuya Uygulamalar için OAuth 2.0'ı Kullanma başlıklı makaleye bakın). Bu işlemi kolaylaştırmak için mümkünse 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 metni:

{
    "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 işleminin 1. adımında kimlik doğrulama URL'nize aktarılan jetonla değiştirin.

Java Örneği

Bu örnekte, mirror.accounts.insert ç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'taki Hesapları Alma

Glass'ta Account nesneleri alma ve kullanma standart Android AccountManager kullanmaya benzer.

  1. AndroidManifest.xml dosyanızda aşağıdaki manifest izinlerini tanımlayın:

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

    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 üzerinden 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);