////////// 20181215追記ここから
12/12にGoogleさんからメールが届いていた。
Notice: Google Fusion Tables Turndown というタイトルで。
2019/12/3にサービス終了する、とのこと。
自作アプリのデータ保管先として利用していこうと思ったところだったのに、残念・・・
公式サイトはこちら。
https://support.google.com/fusiontables/answer/9185417?hl=en
////////// 20181215追記ここまで
# なんでやってみた?
GoogleDrive上のスプレッドシートに日々の体重とかを記録している。12/12にGoogleさんからメールが届いていた。
Notice: Google Fusion Tables Turndown というタイトルで。
2019/12/3にサービス終了する、とのこと。
自作アプリのデータ保管先として利用していこうと思ったところだったのに、残念・・・
公式サイトはこちら。
https://support.google.com/fusiontables/answer/9185417?hl=en
////////// 20181215追記ここまで
# なんでやってみた?
最初は件数が少なかったから良かったけど、気づけば4年も記録していて、
比較のグラフなんて見たいと思っても、なかなか大変。
ということで、アプリでその辺をうまくカスタムして、既存のデータはそのまま流用したいと思い、うまいことできないかと調査。
そしたら、GoogleDriveにも簡単なDBを再現したFution Tablesというものがあると判明。
ということで、試してみる。
# やったこと
## Fusion Tables を有効にする
(1)のサイトを参考に、Fusion Tablesを有効にし、空のテーブルを作成。
カラムを想定した内容に変更。
また、「リンクの共有」をOnにし、「リンクを知っている全員」がアクセス
また、「リンクの共有」をOnにし、「リンクを知っている全員」がアクセス
参考サイトでは、スクリプトエディタでデータの操作方法を紹介しているが、今回は割愛。
## Google Drive APIが利用できるようにする
- プロジェクトの作成
- API登録
API登録を行おうとしたが、管理画面が更新されたようで、参考サイトの内容とは異なっていた。
「Identity-Aware Proxy」からAPIの登録ができそう。
画面遷移をすると、「IPAを使用するには、OAuth同意画面を構成する必要があります。」とのことなので、「同意画面を構成」してみる。
すると、「APIとサービス」という画面の「認証情報」の画面に遷移。
左メニューの「ダッシュボード」をクリック。
画面上部の「APIとサービスの有効化」ボタンをクリック。
検索窓に「Fusion」を入力して「Fustion Tables API」が表示されるので、
クリックして「有効にする」をクリック。
これでAPIの登録は完了。
- 認証情報の登録
APIの登録が完了すると、画面が自動遷移し、Fusion Tablesの設定画面に自動遷移。
認証情報を作成する必要がある旨のメッセージが表示されるので、作成してみる。
画面に従って、下記を設定。
1.必要な認証情報の種類を調べる
- 使用するAPI: Fusion Tables API
- APIを呼び出す場所: Android(今回はAndroidアプリから呼びたいので)
- アクセスするデータの種類: ユーザーデータ(なんとなく)
2.OAuth2.0クライアントIDを作成する
- 名前:適当に設定(Fusion Tablesで作成したTable名に合わせた)
- フィンガープリント
※デバッグ用のフィンガープリントを取得したいので、下記のコマンドを実行する
※PW入力を求められるので、デバッグ用証明書のPW「android」を入力する
※実行結果のSHA-1 署名証明書フィンガープリントをコピペ
> keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore -list -v
※PW入力を求められるので、デバッグ用証明書のPW「android」を入力する
※実行結果のSHA-1 署名証明書フィンガープリントをコピペ
> keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore -list -v
- パッケージ名:利用対象のAndroidアプリのパッケージ名
※Androidアプリのパッケージ名を記入
→「OAuthクライアントIDを作成」ボタンをクリック
3.OAuth2.0同意画面を設定する
- メールアドレス:プロジェクトの管理者のアドレスを選択する
- ユーザーに表示するサービス名:[ProjectName]-Fusion
※どのプロジェクトのどのサービスかがわかるようにしたら良さそう
→「次へ」ボタンをクリック
4.認証情報をダウンロードする
※必要に応じてダウンロード
→「完了」ボタンをクリック
完了すると、APIとサービスの画面の認証情報が選択された画面に戻る
作成した認証情報が表示されていればOK。
## APIを利用するAndroidアプリを作っていく
AndroidStudioを起動し、プロジェクトを作成する
特に注意するのはパッケージ名だけで、他は通常のAndroidアプリを作るときと同じ
- Create Android Project
- Application name
OAuth2.0クライアントIDを作成した際に設定した「名前」を入力する
- Company domain
OAuth2.0クライアントIDを作成した際に設定したパッケージ名を入力する(アプリ名を除いた部分)
- Project location
適宜
- Package name
OAuth2.0クライアントIDを作成した際に設定したパッケージ名になっていることを確認する
- Inclode XXXX
適宜
- Target Android Devices
今回はスマホでの利用を想定するので、「Phone and Tablet」を選択する
対象APIバージョンは、自分のスマホに合わせて選択する
- Add an Activity to Mobile
自分で画面を頑張って作るので「Empty Activity」を選択する
- Configure Activity
デフォルトの内容のまま
## 作成したプロジェクトの設定を変更していく
- ライブラリ追加
API利用のためにGoogleアカウント認証を利用できるようにする
ファイル: app/build.gradle
内容:
dependencies {
...
compile 'com.google.android.gms:play-services-auth:16.0.1'
compile 'com.google.android.gms:play-services-drive:16.0.0'
}
- パーミッション追加
インターネット接続のパーミッションを追加する
ファイル: AndroidManifest.xml
内容:
<uses-permission android:name="android.permission.INTERNET" />
3.OAuth2.0同意画面を設定する
- メールアドレス:プロジェクトの管理者のアドレスを選択する
- ユーザーに表示するサービス名:[ProjectName]-Fusion
※どのプロジェクトのどのサービスかがわかるようにしたら良さそう
→「次へ」ボタンをクリック
4.認証情報をダウンロードする
※必要に応じてダウンロード
→「完了」ボタンをクリック
完了すると、APIとサービスの画面の認証情報が選択された画面に戻る
作成した認証情報が表示されていればOK。
## APIを利用するAndroidアプリを作っていく
AndroidStudioを起動し、プロジェクトを作成する
特に注意するのはパッケージ名だけで、他は通常のAndroidアプリを作るときと同じ
- Create Android Project
- Application name
OAuth2.0クライアントIDを作成した際に設定した「名前」を入力する
- Company domain
OAuth2.0クライアントIDを作成した際に設定したパッケージ名を入力する(アプリ名を除いた部分)
- Project location
適宜
- Package name
OAuth2.0クライアントIDを作成した際に設定したパッケージ名になっていることを確認する
- Inclode XXXX
適宜
- Target Android Devices
今回はスマホでの利用を想定するので、「Phone and Tablet」を選択する
対象APIバージョンは、自分のスマホに合わせて選択する
- Add an Activity to Mobile
自分で画面を頑張って作るので「Empty Activity」を選択する
- Configure Activity
デフォルトの内容のまま
## 作成したプロジェクトの設定を変更していく
- ライブラリ追加
API利用のためにGoogleアカウント認証を利用できるようにする
ファイル: app/build.gradle
内容:
dependencies {
...
compile 'com.google.android.gms:play-services-auth:16.0.1'
compile 'com.google.android.gms:play-services-drive:16.0.0'
}
- パーミッション追加
インターネット接続のパーミッションを追加する
ファイル: AndroidManifest.xml
内容:
<uses-permission android:name="android.permission.INTERNET" />
- 認証処理の実装
(5)のサイトの「認証処理」の内容を実装する
- データ取得の実装
(5)のサイトの「テーブル情報の取得」に記載の内容を実装する。
selectの結果は、JSON形式だが、InputStreamに格納される。
そのため、InputStreamからString、そしてJSONオブジェクトに変換が必要。
なお、FusionTablesのレコードは、"rows"に配列で格納されているので、JSONArrayで取得する。
詳細は(9)のサイトを参照。
なお、Androidの場合、APIを呼び出すときには非同期で処理する必要がある。
そして、非同期処理にてUIの変更は禁止されている。
なので、AsyncTaskクラスを使って非同期で呼び出し&呼び出し後にUI更新を行う。
具体的には、下記の通り。
- AsyncTask#doInBackgroundで非同期(別スレッド)でAPIを呼び出す。
取得した結果をメインスレッドに返却するために、AsyncTaskの第三引数をVoidではなく、返却するオブジェクトの型(例:ListやString)を指定する。
- AsyncTask#onPostExecuteでdoInBackgroundの処理結果を受け取り、UIを更新する(メインスレッド)
これでハマって取得したデータを表示できなかった。。。
また、非同期処理の結果を返却するためのAsyncTaskクラスの宣言にハマった。
取得したデータは、TableLayoutとTableRowを利用して、表形式で表示した。
- データ登録の実装
(5)のサイトの「テーブル行追加処理」に記載の内容を実装する。
取得時と同様に、例外処理は割愛されている。
Insertの結果もInputStreamで取得可能。内容は、登録した際のrowIDが得られる。
# 感想
FusionTablesを利用したSelectとInsertをAndroidアプリとして実行できるようになった。
また、Androidアプリで表形式でのデータ表示もできるようになった。
ただ、(5)のサイトに紹介されている方法は、SQLを直接実行するようになっている。
FusionTablesはAPI化されているのに、SQL直接実装は格好が悪いように感じた。
なので、もう少し格好良い実装ができないか、追加調査をしてみる。
また、Select/Insertの他にUpdate/Deleteも実装してみたいと思う。
それは別の記事として投稿させていただく。
※なお、作成したソースはGithubで公開したいけど、パスワードとか入っているので、キレイにしてから公開したいと思う。
# 参考サイト
1)GoogleDriveでデータベースを使ったみた
https://sitest.jp/blog/?p=8701
2)Google APIからGoogle Fusion Tablesに触れる
http://schima.hatenablog.com/entry/2013/11/28/005648
3)AndroidアプリでGoogle Drive APIを使う
http://vividcode.hatenablog.com/entry/20130908/1378613811
4)Google Drive APIの有効化とクライアントID、クライアントシークレットの取得方法
https://www.virment.com/google-drive-api-activate/
5)AndroidからFution Tablesを操作する
https://qiita.com/kassy_kz/items/4c0ca6571fa3f5004ec1
6)Google Play Serviceのバージョン確認
https://developers.google.com/android/guides/setup
7)AndroidからAPIを叩いてJSON取って中身を表示させるまで
https://qiita.com/minme31/items/a9636cb0453524c64e67
8)Google Table Fusions リファレンス(英語)
https://developers.google.com/fusiontables/docs/v2/reference/
9)Fusion Tables REST API : Query
https://developers.google.com/fusiontables/docs/v2/reference/query/sql
4)Google Drive APIの有効化とクライアントID、クライアントシークレットの取得方法
https://www.virment.com/google-drive-api-activate/
5)AndroidからFution Tablesを操作する
https://qiita.com/kassy_kz/items/4c0ca6571fa3f5004ec1
6)Google Play Serviceのバージョン確認
https://developers.google.com/android/guides/setup
7)AndroidからAPIを叩いてJSON取って中身を表示させるまで
https://qiita.com/minme31/items/a9636cb0453524c64e67
8)Google Table Fusions リファレンス(英語)
https://developers.google.com/fusiontables/docs/v2/reference/
9)Fusion Tables REST API : Query
https://developers.google.com/fusiontables/docs/v2/reference/query/sql
0 件のコメント:
コメントを投稿