* cloudappdata_program : cloudappdataについて [#n1128342] Google Driveにはユーザーデータだけでなく、アプリケーション個別のデータを保存する機能があります。この機能でAndroid端末からクラウドデータセーブを行う実験をします。 配布物(ソースコードとバイナリ)と、使用方法については、「[[Google Driveでクラウドセーブ>cloudappdata]]」をご覧ください。 ---- #contents ---- ** 概要 [#a72f70a5] このプログラムで使用しているGoogle Drive App Data機能を動作させるには、以下の作業が必要です。 + Google Playストアへのアプリの登録。テストユーザーのみの使用でも「非公開での登録」が必要で、一般ユーザーも含めた使用には「公開登録」が必要となります。この手順については、この記事では割愛します。 + Google Playゲームサービスの使用登録。Google Drive APIを使用するための認証機能にはいくつかの方法がありますが、筆者はこの機能をゲーム制作のために使用することを想定しているため、Google Playゲームサービスでの認証機能を利用することにしました。((Google Playゲームサービス内でもクラウドストレージ機能があります。ただしこちらではセーブデータ本数が4本まで、合計で1MBまでと定められており、これを超えるセーブデータを扱いたい場合はGoogle Drive App Dataが便利です。)) + Google Drive SDKとAPIの使用登録。当然必要です。 この後は、cloudappdataをあなたのアプリとして再ビルドして使用するまでの手順を示します。 この後は、cloudappdataをあなたのアプリとして再ビルドして使用するまでの手順を示します。なお、後半には「Google Playストアへのアプリの登録が不要」「Google Playゲームサービスの使用登録が不要」「Google Mobile Service(GMS)が不要」となる手順の解説も行います。 ** アプリ識別子の変更 [#a72f70a5] 当方が配布しているcloudappdataのソースは、そのままビルドすると「net.gorry.com.example.cloudappdata」という識別子のアプリとして完成します。この識別子は当方がすでに公開アプリとして使用しているため、あなたのアプリとして登録することはできません。 そのため、cloudappdataをあなたのアプリとするには、まず識別子を変更する必要があります。以後、あなたのアプリのための識別子を「org.hoge.com.example.cloudappdata」にするものとして解説を行います。 + cloudappdataソースをEclipseへ読み込み、プロジェクトツリーからAndroidManifest.xmlを開きます。 + 「package="net.gorry.com.example.cloudappdata"」の部分を「package="org.hoge.com.example.cloudappdata"」に変更して保存します。 + MainActivity.javaにエラーが多数表示されます。一番最初のエラー行である「import net.gorry.com.example.cloudappdata.R;」を「import org.hoge.com.example.cloudappdata.R;」に変更すると、エラーは全て消失します。 + 念のため、ツリー先頭を選んでメインメニューから[File]-[Refresh]でソースを再読み込みし、[Project]-[Clean]でクリーンビルドします。 以上で、ビルドしたアプリは「org.hoge.com.example.cloudappdata」となり、新しいアプリとしてGoogle Playストアへ登録することができるようになります。((もちろん、誰かが「org.hoge.com.example.cloudappdata」という識別子のアプリを登録してしまったら、あなたはこの識別子でアプリを登録することはできません。)) ** Google Playストアのアプリ登録 [#ga241664] アプリを作成しただけでは、Google Drive App Data機能は使用できるようになりません。まず、ビルドしたアプリをGoogle Playストアへ登録する必要があります。登録の手順についてはここでは割愛します。 ストアへアプリをアップロードしたあと、あなたがテストを行うだけなら、そのアプリを「公開」する必要はありません。「下書き」のままにしておいて結構です。 ** Google Playゲームサービスの登録 [#o9c8649e] Google Playストアへアプリを登録したら、そのアプリに対して「ゲームサービスの登録」をする必要があります。この部分についての解説はGoogle Developersサイトに「[[Setting Up Google Play Game Services with the Google Play Developer Console>https://developers.google.com/games/services/console/enabling?hl=ja]]」として書かれていますが、この記事の時点ではまだ日本語訳されていません。以下に実例として手順を記します。 Google Playストアへ登録したアプリに対して「サービスとAPI」を選択してください。以下のような画面が現れます。 | &ref(gameservice_1s.png); | | (1)ゲームサービス一覧 | [新しいゲームを追加]を選び、ゲーム名と種類を入力します。この項目は後で変更できますので、ここでは適当でかまいません。 | &ref(gameservice_2s.png); | | (2)新しいゲームを追加 | 追加したゲームは、選択すると以下のような画面となります。先ほど入力したゲーム名と種類に加えて、説明やアイコンの登録ができますが、まだ登録しなくても構いません。ここでは[リンク済みアプリ]を選びます。 | &ref(gameservice_3s.png); | | (3)ゲームの一覧 | どのタイプのアプリを追加するかを選択します。ここでは、Androidアプリを選びます。 | &ref(gameservice_4s.png); | | (4)リンクするアプリの選択 | 続いて、リンクするアプリの情報を入力します。 | &ref(gameservice_5s.png); | | (5)リンクするアプリの情報を入力 | リンクするアプリの情報の入力が完了すると、以下のように表示されます。 [今すぐアプリを承認]をクリックして、次へ進みます。 | &ref(gameservice_11s.png); | | (6)アプリの承認 | ユーザーに対してこのゲームサービスに表示される、ゲームの情報を入力します。現在は空のままで構いません。 | &ref(gameservice_12s.png); | | (7)ユーザーに対するゲーム情報の入力 | アプリの識別子と、そのapkファイルを作成するのに使用した証明書の情報を入力します。 アプリの識別子は「org.hoge.com.example.cloudappdata」です。 | &ref(gameservice_13s.png); | | (8)ユーザーに対するゲーム情報の入力 | 証明書の情報はいろいろな取得方法がありますが、ここではapkファイルから直接取り出してみます((他にも、署名に使用したkeystoreファイルに対して「keytool -exportcert -keystore [keystoreファイル名] -list -v」と入力する方法などがあります。))。コマンドプロンプトを起動し、ストアへのアップロード用に署名したapkファイル(ここではcloudappdata.apk)に対して、「unzip -p cloudappdata.apk META-INF/*.RSA META-INF/*.DSA | keytool -printcert」とコマンドを入力します。以下の赤線の部分が、先ほどのダイアログで入力する証明書の情報です。 | &ref(gameservice_14.png); | | (9)apk証明書の情報取り出し | 以上を入力すると、このアプリに対応するクライアントIDが配布されます。このIDはゲームサービスで必要となりますが、Google Drive App Dataの使用のみであれば不要です。 リンク済みアプリの一覧には、以下のように表示されます。 | &ref(gameservice_6s.png); | | (10)リンク済みアプリの一覧 | 以上で最低限の情報入力は完了ですが、必要であればテスターを追加しておくとよいでしょう。 | &ref(gameservice_7s.png); | | (11)テスターの追加 | ** Google Drive API/SDKの登録 [#f9773c75] ゲームサービスのゲーム一覧へ戻り、ゲームを選択すると、「ゲームの詳細」画面となります。その一番下に以下のようなリンクがあります。 | &ref(gameservice_8.png); | | (12)APIコンソールへのリンク | これをクリックすると、登録したゲームサービスに対応するGoogle APIの設定画面を開くことができます。 | &ref(googleapi_1s.png); | | (13)Google APIコンソール | [Services]を開き、[Drive API]と[Drive SDK]をONにします。 | &ref(googleapi_2.png); | | (14)Drive API/SDKをON | [API Access]を開きます。[Client ID for installed applications]の項目に、ゲームサービスで登録したアプリの情報が入っているのが確認できます。 | &ref(googleapi_3s.png); | | (15)APIアクセス可能なクライアントの情報 | このままでもいいのですが、この状態ではDrive APIにアクセスできるのは「Google Playストアに登録するAPKファイル」のみ、つまりリリースビルドしたもののみです。デバッグできないのは不便なので、デバッグビルドしたアプリの情報も追加してみましょう。 まず、[Create another client ID...]をクリックします。 | &ref(googleapi_4.png); | | (16)新しいクライアントアプリの登録 | まず、[Application type]として[Installed Application]を、[Installed application type]として[Android]を指定します。 続いて、ゲームサービスで登録したときと同様に、アプリの識別子と、そのapkファイルを作成するのに使用した証明書の情報を入力します。 アプリの識別子は「org.hoge.com.example.cloudappdata」です。 続いて、デバッグビルドしたAPKファイルから証明書の情報を取り出します。Eclipseでデバッグビルドすると、bin/cloudappdata.apkが作成されます。このファイルに対して、同様に「unzip -p cloudappdata.apk META-INF/*.RSA META-INF/*.DSA | keytool -printcert」とコマンドを入力して証明書の情報を表示します。 | &ref(googleapi_5s.png); | | (17)デバッグビルドapkを登録 | 以上で登録はすべて終了です。なお、これらのデータの登録や変更を行ってから、その変更がサービス実体に反映されるまで、現在は10分ほどかかるようです。 ** もっと少ない手順で使う [#ocb9758a] その後の調査で、「Google Drive App Dataを使用するだけ」ならもっと少ない手順で使えることが判明しました。Google Playストアへのアプリ登録や、ゲームサービスの登録は必ずしも必要ではありません。 + [[Google APIs Console>https://code.google.com/apis/console/]]へアクセスし、Google APIコンソールを開きます。 + 左上のセレクタから[Create]を開き、プロジェクト名を指定します。ここでは「cloudappdata」とします。 + 「cloudappdata」の[Service]ページが開きます。ここから、[Drive API]をONにします。 + [API Access]ページを開き、[Create an OAuth 2.0 client ID]をクリックします。 + 「Branding Information」を入力します。「Product name」に"cloudappdata"を入力し、[Next]をクリックします。 + 「Client ID Setting」を入力します。「Application type」に[Installed application]を選択し、「Installed application type」を[Android]にします。 + 「Package name」にアプリ識別子名(org.hoge.com.example.cloudappdata)を、「Signing certificate fingerprint(SHA1)」に「apkファイルの署名に使用した証明書の情報」を入力します。 これで、cloudappdataアプリケーションを実行できる環境が整います。設定がサービス実体に反映されるまで数十分ほど待つと、使用できるようになります。 これで、cloudappdataアプリケーションを実行できる環境が整います。設定がサービス実体に反映されるまで数分ほど待つと、使用できるようになります。 ** もっと少ない権限で使う [#ocb9758b] その後の調査で、「Google Drive App Dataを使用するだけ」ならもっと少ない権限で使えることが判明しました。「cloudappdata_nogms」サンプルでは、「USE_CREDENTIALS」「GET_ACCOUNTS」権限を必要としません。また、端末に「Google Play 開発者サービス」のインストールを必要とせず、「Google Mobile Service(GMS)」の搭載も必要としません。 ただし、この方法の場合は、Drive APIに対して「Androidアプリケーション」でなく、「一般的なクライアントアプリケーション」としてのID発行が必要となります。発行の手順は、以下の通りです。 + [[Google APIs Console>https://code.google.com/apis/console/]]へアクセスし、Google APIコンソールを開きます。 + 左上のセレクタから[Create]を開き、プロジェクト名を指定します。ここでは「cloudappdata」とします。 + 「cloudappdata」の[Service]ページが開きます。ここから、[Drive API]をONにします。 + [API Access]ページを開き、[Create an OAuth 2.0 client ID]をクリックします。 + 「Branding Information」を入力します。「Product name」に"cloudappdata"を入力し、[Next]をクリックします。 + 「Client ID Setting」を入力します。「Application type」に[Installed application]を選択し、「Installed application type」を[Other]にします。 + クライアントIDが発行されます。「Client ID」の項目(〜.apps.googleusercontent.com)をMainActivity.javaの「CLIENT_ID」に、「Client secret」の項目をMainActivity.javaの「CLIENT_SECRET」へ書き込みます。 これで、cloudappdata_nogmsアプリケーションを実行できる環境が整います。設定がサービス実体に反映されるまで数分ほど待つと、使用できるようになります。 ** 参考 [#b1fbd664] : [[Google Drive SDK>https://developers.google.com/drive/]] |~ 本家Google Drive SDKサイト。 : [[Google デベロッパー アカデミー: Google ドライブ>https://developers.google.com/drive/training/?hl=ja]] |~ Google Drive APIについて日本語での簡単な説明。 : [[Android で Google Drive API の利用手順>http://ohwhsmm7.blog28.fc2.com/blog-entry-352.html]] |~ Google Drive APIを扱うAndroidアプリのコード実例。 : [[GitHub: googledrive/appdatapreferences-android>https://github.com/googledrive/appdatapreferences-android]] |~ Google Drive App Dataを使ってSharedPreferenceをクラウドに置くサンプル。 : [[琴線探査:AndroidでGoogleのOAuth2認証を行うには?(外部ライブラリ完全非依存版)>http://kinsentansa.blogspot.jp/2012/04/androidgoogleoauth2.html]] |~ AndroidでGoogle Mobile Service(GMS)を使わずにGoogleのOAuth2認証を行うサンプル。 RIGHT:counter: today=&counter(today);, yesterday=&counter(yesterday);, total=&counter;