1
1

More than 3 years have passed since last update.

ifLinkマイクロサービスでGoogleアカウント選択画面を表示するには

Last updated at Posted at 2021-08-15

はじめに

ifLinkマイクロサービスを開発している八教と申します。

Google Fit API を用いて歩数取得をifLinkマイクロサービスを作成する際、
歩数を取得にはGoogleFitの情報にアクセスするための許可を得る必要があります。
UI有であれば特に気にせずアカウントID選択画面を表示するコードを組み込めば良いのですが、
UIがなくバックグラウンドでGoogle Fit情報を取得したい場合にどうやって
アカウントID選択画面を表示するかで難儀したので記載します。

検証環境情報

開発環境:AndroidStudio 3.6
検証端末:Oppo A5 2020 Android version 10

ifLinkとは

GoogleFitのアカウント選択画面

GoogleFit情報にアクセスしたいアカウント選択の画面表示のソースコードは以下の通り
https://developers.google.com/fit/android/api-client-example

            FitnessOptions fitnessOptions =
                    FitnessOptions.builder()
                            .addDataType(DataType.TYPE_STEP_COUNT_CUMULATIVE)
                            .addDataType(DataType.TYPE_STEP_COUNT_DELTA)
                            .addDataType(DataType.AGGREGATE_STEP_COUNT_DELTA)
                            .build();
            GoogleSignIn.requestPermissions(
                    this,
                    REQUEST_OAUTH_REQUEST_CODE,
                    GoogleSignIn.getLastSignedInAccount(getActivity()),
                    fitnessOptions);

ifLinkマイクロサービスへの実装

ifLinkマイクロサービスではIMS設定メニューでLOG出力可否を選択する画面があります。
今回はGoogleFIT情報を取得する際に必要なアカウントID選択をIMS設定メニューで設定できるようにし、
マイクロサービスをインストール後にGoogleFIT情報取得に必要なアカウントID選択を行い認証してからマイクロサービスを利用していただく流れとします。

BaseSettingsActivity クラスを継承したクラスでGoogleアカウントID選択をされた場合にGoogleアカウントID選択画面を表示するよう実装します。
Androidでは設定画面を作る仕組みがJetpackで提供されており、PreferenceFragmentCompatがその役割を提供しています。

@Override
protected PreferenceFragmentCompat getFragment() {
   return new Fragment();
}

IMS設定メニューでGoogleFit情報取得のアカウントID選択をタップされた際にアカウントID選択画面を表示します。

public static class Fragment extends BasePreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener {
    @Override
    public void onDisplayPreferenceDialog(Preference preference) {
        if (preference.getKey().equals("googleaccountkey") ) {
            Log.d(TAG, "onDisplayPreferenceDialog2");
            FitnessOptions fitnessOptions =
                    FitnessOptions.builder()
                            .addDataType(DataType.TYPE_STEP_COUNT_CUMULATIVE)
                            .addDataType(DataType.TYPE_STEP_COUNT_DELTA)
                            .addDataType(DataType.AGGREGATE_STEP_COUNT_DELTA)
                            .build();
            GoogleSignIn.requestPermissions(
                    this,
                    REQUEST_OAUTH_REQUEST_CODE,
                    GoogleSignIn.getLastSignedInAccount(getActivity()),
                    fitnessOptions);
        }else{
            super.onDisplayPreferenceDialog(preference);
            Log.d(TAG, "onDisplayPreferenceDialog4");
        }
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        Log.i(TAG, "requestCode=" + requestCode);
        Log.i(TAG, "data=" + data);

        if (resultCode == Activity.RESULT_OK) {
            if (requestCode == REQUEST_OAUTH_REQUEST_CODE) {
                Toast.makeText(getActivity().getApplicationContext(), "googleアカウントが有効です", Toast.LENGTH_LONG).show();
                Log.i(TAG, "googleアカウントが有効です");
            }
        }
        else{
            Toast.makeText(getActivity().getApplicationContext(), "googleアカウントが無効です", Toast.LENGTH_LONG).show();
            Log.i(TAG, "resultCode == " + resultCode);
            Log.i(TAG, "googleアカウントが無効です");
        }
    }
}

IMS設定メニューでGoogleFitの情報を取得したいアカウント選択画面を表示します。

<MultiSelectListPreference
    android:entries="@array/pref_log_level_list_title"
    android:entryValues="@array/pref_log_level_list_values"
    android:key="@string/pref_log_level_key"
    android:summary="@string/pref_log_level_summary"
    android:title="@string/pref_log_level" />

<EditTextPreference
    android:defaultValue="@string/pref_ggfitimsdevice_settings_parameter_default1"
    android:key="googleaccountkey"
    android:selectAllOnFocus="true"
    android:singleLine="true"
    android:summary="@string/pref_ggfitimsdevice_settings_parameter_summary1"
    android:title="@string/pref_ggfitimsdevice_settings_parameter_name1" />

<EditTextPreference
    android:defaultValue="@string/pref_ggfitimsdevice_settings_parameter_default2"
    android:key="@string/pref_ggfitimsdevice_settings_parameter_key2"
    android:selectAllOnFocus="true"
    android:singleLine="true"
    android:summary="@string/pref_ggfitimsdevice_settings_parameter_summary2"
    android:title="@string/pref_ggfitimsdevice_settings_parameter_name2" />

ifLinkエンジンの環境設定からGoogleアカウントを選択する画面が表示されます。

image.png

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1