People API を公開しました。ユーザーの同意を得た上でこの API を使うと、連絡先のデータを取得することができます。以前であれば、デベロッパーはユーザー プロファイルを取得するために Google+ API、連絡先を取得するために Contacts API というように、複数回の呼び出しを実行する必要がありました。このたび発表する People API は、最新のプロトコルとテクノロジーを使用しており、GData プロトコルを使用していた Contacts API に取って代わるものです。
たとえば、ユーザーがプライベートの連絡先リストに何人かの情報を格納していた場合、この API を呼び出すことによって、(ユーザーが同意した場合)リンクされているすべてのプロファイルがマージされた連絡先のリストを取得することができます。ユーザーが関連するスコープを承認すると、その結果が people.connections.list オブジェクトとして返されます。リストに含まれている各人のオブジェクトには、resourceName プロパティが含まれます。このプロパティは people.get を呼び出して、その人物に対する追加のデータを取得するために使用できます。
API は HTTP および JSON を使用しているので、標準的な HTTP クライアントであれば、どのようなものでもリクエストの送信や応答の解析が可能です。ただし、アプリケーションは API へのアクセス権限を得なければならないので、サービスへのアクセスに必要な認証情報を取得するために、Google デベロッパー コンソールにプロジェクトを作成しなければなりません。実行しなければならないステップについては、 ここを参照してください。Google API やデベロッパー コンソールにまだ慣れていない場合は、まずこのビデオシリーズを見て知識を深めておけば、すぐに追いつけます。
Person の各アイテムは resource_name と関連付けられているので、次の簡単な呼び出しを行うだけでその人物に関する追加データにアクセスできます。 Person person = peopleService.people().get("resourceName").execute();
この API 呼び出しの詳細については、ここを参照してください。
新しい People API を使用すると、複数のソースおよび API からデータをマージして 1 つのデータソースに統合することができます。さらに、ユーザーが許可した場合は、自宅の住所や電話番号、プライベート メールアドレス、誕生日など、以前には取得できなかったデータにもアクセスできます。
こうした機能やデータが新たに利用可能になり、既存のデータにも簡単にアクセスできるようになったことによって、次世代のクールなウェブやモバイル アプリを作り出そうという皆さんの意欲はかきたてられることでしょう。その結果、皆さんのアプリのユーザーや、そのユーザーが影響を及ぼす人々に喜んでいただけることを願っています。People API の詳細については、ここから公式ドキュメントを参照してください。
またパーミッションはグループに分類することもできるようになったので、ユーザーは技術的な難しい専門用語を理解していなくても、内容を理解したうえでパーミッションを与えるかどうかの判断を下すことができます。決定権をユーザーにゆだねることで、ユーザーはパーミッションを与えないこともできますし、以前に付与したパーミッションを取り消すこともできます。したがって、アプリ側で特に注意が必要な点は、拒否される可能性のあるパーミッションが必要な API 呼び出しに注意することと、パーミッションが拒否されてもそれ以外のアプリの機能を使い続けることができるようにエラー処理を工夫することです。
最もわかりやすいのは、 ローカルの WiFi や Bluetooth の MAC アドレスへのアクセスが禁止されたことです。 WifiInfo オブジェクトの getMacAddress() メソッドと、BluetoothAdapter.getDefaultAdapter().getAddress() メソッドは、今後どちらも 02:00:00:00:00:00 という値を返すことになります。
ただし、 Google Play サービスではインスタンス ID が提供されており、デバイスで実行中のアプリケーションの各インスタンスは、この ID で区別します。インスタンス ID は、リセットできない端末固有のハードウェア ID に代わる信頼性の高い ID を提供します。インスタンス ID は、端末を出荷時の設定に戻すことでリセットできます。インスタンス ID のスコープは、アプリのインスタンスです。詳細については、Google Developers サイトのインスタンス ID とはを参照してください。
Android Studio 2.0 は、正式な Android IDE の最新リリースです。ビルドのパフォーマンスとエミュレータのスピードに重点を置き、アプリの開発環境を改善します。今回のアップグレードの注目点は、コードの変更を速やかに編集し、表示できる Instant Run や、さらに高速になった Android エミュレータなどの新機能を備えた Android Studio 2.0 です。最終リリースの準備期間中は、ベータ リリース チャンネルで Android Studio 2.0 ベータ版をダウンロードできます。Android Studio 2.0 リリースには、次のような多くの新機能が実装されています。
*ベータ版でアップデート* Instant Run - 速やかなコード編集とアプリ開発サイクルを実現します。
下の Android Studio Tool Time ビデオの最新の回をご確認ください。主要な機能について説明しています。
Android Studio 2.0 ベータ版の新機能
Instant Run
11 月に最初の Instant Run プレビューが発表されました。今回の最新のベータ リリースでは、コールド スワップと呼ばれる新機能が導入されています。
Android Studio 2.0 の Instant Run を使用すると、アプリを Android 端末または Android エミュレータで実行しながら、素早くアプリのコードを変更できます。Android Studio 2.0 では、コードを変更するたびにアプリ全体の再ビルドと再デプロイを待つ必要がなく、コードの増分やリソースの変更のみの増分的なビルドとプッシュを試行します。行ったコードの変更によっては、変更の結果を 1 秒以内に確認することも可能です。最新の Gradle プラグイン('com.android.tools.build:gradle:2.0.0-beta2’)を使用するようにアプリをアップデートするだけでこの機能を利用でき、時間を節約できます。他にコードを変更する必要はありません。プロジェクトが Instant Run を使うよう正しく設定されている場合、ツールバーの [Run] ボタンの横に稲妻のマークが表示されます。
Instant Run ボタン
Android Studio 2.0 は、アプリを初めてコンパイルしてデバイスにデプロイする際に、バックグラウンドでコードを監視しており、それに基づいてどのようにコードやリソースを入れ替えるかを決定しています。Instant Run 機能は、次のスワップ方法のいずれかを使用して、ベスト エフォート ベースでアプリをアップデートします。
Instant Run は Android Studio 2.0 のファースト プレビューから大きく変更されており、より多くの種類のコードやリソースの変更に対応しました。さらに多くのコードの変更に対応できるよう、Android Studio の将来のリリースに向けて継続して改善される予定です。ご提案がある場合は、お気軽に機能リクエストをお送りください。また、Instant Run の詳細はこちらでご確認ください。
App Indexing
Android Studio 2.0 では、App Indexing のサポートがさらに簡単になりました。App Indexing を設定すると、Google 検索ユーザーはアプリを表示できます。これは、アプリのマニフェストで指定した URL パターンをインデックス化し、アプリからの API コールを使用して、アプリのコンテンツを既存ユーザーおよび新規ユーザーの両方に表示する仕組みです。特に、アプリ コンテンツの URL をサポートすると、ユーザーは自分のデバイスの Google 検索結果からこれらのリンクを直接開くことができます。
Android Studio 2.0 は重要なリリースであり、ベータ リリースをチェックして新機能をワークフローに取り入れる絶好のチャンスです。ベータ リリースは品質の安定度にはほとんど問題がなく、バグはほとんど無いと思われます。しかし、一般的なベータ リリースと同様に、まだバグが存在している可能性があります。何らかの問題が見つかった場合はお知らせください。修正に取りかかります。Android Studio を既にご使用中の方は、ナビゲーション メニューからベータ チャンネルのアップデートを確認できます(Windows/Linux の場合は [Help] → [Check for Update]、OS X の場合は [Android Studio] → [Check for Updates])。ベータ版にアップデートすると、新しいバージョンの Android Studio と Android エミュレータにアクセスできるようになります。
これはユーザー エクスペリエンスが悪いというだけではなく、顧客データが盗まれ、悪用されるというリスクの問題でもあります。これを防ぐため、ユーザーがアプリにサインインする際に Google からトークンを取得し、このトークンをサーバーに渡すようにします。サーバーは、このトークンが本当に Google がそのアプリの正規ユーザー宛てに発行したものかどうかを確認します(オーディエンス設定に基づいて実行します。下図参照)。この時点でサーバーは、サインインしようとしているのがこのアプリの正規ユーザーであり、不正な攻撃者ではないことを確認できます。その後、サーバーは要求された詳細情報を返します。
図 2.第三者の偽のトークンを拒否する
このステップを見てみましょう。
ステップ 1: Google にサインインすると、Android アプリは ID トークン(*)を取得します。こちらはこのプロセスの一例です。これを実行するには、GoogleSignInOptions オブジェクトを作成するときに requestIdToken メソッドを呼び出します。
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.server_client_id))
.requestEmail()
.build();
これには、サーバーのクライアント ID を取得する必要があります。この方法についての詳細は、こちらをご覧ください(ステップ 4 を参照)。
Android アプリで取得されたトークンは、HTTPS でサーバーに POST できます。次にサーバーはトークンを認証します。
(*)ID トークンは JSON Web Token であり、RFC7519 で定義されています。これは二者間の要求を安全に表現するためのメソッドであり、業界標準として公開されています。
ステップ 2: サーバーは Android クライアントからトークンを受け取ります。次にサーバーは、Google API Client ライブラリで提供されているメソッドを使用してこのトークンを認証します。このトークンが Google によって発行されたものであること、そして対象オーディエンスがこのサーバーであることが認証されます。
GoogleIdTokenVerifier verifier = new GoogleIdTokenVerifier.Builder(transport, jsonFactory)
// Here is where the audience is set -- checking that it really is your server
// based on your Server’s Client ID
.setAudience(Arrays.asList(ENTER_YOUR_SERVER_CLIENT_ID_HERE))
// Here is where we verify that Google issued the token
.setIssuer("https://accounts.google.com").build();
GoogleIdToken idToken = verifier.verify(idTokenString);
if (idToken != null) {
Payload payload = idToken.getPayload();
String userId = payload.getSubject();
// You can also access the following properties of the payload in order
// for other attributes of the user. Note that these fields are only
// available if the user has granted the 'profile' and 'email' OAuth
// scopes when requested. Even when requested, some fields may be null.
// String email = payload.getEmail();
// boolean emailVerified = Boolean.valueOf(payload.getEmailVerified());
// String name = (String) payload.get("name");
// String pictureUrl = (String) payload.get("picture");
// String locale = (String) payload.get("locale");
// String familyName = (String) payload.get("family_name");
// String givenName = (String) payload.get("given_name");
GoogleAuthUtil を使用してバックエンドに渡すトークンを取得している既存アプリをお持ちの場合、上記のような最新の ID トークン認証を行うライブラリやシステムに切り替える必要があります。サーバー側でのベスト プラクティスを実現するための推奨事項は、今後の記事でご紹介する予定です。
この記事では、認証テクノロジーを使用して、ユーザーの本人認証を行う方法を説明しました。次回の記事では、Google Sign-In API を認証に使用して、ユーザーがアプリやバックエンド サービスから Google ドライブ などの Google サービスへアクセスする方法などを説明する予定です。
Google Location Services on Android【中級】
最適なモバイル経験を提供するためには、位置や状況にあわせてアプリをより良いものにすることが不可欠です。このコースでは、Location/Context API を活用して、位置情報に基いたアプリを作る方法を学びます。Fused Location Providerを使った実装、ユーザーが何をしているかを知ることができる Activity Recognition、 拡張現実でも利用されるGeofence について解説します。【目安学習期間】 2 週間
Google Analytics for Android【中級】
世界のどこで人々はこのアプリを利用しているのか、そして彼らはどのような時にアプリを利用するのか。このコースでは、利用状況に関するデータを Google Analytics に送信し、そのデータを分析する方法について学びます。合わせて、Google タグマネージャの利用方法も解説します。【目安学習期間】 2 週間
Monetize Your Android App with Ads【中級】
このコースでは、AdMob を利用してアプリをマネタイズする方法を学びます。なお、このコースを最大限に活用するには、Android アプリケーションの開発経験を持っている必要があります。
【目安学習期間】 2 週間
Add Google Maps to your Android App【中級】
モバイル デバイスで用いる地図は、近年、私たちの日常生活を大きく変え、私たちはいつでもローカルな地図から世界地図までを道一本に至るまで見ることができるようになり、3D の画像 で主要都市を飛び交うことも可能になりました。Android 開発者として地図機能をビルド、または拡張したいと考えている方におすすめのコースです。【目安学習期間】 2 週間
Add Google Sign-In to your Android Apps【中級】
このコースでは、Google Identity Platform の利用方法を学びます。Google Identity Platform を利用することによって、ユーザーのクレデンシャルを利用したサインインを許可したり、アクセス許可を承諾したデータへのアクセスの方法を学びます。サンプルアプリから、皆さんのアプリにこのサービスを拡張する方法も紹介します。【目安学習期間】 2 週間
Alfred の代替として最近注目しているのが Spotlight です。Spotlight は Mac 標準の検索ツールで、Yosemite で Apple が大幅な機能追加をしたことで、Alfred の基本的な機能と同程度であれば、これで十分使えます。Flashlight というアプリを使えば、Spotlight にプラグインアーキテクチャを持ち込むことができるので、ウェブサイト内を検索をしたり、ノートを取ったり、リマインダーを設定したりといったことが Spotlight 内でできるようになります。
BetterTouchTool
BetterTouchTool は Mac 用のトラックパッドで、ジェスチャーをカスタマイズできるツールです。例えば 2 本指で横にスワイプするジェスチャーで Chrome のような特定のアプリを起動するといった用途に使うことができます。Yosemite のデフォルト設定よりもパワフルなのが特徴です。
SnappySnippet は DOM から直接 CSS や HTML を抜き出すことができる拡張機能です。例えばあるページにとても素敵なボタンがあって、それがどうやって作られているのか知りたいと思ったとします。そんな時にこれを使って DOM ノードを選択すると、再現するのに必要な CSS と HTML を抜き出してくれる、というわけです。また、JSBin のような別サーバーへの送信機能もサポートされています。
DOMListener
TodoMVC のテストに DOMListener が大活躍しています。これは DOM の変更点を監視、ブラウズ、フィルタすることができる拡張機能です。DevTools の Timeline で変更点を監視するのによく似ていますが、DOMListener では同じことを DOM の変更に対して行うことができます。例えばシングルページアプリケーションで 新しい UI ピースを挿入したり、新しいビューを差し込んだりした場合、どんな DOM コンテントが追加されたのか、スタイルやテキストコンテントが追加されたのか、確認したり、フィルターすることもできます。これによりデバッグが非常に簡単になります。問題が発見できたら、DevTools に戻ってくる、というワークフローはとても便利です。
The Great Suspender
これはある意味私の生活を変えた拡張機能です。Chrome チームが消費メモリーの最適化に取り組んでいることはご存知と思います。作業は順調に進んでいるようですが、そうしている間にも、私のようにタブを大量に使う人間にとっては、これらのタブを消す必要があります。そこで役立つのが The Great Suspender です。
これはタブを一定時間後に自動的に一時停止することで、Chrome のメモリや GPU のフットプリントを削減してくれるツールです。例えば 50 個のタブが開いていたとしても、実際に同時に使うのは 2 〜 3 個です。この拡張機能はそういったタブを軽量のプレースホルダーページに置き換え、Chrome が表示する必要のないページを見せないことでメモリーの消費を抑えてくれるものです。そしてバッテリーにも優しい。使い続けたいタブに戻ると、リロードするリンクが表示され、その URL に戻ることができます。
この拡張機能に何より感謝しているのは、そういったタブに自分が滅多に戻らないということを教えてくれたことです。ページを開いても、実際に自分がそこに戻ることは非常に少ないということに気付かせてくれました。