GDK Glassware でウェブサービスに対してユーザーを認証する必要がある場合は、 GDK が提供する API を使用すると、ユーザーは Google Cloud の インストールします。
この API を使用すると、一貫性のあるユーザー、 ユーザー エクスペリエンスを向上させ、独自の実装のオーバーヘッドを回避できる サポートしています。
Google API サービス アカウントを作成する
認証が正しく設定されると、ウェブアプリのバックエンドは Mirror API を使用してユーザーのアカウント情報を 認証と認可が行われます。
この API にアクセスするには、Google API プロジェクトを作成し、 「サービス アカウント」のクライアント ID を作成する(「ウェブ アプリケーションではない」)。方法 使用すると、ユーザーは、サービス アカウントに対してサービス アカウントに 認証情報を Glass にプッシュする権限が求められ、 OAuth 権限ページと独自の認証ページの両方が表示される クリックします。
このアカウントを作成するには:
- Google Developers Console にアクセスします。
- [プロジェクトを作成] ボタンをクリックして、必要な情報を入力します。
- プロジェクトが作成されたら、プロジェクト番号をメモします。この番号です。 確認します。
- [API とauth、[API] をクリックして Google Mirror API を有効にします。 作成します。
- [API と[認証情報]、[新しいクライアントを作成] の順にクリックします。 ID。[Service account] チェックボックスをオンにして、新しい OAuth 2.0 を作成します。 クライアント ID です。
- 秘密鍵がダウンロードされていることを知らせるポップアップ ウィンドウが表示されます 秘密鍵のパスワードが提供されます。 このウィンドウを閉じると、この限定公開動画をダウンロードできなくなります パスワードを再度確認する必要はありません。紛失した場合は、新たに認証情報を 1 です。
- サービス アカウントのメールアドレスをメモしておきます。このメールアドレスは後で必要になります。 あとで API 呼び出しを行います
Glassware に関するメタデータを提供する
Glassware を提出する準備ができたら、 次の情報を参照してください。これにより、お客様の Glassware を 実装時に正しく認証されるようにする必要があります。
- 認証 URL: 認証 URL、認証 URL、認証の URL MyGlass で Glassware をオンにできるようになります。
- アカウントの種類(
Glass デバイス上の Android
AccountManager
API) AndroidManifest.xml
から取得するアプリのパッケージ名- 作成したプロジェクトの Google API プロジェクト ID(数値) 上
- MyGlass にアップロードする APK。テストでは、Terraform 構成の
この APK を 1 回に指定して、Glassware が
MyGlass からオンにできます。ローカルで反復処理してデバッグできます
デバイス上の APK を上書きします。なお、この APK は
次の条件を満たす必要があります
<ph type="x-smartling-placeholder">
- </ph>
- zip 整列する必要があります。
- パッケージ名またはプライベート署名は変更しないでください (Android パッケージ マネージャーはアップグレードを許可しません) 。
- 50 MB 未満にする必要があります。
- 最新バージョンの GDK を使用してコンパイルする必要があります。
認証フローの実装
次の図は、サービスの基本認証フローを示しています。 GDK Glassware:
認証フローを実装するには:
ユーザーが MyGlass で Glassware をオンにすると、リダイレクトされます 認証 URL に追加します。これらのリクエストには、
userToken
は後で使用するために必要です。ユーザーが認証ページで認証情報を入力します。
サーバーがユーザーの認証情報を検証します。認証情報が有効な場合
mirror.accounts.insert
メソッドに対して Mirror API 呼び出しを行います。この方法は 必要な場合は、https://www.googleapis.com/auth/glass.thirdpartyauth
スコープを サービス オブジェクトをミラーリングする。raw データを使用してこの API 呼び出しを行う例 アカウント作成の例では、HTTP または Java を使用しています。以下で指定するパラメータとリクエスト本文は、 次のような場合に Android の
AccountManager
に提供する情報 ユーザーがデバイス上で直接アカウントを作成していました。プロパティ名 値 説明 features[]
文字列のリスト 機能のリスト( <ph type="x-smartling-placeholder"></ph> AccountManager.hasFeatures
)。password
文字列 アカウントのパスワード( <ph type="x-smartling-placeholder"></ph> AccountManager.getPassword
)。おすすめの方法 ユーザーの実際のパスワードを ただし、このフィールドを使用して、長期間有効な非公開の 取得します。userData[]
オブジェクトのリスト アカウントに関連付けられているユーザーデータのペア(1 つ以上) ( AccountManager.getUserData
)。userData[].key
文字列 特定のユーザー データの Key-Value に関連付けられているキー ペア設定します。 userData[].value
文字列 特定のユーザーデータの Key-Value に関連付けられた値 ペア設定します。 authTokens[]
オブジェクトのリスト アカウントに関連付けられた 1 つ以上の認証トークン ( AccountManager.getAuthToken
)。authTokens[].type
文字列 認証トークンのタイプ。 authTokens[].authToken
文字列 認証トークン。 mirror.account.insert
リクエストを受信すると、Mirror API は これで、そのアカウントにアクセスできるユーザーの Glass デバイスがリンクされました。AccountManager
クラスを使用します。
推奨される認証フロー
ユーザー フレンドリーな認証フローを実装するには、次のガイドラインに従ってください。
- モバイル デバイス向けにフローを最適化する。
- フローにスコープがあり、ユーザーがキャンセルした場合、フローは適切に エラー メッセージが表示されます。
- リクエストしたスコープが実際に Glassware で使用されていることを確認してください。
- ユーザー アカウントを接続できる場合は、接続していることを確認します。
- 可能な限り、ユーザーデータはクラウドにバックアップする必要があります。
Glassware 認証の一貫性を保つには、次のいずれかを使用してください 認証フロー:
アカウントなしのミラーリングまたはハイブリッド
- MyGlass で切り替えると、認証用 URL がポップアップで開きます。
- これにより、ユーザーは承認するスコープに直接移動します。
- ユーザーがスコープを承認またはキャンセルしたら、ポップアップを閉じます。
アカウントを使用したミラーリング
- MyGlass で切り替えると、認証用 URL がポップアップで開きます。
- ユーザーがすでにサービスにログインしている場合は、ユーザーを直接送信します。 あります。
- ユーザーがログインしていない場合は、ログイン フィールドを表示し、ユーザーがログインできるようにします。 スコープに送信するだけです
- ユーザーがアカウントを持っていない場合は、 あります。ユーザーはサービス アカウントの一部としてアカウントを作成できる インストール フローのプロセスを確認します。
- ユーザーがスコープを承認します。
- Glassware に構成可能な設定がある場合は、ユーザーを 設定ページで妥当なデフォルト値が選択されています。
- Glassware に構成可能な設定がない場合は、ユーザーを 確認ページが表示されます。追加の設定がない場合はポップアップを閉じる 必要ありません。
アカウントを使用するハイブリッド
- MyGlass で切り替えると、認証用 URL がポップアップで開きます。
- ユーザーがすでにサービスにログインしている場合は、ユーザーを直接送信します。 あります。
- ユーザーがログインしていない場合は、ログイン フィールドを表示し、ユーザーがログインできるようにします。 スコープに送信するだけです
- お客様がアカウントを持っていない場合は、アカウントを作成するためのリンクを提供します。
- ユーザーがスコープを承認します。
- Mirror API にリクエストを送信して、GDK アカウントを挿入します。
- 適切なデフォルト値を選択してユーザーを設定ページに誘導します。
- お客様に確認ページを送信します。他に何もない場合はポップアップを閉じる 構成が必要です。
アカウントとカスタム スコープを使用したミラーリングまたはハイブリッド
- MyGlass で切り替えると、認証用 URL がポップアップで開きます。
- ユーザーがすでにサービスにログインしている場合は、ユーザーを 内部スコープ
- ユーザーがログインしていない場合は、ログイン フィールドを表示し、ユーザーがログインできるようにします。 内部スコープに送信するように
- お客様がアカウントを持っていない場合は、アカウントを作成するためのリンクを提供します。
- ユーザーがカスタム スコープを承認したら、ユーザーを Google のスコープに転送します。
- Mirror API にリクエストを送信して、GDK アカウントを挿入します。
- 適切なデフォルト値を選択してユーザーを設定ページに誘導します。
- お客様に確認ページを送信します。他に何もない場合はポップアップを閉じる 構成が必要です。
Android/iPhone アプリでのミラーリングまたはハイブリッド接続
- MyGlass で切り替えると、認証用 URL がポップアップで開きます。
- これにより、ユーザーは承認するスコープに直接移動します。
- ユーザーがスコープを承認した後:
<ph type="x-smartling-placeholder">
- </ph>
- ユーザーがコンパニオン アプリを使用していて認証済みの場合は、ポップアップを閉じます。 クリックします。
- 表示されていない場合は、ユーザーをインタースティシャルに誘導して、 Google Play ストアまたは iOS ストアから入手したアプリ
- アプリのインストールと認証が完了したら、ポップアップ ウィンドウを閉じます
GDK、アカウントなし
このフローに必要なのは、MyGlass で Glassware をオンに切り替えることだけです。
アカウントがある GDK
- MyGlass で切り替えると、認証用 URL がポップアップで開きます。
- ユーザーがすでにサービスにログインしている場合は、ユーザーを 確認画面が表示されます。
- ユーザーがログインしていない場合は、ログイン フィールドを表示し、ユーザーがログインできるようにする ログインして確認画面を送信します。
- お客様がアカウントを持っていない場合は、アカウントを作成するためのリンクを提供します。
- ユーザーがスコープを承認します。
- Mirror API にリクエストを送信して、GDK アカウントを挿入します。
- 確認画面を表示し、表示されたら画面を閉じます。 短い期間です。
アカウント作成の例
クライアント ライブラリを使用する
使用することをおすすめしますこれにより、mirror.accounts.insert
が呼び出されます。
アカウントを簡単に作成できます。
未加工の HTTP の例
以下の例は、リクエストの URL と JSON 本文です。サービスに代わって未加工の HTTP リクエストを作成する はるかに複雑になります( サーバー間アプリケーションに OAuth 2.0 を使用する をご覧ください)。したがって、Google の Google API クライアント ライブラリ できれば簡単にすることをおすすめします。
リクエストのメソッドと URL:
POST https://www.googleapis.com/mirror/v1/accounts/{userToken}/com.example.myapp/username%40email.com
リクエスト本文:
{
"features": ["a", "b", "c"],
"userData": [
{ "key": "realName", "value": "Rusty Shackleford" },
{ "key": "foo", "value": "bar" }
],
"authTokens": [
{ "type": "your_token_type", "authToken": "zT419Ma3X2pBr0L..." }
]
}
リクエスト URL の {userToken}
を、渡されたトークンに置き換えます。
認証用の URL を入力する必要があります。
認証フローを実装する。
Java の例
この例では、Java クライアント ライブラリを使用して
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();
}
}
Glass でのアカウントの取得
Account
を取得して使用する
標準的な Android アプリを使用して
AccountManager
。
AndroidManifest.xml
ファイルで次のマニフェスト権限を宣言します。<uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="android.permission.USE_CREDENTIALS" />
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.
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);