Google Play Servicesについて調査中。
Google Play Servicesとは
- 日本語では「Google Play開発者サービス」
- Googleが提供するサービスを利用するためのクラスライブラリ。
- Googleの各種サービスを利用するのに必須。認証処理など。
- Google Play Servicesはシステムに常駐してバックグラウンドで動いている。
- Google Play Storeで入手できる。
- Androidスマートフォン・タブレットには、プレインストールされている。
※ Kindle(FireOS)にはインストールされていない。 - Android OSとは別個に更新される。
- OSのアップグレード用パッケージは端末メーカーから提供されるが、Google Play ServiceはGoogleから提供される。
- Android 2.3(APIレベル9)以上でGoogle Playストアアプリがインストールされていれば、古い端末でも最新のGoogleのサービスを利用したアプリを利用できる。
APIのリスト
Google Play サービスの主なAPIリスト
- Google+
- Google Account Login
- Google Actions, Base Client Library
- Google Address API
- Google App Indexing
- Google App Invites
- Google Analytics
- Google Cast
- Google Cloud Messaging
- Google Drive
- Google Fit
- Google Location, Activity Recognition, and Places
- Google Maps
- Google Mobile Ads
- Mobile Vision
- Google Nearby
- Google Panorama Viewer
- Google Play Game services
- SafetyNet
- Google Wallet
- Android Wear
Android Studioで利用するには
build.graleを開きます。
次の行を追加します。
apply plugin: 'com.android.application'
...
dependencies {
compile 'com.google.android.gms:play-services:8.4.0'
}
保存したら、メニューから「Tools」→「Android」→「Sync Project with Gradle Files」を選択して、設定を反映します。
必要なAPIを選択する
Androidアプリが持つことのできるメソッドは最大65536個までの制限があります。
このメソッド数にはフレームワークやライブラリのメソッドも含まれています。
Google Play Services バージョン6.5から、必要なAPIだけを選択してコンパイルできるようになりました。
compile 'com.google.android.gms:play-services-fitness:8.4.0'
compile 'com.google.android.gms:play-services-wearable:8.4.0'
アプリでGoogle Play Servicesが利用できるか確認する
GoogleApiClient.BuilderでGoogleApiClientの設定を行います。
このとき、コールバックを受け取るようにします。
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() {
})
.addOnConnectionFailedListener(new GoogleApiClient.OnConnectionFailedListener() {
})
使用するAPIを指定します。
.addApi(Drive.API)
必要なOAuthのスコープを指定します。
.addScope(Drive.SCOPE_FILE)
build()メソッドでインスタンスを生成します。
.build();
接続に失敗したとき、認証が必要であれば、認証処理を行います。
.addOnConnectionFailedListener(new GoogleApiClient.OnConnectionFailedListener() {
/**
* 接続エラーが発生したとき
* @param connectionResult
*/
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
Log.d(TAG, "onConnectionFailed");
Log.d(TAG, connectionResult.toString());
switch (connectionResult.getErrorCode()) {
//認証が必要な場合
case ConnectionResult.SIGN_IN_REQUIRED:
try {
connectionResult.startResolutionForResult(MainActivity.this, REQUEST_OAUTH);
} catch (IntentSender.SendIntentException e) {
e.printStackTrace();
}
}
}
})
認証できたら接続します。
/**
* 認証が終わった時の処理
*/
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case REQUEST_OAUTH:
if (resultCode != Activity.RESULT_OK) {
return;
}
mGoogleApiClient.connect();
return;
}
}
全体としては次のようなコードになります。
private static final String TAG = "MainActivity";
private static final int REQUEST_OAUTH = 999;
private GoogleApiClient mGoogleApiClient;
@Override
protected void onCreate(Bundle savedInstanceState) {
...
checkGooglePlayServices();
}
void checkGooglePlayServices() {
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() {
/**
* 接続に成功したとき
* @param bundle
*/
@Override
public void onConnected(Bundle bundle) {
Log.d(TAG, "onConnected");
}
/**
* 接続が中断されたとき
* @param i
*/
@Override
public void onConnectionSuspended(int i) {
Log.d(TAG, "onConnectionSuspended");
}
})
.addOnConnectionFailedListener(new GoogleApiClient.OnConnectionFailedListener() {
/**
* 接続エラーが発生したとき
* @param connectionResult
*/
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
Log.d(TAG, "onConnectionFailed");
Log.d(TAG, connectionResult.toString());
switch (connectionResult.getErrorCode()) {
//認証が必要な場合
case ConnectionResult.SIGN_IN_REQUIRED:
try {
connectionResult.startResolutionForResult(MainActivity.this, REQUEST_OAUTH);
} catch (IntentSender.SendIntentException e) {
e.printStackTrace();
}
}
}
})
.addApi(Drive.API)
.addScope(Drive.SCOPE_FILE)
.build();
mGoogleApiClient.connect();
}
/**
* 認証が終わった時の処理
*/
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case REQUEST_OAUTH:
if (resultCode != Activity.RESULT_OK) {
return;
}
mGoogleApiClient.connect();
return;
}
}
@Override
protected void onStop() {
mGoogleApiClient.disconnect();
super.onStop();
}