Top Banner
Google Drive Android API Google Play Services に統合された Women Techmakers: Kyoto Google Playかいはつしゃサービス
35

(Google Play Servicesに統合された)Google Drive Android API

Jun 10, 2015

Download

Technology

Junko Suzuki

Women Techmakers: Kyoto
https://plus.google.com/events/ctt1s9espngv36n5a8jtrrivaq8?hl=ja
で発表するスライド
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: (Google Play Servicesに統合された)Google Drive Android API

Google Drive Android APIGoogle Play Services に統合された

Women Techmakers: Kyoto

Google Playかいはつしゃサービス

Page 2: (Google Play Servicesに統合された)Google Drive Android API

自己紹介   Junko Suzuki

愛知県から来ましたWeekend ProgrammerAndroid/iPhoneの健康管理アプリ『はかるだけレポート』など公開してます

  Google Play  https://play.google.com/store/apps/developer?id=KEROKKO  iTunes  https://itunes.apple.com/jp/artist/junko-suzuki/id454449706

Page 3: (Google Play Servicesに統合された)Google Drive Android API

なぜGoogle Driveか?何に使いたいのか? (MYアプリの場合)

データのクラウド化ができたら嬉しい                  

他のじゃだめなの?(Dropなんたらとか)身近な非ITな人はアカウント持ってないよGoogleアカウントなら持っていそう

GoogleのサービスをAndroidで使う          無理なく使えそう

Page 4: (Google Play Servicesに統合された)Google Drive Android API

このAPI、前からあったのでは?

Google Play Serviceに組み込まれ、更に強力に使いやすく

生まれ変わった!

  Google Play Services 4.1でDeveloper Preview版(2014/1月)  Google Play Services 4.2で正式版がリリース(2014/2月)

Google Playかいはつしゃサービス

Page 5: (Google Play Servicesに統合された)Google Drive Android API

Google Play Serviceとは?ある日突然、勝手にインストールされた謎アプリ

『開発者サービス』という日本語名のためアンインストールする人続出

Google Playかいはつしゃサービス

Google map、Google+、アカウント認証などで使われる機能が入った、   とても重要なアプリ!    ・・と見せかけたライブラリ的なもの

Page 6: (Google Play Servicesに統合された)Google Drive Android API

というわけで、まだ生まれたてな

『G Play Serviceに入ってる版     Google Drive Android API』について、『特長』と『組み込み方』をまとめました。

Page 7: (Google Play Servicesに統合された)Google Drive Android API

特長

Page 8: (Google Play Servicesに統合された)Google Drive Android API

特長1 ローカル?意識しなくてOKオフライン時にAPI呼び出しが失敗した時の処理書かなくっちゃ↓心配無用!↓ネットワークにつながっていなくても、電池がなくなっても、Androidの同期スケジューラーが、勝手にやってくれる

Page 9: (Google Play Servicesに統合された)Google Drive Android API

特長2 Android用に作られているG Play Serviceに統合されたことで、      アプリ自体の負担が少ない

アプリ(apk)のサイズが大きくならない↓◎ダウンロードが高速に◎アップデートも少なく◎メモリの消費も抑えられる

他のデバイス間でも自動的に同期

Page 10: (Google Play Servicesに統合された)Google Drive Android API

特長3 UI部品が用意されている

ほんの数行のコードで組み込める!

Page 11: (Google Play Servicesに統合された)Google Drive Android API

特長4  Storage Access Framework         を使っているStorage Access Frameworkとは・・・   Android 4.4 KitKat でリリース   複数のストレージプロバイダで動作   (クラウドもローカルも含む)   メタデータやシェア機能などへもアクセス

つまり、DropboxもGoogle Driveもギャラリーもダウンロードフォルダも、汎用的に扱える!

Page 12: (Google Play Servicesに統合された)Google Drive Android API

でも・・・KitKat以降でしか使えないんじゃ?

G Drive APIはGoogle Play servicesの一部として提供されるので、ご心配なく!

KitKatだけでなく、Android 2.3 Gingerbread以上

のデバイスでサポート

  (2.2向けの場合G Play Services for Froyoもあり)

Page 13: (Google Play Servicesに統合された)Google Drive Android API

組み込み方

Page 14: (Google Play Servicesに統合された)Google Drive Android API

1. G Play Serviceライブラリの準備↓2. 証明書取得とアプリの登録↓3. アプリへの組み込み(接続・認証)↓4. アプリへの組み込み        (ファイル読み書き)

