Google Play Servicesとは

Google Play Servicesについて調査中。

Google Play Servicesとは

  • 日本語では「Google Play開発者サービス」
  • Googleが提供するサービスを利用するためのクラスライブラリ。
  • Googleの各種サービスを利用するのに必須。認証処理など。
  • Google Play Servicesはシステムに常駐してバックグラウンドで動いている。
    googleplayservices002
  • Google Play Storeで入手できる。
    googleplayservices001
  • 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();
}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です