K-NOTE

スマホアプリ開発とかの備忘録

当ブログの内容等の正確性は保証しません。ご利用は自己責任で!

【Android】Google Play Game Servicesを試してみたい #4 - サインインの実装

プロジェクトの作成

それでは、Androidプロジェクトを作成します。
気をつけるところは「Package Name」ぐらいです。「#2 - ゲームサービスのセットアップ(後編)」で入力したパッケージ名にします。
他は好きなように設定します。今回はデフォルトのまま行きます。


ライブラリの追加

前回導入したライブラリを追加します。

先ほど作成したプロジェクトのプロパティを開いて、サイドメニューのAndroidを選択します。
ライブラリーに「google-play-services_lib」と「BaseGameUtils」を追加します。

アプリケーションIDの定義

リソースにアプリケーションIDを定義します。
res->valuesにids.xmlを作成します。

ids.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_id">YOUR_APP_ID</string>
</resources>

YOUR_APP_IDに「#1 - ゲームサービスのセットアップ(前編)」で取得したアプリIDを指定します。

続いて、AndroidManifest.xmlを変更します。
applicationタグの中に以下のmeta-dataタグを追加します。

<meta-data android:name="com.google.android.gms.games.APP_ID"
        android:value="@string/app_id" />


レイアウトファイル

単純にサインインボタンとサインアウトボタンのみを持つレイアウトにします。

activity_main.xml
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <!-- サインイン -->
    <com.google.android.gms.common.SignInButton
        android:id="@+id/button_sign_in"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <!-- サインアウト -->
    <Button
        android:id="@+id/button_sign_out"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Sign Out" />

</LinearLayout>

サインインボタンは「com.google.android.gms.common.SignInButton」を使ったほうが無難なようです。
ブランディングガイドラインというものがあって、使用していいボタンデザインが細かく決められています。
ですので「com.google.android.gms.common.SignInButton」を使っておけば特に気にする必要はなさそうです。

Activityの実装

MainActivity.java
package jp.kforce.samplegame;

import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

import com.google.android.gms.common.SignInButton;
import com.google.example.games.basegameutils.BaseGameActivity;

public class MainActivity extends BaseGameActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // サインインボタンのクリックリスナー
        final SignInButton buttonSignIn = (SignInButton) findViewById(R.id.button_sign_in);
        buttonSignIn.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                Log.v("tag", "buttonSignIn click");
                beginUserInitiatedSignIn();
            }
        });

        // サインアウトボタンのクリックリスナー
        final Button buttonSignOut = (Button) findViewById(R.id.button_sign_out);
        buttonSignOut.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                Log.v("tag", "buttonSignOut click");
                signOut();
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public void onSignInSucceeded() {
        Log.v("tag", "onSignInSucceeded");
        // ここにサインイン成功時の処理を書く
    }

    @Override
    public void onSignInFailed() {
        Log.v("tag", "onSignInFailed");
        // ここにサインイン失敗時の処理を書く
    }
}

非常に簡単です。
まずは「BaseGameActivity」を継承します。
サインインボタンがクリックされたら 「beginUserInitiatedSignIn()」をコールしてサインインします。
サインインに成功すると「onSignInSucceeded()」がコールされますので、成功時の処理があれば書きます。
失敗すると「onSignInFailed()」がコールされますので、失敗時の処理があれば書きます。

実装は以上で終わりです。

実行してみる

それでは実機で実行してみます。
エミュレーターだとGooglePlayがインストールされてませんので実行できません。
(裏技的なのがあるかも知れませんが、私は知りません^^;)

実行するとサインインとサインアウトのボタンが表示されます。

サインインボタンを押すと、確認画面が表示されます。

次へを押します。
「ようこそ」と表示され、無事サインインができました。



次回は、リーダーボード関係を扱いたいと思います。