全体の流れ

ライブラリ

証明書取得

準備

コード

接続・認証

ファイル操作

Page 15: (Google Play Servicesに統合された)Google Drive Android API

手順1 ライブラリの準備Android SDK Manager でG Play Serviceをインストール

G Play ServiceのプロジェクトをWorkspaceにインポート

インポートしたライブラリへの参照を、作成するアプリに設定

ライブラリ

証明書取得

準備

コード

接続・認証

ファイル操作

Page 16: (Google Play Servicesに統合された)Google Drive Android API

手順1 ライブラリの準備作成するアプリのManifestファイルに<meta-data>タグを追加

ライブラリ

証明書取得

準備

コード

接続・認証

ファイル操作

<meta-data android:name="com.google.android.gms.version“ android:value ="@integer/google_play_services_version“/>

Page 17: (Google Play Servicesに統合された)Google Drive Android API

手順1 ライブラリの準備作成するアプリのproject直下の proguard-project.txtに追加

※ProGuard(難読化ツール)が 必要なクラスを削除してしまうのを 避けるため

-keep class * extends java.util.ListResourceBundle {protected Object getContents();

}・・・・・略・・・・・

ライブラリ

証明書取得

準備

コード

接続・認証

ファイル操作

Page 18: (Google Play Servicesに統合された)Google Drive Android API

手順2 証明書取得とアプリ登録署名付き証明書のSHA1フィンガープリント生成 ライブラリ

証明書取得

準備

コード

接続・認証

ファイル操作

keytool -exportcert -alias androiddebugkey   -keystore ~/.android/debug.keystore -list -v

Certificate fingerprints: SHA1: D8:AA:43:97:59:EE:C5:95:26:6A:07:EE:1C:37:8E:F4:F0:C8:05:C8

ターミナルウィンドウから keytool で。

赤字部分を次の手順内でコピペして使う

Page 19: (Google Play Servicesに統合された)Google Drive Android API

手順2 証明書取得とアプリ登録Google Developers Console でアプリ登録しクライアントID 作成

前手順のフィンガープリントをペースト

ライブラリ

証明書取得

準備

コード

接続・認証

ファイル操作

Page 20: (Google Play Servicesに統合された)Google Drive Android API

手順3  接続・認証GoogleAPIClientのインスタンス

mGoogleApiClient = new GoogleApiClient.Builder(this) .addApi(Drive.API) .addScope(Drive.SCOPE_FILE) .addConnectionCallbacks(this) ※ .addOnConnectionFailedListener(this) ※ .build();

※ G Play Serviceとの接続が  成功 / 失敗した時の処理を行うため

onCreate()の中などライブラリ

証明書取得

準備

コード

接続・認証

ファイル操作

Page 21: (Google Play Servicesに統合された)Google Drive Android API

手順3  接続・認証

ライブラリ

証明書取得

準備

コード

接続・認証

ファイル操作

接続と解除@Overrideprotected void onStart() { super.onStart(); if (!mResolvingError) { ※ mGoogleApiClient.connect(); }}@Overrideprotected void onStop() { mGoogleApiClient.disconnect(); super.onStop();}

※ 画面回転時など用にonSaveInstanceStateでエラー保持

Page 22: (Google Play Servicesに統合された)Google Drive Android API

手順3  接続・認証接続成功 (^-^)v

@Overridepublic void onConnected(Bundle connectionHint) { // Google Play Serviceに接続成功! // ファイル操作へ進んでください}

接続失敗 (T_T)・G Play Serviceが古い・アカウント認証前、など

ライブラリ

証明書取得

準備

コード

接続・認証

ファイル操作

@Overridepublic void onConnectionFailed (ConnectionResult result) { // 接続できなかった! // Serviceインストールや認証ダイアログへ }

Page 23: (Google Play Servicesに統合された)Google Drive Android API

G Play Serviceが端末に入っていないOR古い

インストールするよう誘導

勝手にやってくれる!

Page 24: (Google Play Servicesに統合された)Google Drive Android API

アプリから初めてG Play Serviceを使う

アカウントの選択から認証まで

勝手にやってくれる!

Page 25: (Google Play Servicesに統合された)Google Drive Android API

手順3  接続・認証既に認証済みで、何も問題なければ

ユーザーから見て、何もイベントは起こらない

アプリ内部では接続処理が行われる

ライブラリ

証明書取得

準備

コード

接続・認証

ファイル操作

Page 26: (Google Play Servicesに統合された)Google Drive Android API

手順4 ファイル作成・編集

ライブラリ

証明書取得

準備

コード

認証

ファイル操作

Contentsを作りコールバックを設定

Drive.DriveApi.newContents(mGoogleApiClient) .setResultCallback(fileCallback);

コールバック内でresult.contentsのOutputStreamに書き込み

新規ファイル作成Activity起動

Page 27: (Google Play Servicesに統合された)Google Drive Android API

新規ファイル作成Activityとは?MetadataChangeSet metadataChangeSet = new MetadataChangeSet.Builder() .setMimeType("text/plain") .setTitle("GDriveTest.txt").build();

IntentSender intentSender = Drive.DriveApi .newCreateFileActivityBuilder() .setInitialMetadata(metadataChangeSet) .setInitialContents(result.getContents()) .build(mGoogleApiClient);

startIntentSenderForResult(intentSender, CREATE_REQUEST_CODE, null, 0, 0, 0);

DriveApiに用意されていて

Page 28: (Google Play Servicesに統合された)Google Drive Android API

勝手にやってくれる!

Page 29: (Google Play Servicesに統合された)Google Drive Android API

(ピッカーを出さず)単にファイルを作りたいだけの場合は?

Drive.DriveApi.getRootFolder(mGoogleApiClient) .createFile(mGoogleApiClient, metadataChangeSet, result.getContents()) .setResultCallback(fileCallback);

でも、ちょっと注意!

その他にも、フォルダ操作など色々なメソッドが用意されている

Page 30: (Google Play Servicesに統合された)Google Drive Android API

ファイル名はユニークじゃない同名ファイルが複数ある可能性

(A) クエリで検索をかけてDriveIDをゲット    OR(B) リソースID (文字列)をどこかに保持                         

          →DriveIDをゲット

既存ファイルへのアクセスはDriveIDオブジェクトを使う(ファイル名で識別しないこと)

Page 31: (Google Play Servicesに統合された)Google Drive Android API

(A) ファイル名で問い合わせ → DriveID              (複数ある可能性も要考慮)

Query query = new Query.Builder() .addFilter(Filters.eq(SearchableField.TITLE, filename)) .build(); Drive.DriveApi.query(mGoogleApiClient, query) .setResultCallback( new ResultCallback<DriveApi.MetadataBufferResult>() { @Override public void onResult(DriveApi.MetadataBufferResult result) { ・・・・ } }); ※クエリ対象: MIME_TYPE, MODIFIED_DATE,

PARENTS, STARRED, TITLE, TRASHED

ResultのcontensからgetDriveId()でゲット

Page 32: (Google Play Servicesに統合された)Google Drive Android API

(B) リソースID (文字列) → DriveID

Drive.DriveApi.fetchDriveId(mGoogleApiClient, EXISTING_FILE_ID) .setResultCallback(idCallback);

既存のリソースIDを渡し、コールバックをセット

コールバックのresult.getDriveId()でゲット

(A)(B) どちらかの方法でDriveIDをゲットしたら

Page 33: (Google Play Servicesに統合された)Google Drive Android API

DriveIDを使ってファイル編集

DriveFile file = Drive.DriveApi.getFile(mGoogleApiClient, result.getDriveId());

ContentsResult contentsResult=file.openContents( mGoogleApiClient, DriveFile.MODE_WRITE_ONLY, null); OutputStream outputStream = contentsResult.getContents().getOutputStream();outputStream.write("Hello world".getBytes());

file.commitAndCloseContents(mGoogleApiClient, contentsResult.getContents());

DriveIDからDriveFileをゲット

Open → Edit → Close

Page 34: (Google Play Servicesに統合された)Google Drive Android API

最後にGoogle DevelopersのGoogle Drive Android API解説部分を日本語に訳しました。http://junsuke.hatenablog.com/entry/2014/02/20/095631

Android Studioを使う場合やフォルダ操作など、今回触れなかったケースについても解説されていますので詳しくはそちらを。

Page 35: (Google Play Servicesに統合された)Google Drive Android API

資料Google Developers “Google Drive Android API”https://developers.google.com/drive/android/

Android Developers “Google Drive Android API”https://developer.android.com/google/play-services/drive.html

Android Developers “Google Play Services”https://developer.android.com/google/play-services/index.html

GitHub: googledrive / android-demoshttps://github.com/googledrive/android-demos